具有实体框架代码优先和继承类的外键
本文关键字:继承 实体 框架 代码 | 更新日期: 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)创建了一个表?