2014-09-04 174 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); 
} 
相關問題