繁体   English   中英

无法转换类型异常的对象

[英]Unable to cast object of type exception

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM