如何映射继承实体我试图到AdventureWorks 2012示例数据库映射到EF 6.1.3代码第一数据层,和我停留在如何将Employee
和Person
实体映射。员工显然应该从Person
派生,Person.PersonType
的EM
,但我不知道如何使用EntityTypeConfiguration<TEntity>
'映射'类来映射它。知道这一点,我也可以映射Person
派生自BusinessEntity
。在EF代码优先
Q
在EF代码优先
2
A
回答
0
我将解释如何执行Employee
和使用代码优先方法的Person
表之间的映射,可以按照相同的步骤BusinessEntity
和Person
之间进行映射继承。
使用的继承映射策略是TPT(Table Per Type),我创建了一个简单的控制台应用程序,安装了AdventureWorks2012数据库后,我跟着EF DataModel向导生成了我将修改为映射的代码第一类继承,因此,这里的结果代码:
Person类:
public partial class Person
{
[Key]
public int BusinessEntityID { get; set; }
[Required]
public string PersonType { get; set; }
public bool NameStyle { get; set; }
public string Title { get; set; }
[Required]
public string FirstName { get; set; }
public string MiddleName { get; set; }
[Required]
public string LastName { get; set; }
public string Suffix { get; set; }
public int EmailPromotion { get; set; }
[Column(TypeName = "xml")]
public string AdditionalContactInfo { get; set; }
[Column(TypeName = "xml")]
public string Demographics { get; set; }
}
Employee类:
public partial class Employee: Person
{
[Required]
public string NationalIDNumber { get; set; }
[Required]
public string LoginID { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public short? OrganizationLevel { get; set; }
[Required]
public string JobTitle { get; set; }
[Column(TypeName = "date")]
public DateTime BirthDate { get; set; }
[Required]
public string MaritalStatus { get; set; }
[Required]
public string Gender { get; set; }
[Column(TypeName = "date")]
public DateTime HireDate { get; set; }
public bool SalariedFlag { get; set; }
public short VacationHours { get; set; }
public short SickLeaveHours { get; set; }
public bool CurrentFlag { get; set; }
public Guid rowguid { get; set; }
public DateTime ModifiedDate { get; set; }
}
最后的AW上下文类:
public partial class AW : DbContext
{
public AW()
: base("name=AWConnectionString")
{
}
public virtual DbSet<Employee> Employees { get; set; }
public virtual DbSet<Person> People { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>().ToTable("Person.Person");
modelBuilder.Entity<Employee>().ToTable("HumanResources.Employee");
}
}
一个简单的测试(这对我的作品;)):
class Program
{
static void Main(string[] args)
{
using(var db= new AW())
{
var e = db.Employees.First();
e.JobTitle = "Web Developper";
db.SaveChanges();
}
}
}
您可以参考this文章了解更多详细信息,
相关问题
- 1. EF代码优先 -
- 2. EF代码优先 - System.InvalidOperationException
- 3. MVC4 - EF代码优先
- 4. 与EF代码优先
- 5. 继承EF代码优先
- 6. EF代码优先外键
- 7. 许多在EF代码优先
- 8. Northwind在EF代码优先的示例
- 9. EF代码优先 - 在填充模型
- 10. EF代码优先迁移不编译
- 11. EF代码优先:连接表为空
- 12. EF 4.1代码优先 - 添加列
- 13. EF代码优先的对称关系
- 14. 使用EF代码优先本地extention
- 15. 删除EF代码优先列
- 16. EF 5 - 代码优先迁移
- 17. EF代码优先 - 无效的列名
- 18. EF代码优先映射视图
- 19. EF代码优先 - 集合内
- 20. EF代码优先:CreateIndex - 覆盖索引
- 21. EF代码优先 - 映射为FK
- 22. EF代码优先:型号配置
- 23. EF代码优先和确认字段
- 24. 一个DbSet的EF代码优先PluralizingTableNameConvention
- 25. EF代码优先多对多更新
- 26. EF代码优先与两个DbContexts
- 27. MVC3:EF代码优先和认证
- 28. MVC3模型设置 - 代码优先EF
- 29. 用EF代码优先锁定
- 30. EF代码优先和IIS回收
员工应该获得人,你必须给他们相同的PK(让员工使用继承的PersonID密钥)。 EF将正确映射它们。 –
https://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-con-crete-type-tpc-and-choosing-strategy - 指引和相关帖子 –