我正在使用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);
}
我已经有很长一段时间了,真的无法弄清楚为什么这不起作用。如果我没有为数据库播种,那么就没有任何问题。在不创建用户的情况下播种数据库也不会给我带来任何麻烦,但是一旦我尝试创建用户,就会发生这种情况。不要认为这与关系如何循环有关,我删除了级联删除。
答案 0 :(得分:3)
如果有人遇到同样的问题,删除多对多级联删除约定就可以了。只需将此代码添加到上下文类
即可protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
base.OnModelCreating(modelBuilder);
}