0

我有下面的类层次结构之间的许多关系:实体框架表每类/类型,许多派生类

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),不完全一样的情况下,提及herehere

任何洞察力都是有价值的。

更新:

问题似乎是在将实体添加到数据库中。在种子方法如下(很简单,这里我只是添加角色):

GetDefaultUsersAndRoles(out defaultUsers, out roleNames); 

      foreach (var roleName in roleNames) 
      { 
       Role roleToAdd = new Role 
       { 
        ApproverName = roleName 
       }; 

       context.Roles.Add(roleToAdd); 
      } 

      context.SaveChanges(); 
+0

可能重复(http://stackoverflow.com/questions/12445991/updating-a-many-to - 许多信息收集与-EF-代码优先) – Faredoon

回答

0

现在解决了。这是一个外键映射的问题:更新一个多对多的收集与EF代码第一]的

   modelBuilder.Entity<User>().HasMany<Role>(r => r.Roles).WithMany(u => u.Users); 
相关问题