具有实体框架代码优先和继承类的外键

本文关键字:继承 实体 框架 代码 | 更新日期: 2024-10-25 23:11:58

我有一个公司和员工类,两者都继承自一个 Holder 类。我正在将每种类型的表与实体框架 5 一起使用,以在数据库中创建它们

我有一个CheckinTools Class,它使用我的Holder类。

public class Company : Holder
{       
    public virtual string Email { get; set; }
    public virtual string Phone { get; set; }
}
public class Employee: Holder
{
    public virtual string Phone { get; set; }
    public virtual string LastName { get; set; }
}
public class Holder: IntId
{
    public virtual string Name { get; set; }
}    
public class CheckinTool: IntId
{
    public virtual Holder EmployeeCompanyHolder { get; set; }
    public virtual Tool Tool { get; set; }
    public virtual DateTime CheckinDateTime { get; set; }
}
public class IntId
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
}

当我在 MVC 应用程序中测试 CRUD 时,一切正常,直到我创建 CheckinTool,在我创建 CheckinTool 之后,任何通过 ID 检索员工或公司的操作都会返回以下错误:"属性'Id'是对象关键信息的一部分,无法修改"

我观察到在我的CheckinTool表中,它有一个名为"IdHolder"的列,该列在Holder表中具有Id的外键,而我的员工和公司表在Holder中也有Id的外键

IMO 我以一种糟糕的方式解决了这个问题。

我刚刚将 CheckinTool 类中的 EmployeeCompany 属性类型从 Holder 更改为 int但我觉得有些东西不适合这个解决方案。

任何人都知道如何在不更改EmplotyeeCompany属性的情况下解决它?

提前致谢

具有实体框架代码优先和继承类的外键

CheckInTool 应该有两列带有 fks,一列到 IntId 表(基类),一列到 Holder 表(确保 Holder 属性)。

我怀疑您到表的映射有一个错误。您是否为每个类(包括 IntId 和 Holder)创建了一个表?