我有一个公司和员工类,都来自Holder类。 我在EntityFramework 5中使用Table per Type,在数据库中创建它们
我有一个CheckinTools类,它使用我的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检索Employee或Company的操作都会返回以下错误:“属性'标识'是对象关键信息的一部分,无法修改“
我发现在我的CheckinTool表中它有一个名为“IdHolder”的列,它在Holder表中有一个Id的外键,而我的Employee和Company表有一个Id的外键,也在Holder中
IMO我以一种糟糕的方式解决了这个问题。
我刚刚将CheckinTool类中的EmployeeCompany属性类型从Holder更改为int 但我觉得有些东西不适合这个解决方案。
任何人都知道如何在不需要更改EmplotyeeCompany属性的情况下解决它?
提前致谢
答案 0 :(得分:0)
CheckInTool应该有两列带有fks,一列是toIntId表(基类),另一列是Holder表(肯定是Holder属性)。
我怀疑你对表的映射存在错误。您是否为每个类创建了一个表,包括IntId和Holder?