我有下面的類層次結構之間的許多關係:實體框架表每類/類型,許多派生類
public abstract class Approver
{
[Key]
public int Id { get; set; }
[Required]
public String ApproverName { get; set; }
}
[Table("Role")]
public class Role : Approver
{
public virtual string Description { get; set; }
public virtual ICollection<User> Users { get; set; }
}
[Table("User")]
public class User : Approver
{
[Required]
public virtual String Email { get; set; }
[Required, DataType(DataType.Password)]
public virtual String Password { get; set; }
public virtual String FirstName { get; set; }
public virtual String LastName { get; set; }
public virtual ICollection<Role> Roles { get; set; }
{
以下代碼是在OnModelCreating()方法:
modelBuilder.Entity<User>().HasMany(e=>e.Roles).WithMany(e=>e.Users);
運行'Update-Database'命令時的錯誤是:
System.Data.Entity.Infrastructure.DbUpdateException:從ObjectStateEntry中檢索值時出錯。詳情請參閱內部例外。 ---> System.Data.UpdateException:從ObjectStateEntry中檢索值時出錯。詳情請參閱內部例外。 ---> System.Data.MappingException: (11,10):錯誤3034:從第11,966行開始映射片段時出現問題:具有不同鍵的兩個實體映射到同一行。確保這兩個映射片段不會將具有不同鍵的兩組實體映射到兩個重疊的行組。
(11,10):錯誤3034:從第6,11行開始映射片段時出現問題:具有不同鍵的兩個實體映射到同一行。確保這兩個映射片段不會將具有不同鍵的兩組實體映射到同一組行。
(966,6):錯誤3034:從第6,966行開始映射片段時出現問題:將具有不同主鍵的兩行映射到同一個實體。確保這兩個映射片段不會將具有相同鍵的兩組實體映射到兩個重疊的行組。
似乎有一個類似的已知問題(至少至EF5),不完全一樣的情況下,提及here和here。
任何洞察力都是有價值的。
更新:
問題似乎是在將實體添加到數據庫中。在種子方法如下(很簡單,這裏我只是添加角色):
GetDefaultUsersAndRoles(out defaultUsers, out roleNames);
foreach (var roleName in roleNames)
{
Role roleToAdd = new Role
{
ApproverName = roleName
};
context.Roles.Add(roleToAdd);
}
context.SaveChanges();
可能重複(http://stackoverflow.com/questions/12445991/updating-a-many-to - 許多信息收集與-EF-代碼優先) – Faredoon