Entity Framework报错:不支持同类型多对象集,ApplicationUsers与Users均包含同类型实例
报错原因
- 你继承的
IdentityDbContext<ApplicationUser>父类已经内置了名为Users的DbSet<ApplicationUser>对象集,你在自定义的ApplicationDbContext子类中又额外声明了名为ApplicationUsers的同类型DbSet,导致Entity Framework识别到同一实体类型对应两个不同的对象集,触发该报错。
标准解决方案
直接删除你在ApplicationDbContext类末尾手动添加的这行代码即可:
public System.Data.Entity.DbSet<E_Commerce.Models.ApplicationUser> ApplicationUsers { get; set; }
删除后你可以直接使用父类内置的Users属性操作ApplicationUser类型的数据,示例:
// 查询所有用户 var userList = await dbContext.Users.ToListAsync(); // 按ID查询指定用户 var user = await dbContext.Users.FirstOrDefaultAsync(u => u.Id == userId);
可选自定义配置
如果你确实需要使用ApplicationUsers作为用户集合的属性名,可以按如下方式修改避免冲突:
- 替换原有属性声明,用
new关键字隐藏父类的Users属性:
public new DbSet<ApplicationUser> ApplicationUsers { get; set; }
- 重写
OnModelCreating方法,忽略父类内置的Users集合映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<ApplicationDbContext>().Ignore(c => c.Users); modelBuilder.Entity<ApplicationUser>().ToTable("AspNetUsers"); }
内容的提问来源于stack exchange,提问作者sulaiman Farooqi
相关产品推荐
相关产品推荐

