2014-09-04 123 views
2

我正在使用ASP.NET和EF 6.1。我试图用种子一些对象的数据库,但我得到以下异常:无法投射异常类型对象

Unable to cast object of type 'System.Collections.Generic.HashSet`1[B]' to type 'B'. 

当我尝试创建一个使用用户管理器的用户。

所有的数据库初始化都是在种子方法中完成的。我简化了这些类,因为其中有些参数很多。

public class User : IdentityUser 
{ 
    public User() : base() 
    { 
     Bs = new HashSet<B>(); 
    } 

    public Guid AId { get; set; } 
    public virtual A A { get; set; } 

    public virtual ICollection<B> Bs { get; set; } 
} 


public class A 
{ 
    public A() 
    { 
     Bs = new HashSet<B>(); 
     Users = new HashSet<User>(); 
    } 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid Id { get; set; } 

    public virtual ICollection<B> Bs { get; set; } 
    public virtual ICollection<User> Users { get; set; } 
} 


public class B 
{ 
    public B() 
    { 
     Users = new HashSet<User>(); 
    } 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid Id { get; set; } 

    public Guid AId { get; set; } 
    public virtual A A { get; set; } 

    public virtual ICollection<User> Users { get; set; } 
} 

protected override void Seed(myContext context) 
{ 
    var a = new A; 
    var b = new B; 
    A.Bs.Add(B); 
    context.As.Add(A); 
    var userStore = new UserStore<User>(context); 
    var userManager = new UserManager<User>(userStore); 
    var user = new User 
    { 
     UserName = "username", 
     A = a 
    }; 
    userManager.Create(user, "password!"); 
    user.Bs.Add(B); 
    base.Seed(context); 
} 

我一直在它的相当一段时间,真的不知道为什么这是行不通的。如果我不种子数据库,没有任何问题。在没有创建用户的情况下播种数据库也不会给我带来麻烦,但是一旦我尝试创建用户,就会发生这种情况。不要认为它与这些关系如何结合在一起有什么关系,我删除了级联删除。

回答

3

如果有人遇到同样的问题,删除多对多级联删除约定的窍门。只需将此代码添加到上下文类

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); 
    base.OnModelCreating(modelBuilder); 
} 
相关问题