EF Core 3.1 无法将备用键标记为可选

EF Core 3.1 Unable to mark alternate key optional

Error: The property 'UserId' on entity type 'Staff' cannot be marked as nullable/optional because it has been included in a key {'UserId'}.

我有 Staff 实体,UserId 可以为空

public class Staff
{
    public string Id { get; set; }
    public string Name{ get; set; }
    public string UserId { get; set; }
}

builder.Property(e => e.UserId).HasColumnName("user_id").HasMaxLength(32).IsFixedLength(true).IsRequired(false);

另一个业务实体制造商,CreatedBy 是必需的。

public class Manufacturer
{
    public string Id { get; set; }
    public string CreatedBy { get; set; }
    public virtual Staff CreatorStaff { get; set; }
}

builder.HasOne(p => p.CreatorStaff).WithMany().HasForeignKey(p => p.CreatedBy).HasPrincipalKey(p => p.UserId);

我的查询:

        var result = dbContext.Manufacturers
                            .Where(p => p.TenantId == tenantId)
                            .Where(criteria.Filters)
                            .OrderBy(criteria.OrderBys)
                            .Skip(criteria.Pager.Start)
                            .Take(criteria.Pager.Count)
                            .Select(p => new Manufacturer(p) { Creator = p.CreatorStaff == null ? null : p.CreatorStaff.Name })
                            .AsNoTracking()
                            .ToList();

好像是个bug?

Alternate Key 不允许为空,很早就讨论过了,5 年后 issue 仍然开放。业主坚持让备用钥匙可选是不合理的 您可能需要查看 this 了解详细信息

现在对我来说,使用“左连接”语法。