entity framework将实体映射到多个表?

我在使用EF时遇到了问题。 我有以下情况:

表用户:用户名,密码,RoleId,IsActive,CreatedDate,ActivedDate

表管理员:用户名,名称

表员工:用户名,姓名,职位,电话

从这个数据库模式我想通过合并表数据生成以下实体:

public class User { [Key] public string Username { get; set; } public string Password { get; set; } public int RoleId { get; set; } public bool IsActive { get; set; } public DateTime CreatedDate { get; set; } public DateTime ActivedDate { get; set; } public string Name { get; set; } public string Phone { get; set; } public string Position { get; set; } [ForeignKey("RoleId")] public Role Role { get; set; } } 

配置类:

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity() .Map(map => { map.Properties(p => new { p.Username, p.Password, p.RoleId, p.IsActive, p.CreatedDate, p.ActivedDate }); map.ToTable("User"); }) .Map(map => { map.Properties(p => new { p.Username, p.Name }); map.ToTable("Admin"); }).Map(map => { map.Properties(p => new { p.Username, p.Name, p.Phone, p.Position }); map.ToTable("Staff"); }); base.OnModelCreating(modelBuilder); } 

我已经测试了它,但它没有按预期工作。 我总是得到这样的信息:

“用户”类型的属性只能映射一次。 非键属性“名称”不止一次映射。 确保Properties方法仅指定每个非键属性一次。

我错过了什么吗?

问题是AdminStaff中的两个Name当然不能同时映射到User一个Name属性。

但是,您可以使用两个不同的名称属性,并将它们映射到两个表中的相同列名:

User变更:

 public class User { [Key] public string Username { get; set; } ... public string AdminName { get; set; } public string StaffName { get; set; } ... } 

和映射片段:

 .Map(map => { map.Properties(p => new { p.Username, p.AdminName }); map.Property(p => p.AdminName).HasColumnName("Name"); map.ToTable("Admin"); }).Map(map => { map.Properties(p => new { p.Username, p.StaffName, p.Phone, p.Position }); map.Property(p => p.StaffName).HasColumnName("Name"); map.ToTable("Staff"); });