我在我的应用中使用ASP.NET Identity时遇到错误。
不支持每种类型的多个对象集。对象集 '身份用户'和'用户'都可以包含类型的实例 '推荐Platform.Models.ApplicationUser'。
我在StackOverflow中看到了一些关于此错误的问题。全部表示相同类型的两个DbSet
个对象。但在我的DbContext
中,DbSets
的类型并不相同。在登录期间,FindAsync()
方法会抛出异常。
if (ModelState.IsValid)
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null && user.IsConfirmed)
{
问题是我没有两个相同类型的DbSets
。我的上下文看起来像这样:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public System.Data.Entity.DbSet<RecommendationPlatform.Models.ApplicationUser> IdentityUsers { get; set; }
}
和
public class RecContext : DbContext
{
public RecContext()
: base("RecConnection")
{
Database.SetInitializer<RecContext>(new DropCreateDatabaseIfModelChanges<RecContext>());
}
public DbSet<Recommendation> Recommendations { get; set; }
public DbSet<Geolocation> Geolocations { get; set; }
public DbSet<Faq> Faqs { get; set; }
public DbSet<IndexText> IndexTexts { get; set; }
}
什么可能导致这个问题?也许与内置的ASP.NET身份功能相关的东西?无论如何,Users
类型是什么?我的应用程序中没有它......
答案 0 :(得分:99)
你有两个相同类型的DbSet
s`。
IdentityDbContext<T>
本身包含Users
属性,声明为:
public DbSet<T> Users { get; set; }
你在课堂上宣布第二个。
答案 1 :(得分:68)
查看这个文件“ApplicationDbContext.cs”,删除最后由scaffold生成的行,应该是这样的:
public System.Data.Entity.DbSet<Manager.Models.ApplicationUser> IdentityUsers { get; set; }
答案 2 :(得分:4)
使用脚手架创建View
可能引起此问题。您可能做过这样的事情:视图>添加>新脚手架项目...> MVC 5视图> [模型类:ApplicationUser] 。
脚手架向导在您的ApplicationDbContext
类中添加了新的代码行。
public System.Data.Entity.DbSet<RecommendationPlatform.Models.ApplicationUser> IdentityUsers { get; set; }
现在,您具有两个相同类型的DbSet
属性,这不仅会导致在FindAsync()
方法中抛出异常,而且还会在您尝试使用代码优先的迁移方法时抛出异常。
在使用脚手架时要非常小心,甚至最好不要使用它。
答案 3 :(得分:0)
注释来自身份模型类的新生成的Dbset,如下所示
// public System.Data.Entity.DbSet<SurveyTool.Models.ApplicationUser> ApplicationUsers { get; set; }