我的带有用户登录的MVC网络连续几周运行良好。
我的MVC模型类不包含任何与数据库匹配的AspNetIdentity类组件。 我的MVC DBContext没有类AspNetIdenty,user等。 我的DBContext OnModelCreation是空的。
public partial class MyDB : IdentityDbContext<ApplicationUser>
{
public MyDB()
: base("name=MyDB", throwIfV1Schema: false)
{
}
public static MyDB Create()
{
return new MyDB();
}
}
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
return userIdentity;
}
}
我通过实体代码优先方法 ADO.NET 去添加另一个表(确保取消选中添加与 Web 配置的连接( - 我从数据库中选择了(因为我很好奇(AspNetTables。
它们以及我想要的表格,并在我的项目中添加了一个新的上下文。 我查看了我好奇的文件。我删除了 AspNetIdentity 实体类文件,并删除了新创建的上下文。
现在在下面的代码中(!roleManager.RoleExists("Admin"((
我从我的 Web 应用程序收到此投诉:
在模型生成过程中检测到一个或多个验证错误:
MynameSpace.Models.IdentityUserRole: : EntityType 'IdentityUserRole' 未定义密钥。定义此实体类型的键。 MynameSpace.Models.IdentityUserLogin: : EntityType 'IdentityUserLogin' 未定义密钥。定义此实体类型的键。 IdentityUserRoles:EntityType:EntitySet 'IdentityUserRoles' 基于 在未定义键的类型"身份用户角色"上。 IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' is 基于未定义密钥的类型"身份用户登录"。
public partial class Startup
{
private void CreateRolesandUsers()
{
MyDB context = new myDB();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
if (!roleManager.RoleExists("Admin")) // ERROR HERE
{
var role = new Microsoft.AspNet.Identity.EntityFramework.IdentityRole();
role.Name = "Admin";
roleManager.Create(role);
}
}
**
到底出了什么问题?
**
我认为我不应该被要求为表和 modelBuilder 代码添加类 - 当愚蠢的事情之前工作时!Aaargh - 我知道MS用一些晦涩的Visual Studio代码,标签或 ado.net 代码生成器生成的任何内容卡住了我。
仅供参考:我知道我没有钥匙意味着什么。请记住,这是有效的,现在它不是。 与以前相同的上下文,与以前相同的表。 所以问题不是我应该在我的项目中添加其他东西 - 而是我怎样才能让它像以前一样工作 - 我不需要这些类和 OnModelCreate..
在小脑袋敲打之后,我的dbcontext有以下代码行,我简单地注释掉了整个方法。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// All that junk created in here commented out. Method left uncommented.
}
注释掉以下方法:
//protected override void OnModelCreating(DbModelBuilder modelBuilder)
//{
//}
这将使它能够工作! 那真是一堆垃圾..- 方法覆盖似乎运行 OnModelCreation(( 的某种基本代码,如果你有一个覆盖方法,里面什么都没有代码..!..