我想通过MVC5为代码优先迁移和OWIN标识2授予用户和角色种子。升级到2.0之前,我有这个工作。如何通过使用OWIN标识2和MVC5代码优先进行种子用户和角色
首先,从IdentityConfig.cs文件中使用非代码第一迁移例如当DropCreateDatabaseIfModelChanges
的ApplicationDbInitializer级以下工作:
public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext>
{
protected override void Seed(ApplicationDbContext context)
{
InitializeIdentityForEF(context);
base.Seed(context);
}
public static void InitializeIdentityForEF(ApplicationDbContext db)
{
var userManager = HttpContext
.Current.GetOwinContext()
.GetUserManager<ApplicationUserManager>();
var roleManager = HttpContext.Current
.GetOwinContext()
.Get<ApplicationRoleManager>();
const string name = "[email protected]";
const string password = "[email protected]";
const string roleName = "Admin";
//Create Role Admin if it does not exist
var role = roleManager.FindByName(roleName);
if (role == null)
{
role = new IdentityRole(roleName);
var roleresult = roleManager.Create(role);
}
var user = userManager.FindByName(name);
if (user == null)
{
user = new ApplicationUser { UserName = name, Email = name };
var result = userManager.Create(user, password);
result = userManager.SetLockoutEnabled(user.Id, false);
}
// Add user admin to Role Admin if not already added
var rolesForUser = userManager.GetRoles(user.Id);
if (!rolesForUser.Contains(role.Name))
{
var result = userManager.AddToRole(user.Id, role.Name);
}
}
}
我感动InitializeIdentityForEF代码到我的configuration.cs文件并成功添加了这两个引用和项目构建。
using Microsoft.AspNet.Identity.Owin;
using Microsoft.AspNet.Identity;
,但我得到以下错误,当我从包管理器控制台运行更新的数据库:
System.NullReferenceException:对象不设置到对象的实例。 在System.Web.HttpContextExtensions.GetOwinEnvironment(HttpContext的背景下) 在System.Web.HttpContextExtensions.GetOwinContext(HttpContext的背景下)
更新
每OdeToCode评论,你不能使用OWIN包管理器控制台: 看看第51行这里:raw.githubusercontent.com/OdeToCode/MVC5_Samples/master/...我不认为你会在Seed方法中使用Owin成功,除非你在应用程序内运行Seed。如果您从包管理器控制台运行Seed,Owin将不在或未配置。 - OdeToCode 5月13日15:00
这solution有希望,但是在构建具有以下错误:
错误4类型“Foo.Models。 ApplicationUser'不能用作通用类型或方法'Microsoft.AspNet.Identity.EntityFramework.UserStore'中的类型参数'TUser'。没有从'Foo.Models.ApplicationUser'到'Microsoft.AspNet.Identity.EntityFramework.IdentityUser'的隐式引用转换。 C:\ FOO \迁移\ Configuration.cs 86 43
protected override void Seed(Repository.DataContext.IdentityDb context)
var roleStore = new RoleStore<IdentityRole>(context);
var roleManager = new RoleManager<IdentityRole>(roleStore);
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
var user = new ApplicationUser { UserName = "sallen" };
userManager.Create(user, "password");
roleManager.Create(new IdentityRole { Name = "admin" });
userManager.AddToRole(user.Id, "admin");
}
所以,你解决了你的问题? – trailmax 2014-09-21 19:09:52
我遇到同样的问题。你找到解决方案吗? – 2014-10-28 22:42:21