无法转换类型异常的对象

时间:2014-09-04 17:28:07

标签: c# asp.net entity-framework

我正在使用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);
}

我已经有很长一段时间了,真的无法弄清楚为什么这不起作用。如果我没有为数据库播种,那么就没有任何问题。在不创建用户的情况下播种数据库也不会给我带来任何麻烦,但是一旦我尝试创建用户,就会发生这种情况。不要认为这与关系如何循环有关,我删除了级联删除。

1 个答案:

答案 0 :(得分:3)

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

即可
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
    base.OnModelCreating(modelBuilder);
}