【发布时间】:2013-12-17 16:24:53
【问题描述】:
我有一个 Company 和 Employee 类,它们都继承自 Holder 类。 我将 Table per Type 与 EntityFramework 5 一起使用,在数据库中创建它们
我有一个 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 检索员工或公司的操作都会返回以下错误:“属性 'Id '是对象关键信息的一部分,不能修改”
我观察到,在我的 CheckinTool 表中,它有一个名为“IdHolder”的列,该列在 Holder 表中有一个指向 Id 的外键,而我的 Employee 和 Company 表在 Holder 中也有一个指向 Id 的外键
IMO 我以一种糟糕的方式解决了这个问题。
我刚刚将 CheckinTool 类中的 EmployeeCompany 属性类型从 Holder 更改为 int 但我觉得有些东西不适合这个解决方案。
有人知道如何在不需要更改 EmplotyeeCompany 属性的情况下解决它吗?
提前致谢
【问题讨论】:
-
我不知道问题出在哪里,因为我从来没有使用注解来定义对象和表之间的映射。请考虑使用 Fluent API。
-
他没有使用注释来映射。注释告诉 EF 它是一个 Key 并且应该是自动生成的。
-
我使用 fluent API 仅用于使用 Entity Framework 应用每种类型的表,但我需要使用哪个注释?对不起,我不明白你的评论 Maess
标签: c# entity-framework entity-framework-5