实体与基础实体之间的关系

时间:2020-03-27 01:49:29

标签: entity-framework orm foreign-keys ef-code-first

请考虑以下内容:

public class BaseEntity
{
    public Guid CreatedBy { get; set; }
    public DateTimeOffset CreatedOn { get; set; }
    public Guid ModifiedBy { get; set; }
    public DateTimeOffset ModifiedOn { get; set; }
}

public class User : BaseEntity
{
    public Guid UserId { get; set; }
    public string Email { get; set; }

    public ICollection<Company> Companies { get; set; }
}

public class Company : BaseEntity
{
    public Guid CompanyId { get; set; }
    public string Name { get; set; }

    [ForeignKey("UserId")]
    public User User { get; set; }
}

创建了第一个迁移并查看了SQL中的表后,我意识到User导航属性(以及所有具有相同FK的模型)是多余的,因为它始终等于ID的ID。 CreatedBy属性。 我试图基于this answer建立UserBaseEntity之间的关系(也从User模型中删除了Company FK),但没有成功。< / p>

错误:

无法确定导航所代表的关系 类型“用户”的属性“ Company.CreatedBy”。手动配置 关系,或使用“ [NotMapped]”忽略此属性 属性,或使用“ OnModelCreating”中的“ EntityTypeBuilder.Ignore”。

模型:

public class BaseEntity
{
    public Guid CreatedById { get; set; }
    public DateTimeOffset CreatedOn { get; set; }
    public Guid ModifiedById { get; set; }
    public DateTimeOffset ModifiedOn { get; set; }

    [ForeignKey("CreatedById")]
    public User CreatedBy { get; set; }

    [ForeignKey("ModifiedById")]
    public User ModifiedBy { get; set; }
}

public class User : BaseEntity
{
    public Guid UserId { get; set; }
    public string Email { get; set; }

    public ICollection<Company> Companies { get; set; }
}

public class Company : BaseEntity
{
    public Guid CompanyId { get; set; }
    public string Name { get; set; }
}

我有正确的方法来实现它吗?
选项B用于维护原始模型,而不使用CreatedBy / ModifiedBy属性上的导航,并在必要时查询用户。

0 个答案:

没有答案