現在、MVC開発者向けのPro Web API 2の本を読んでいます。アダム・フリーマンは、以下に示すように、ユーザー、役割、のUserRole、のUserManagerクラスを作成することにより、ASP.NETアイデンティティフレームワークとプロジェクトを統合:Entity Frameworkはdbo.NetUsers、dbo.NetRoles、dbo.UserRolesテーブルをどのように作成しますか?
public class StoreUser : IdentityUser
{
// application-specific properties go here
}
public class StoreRole : IdentityRole
{
public StoreRole() : base() { }
public StoreRole(string name) : base(name) { }
}
public class StoreRoleManager : RoleManager<StoreRole>
{
public StoreRoleManager(RoleStore<StoreRole> store) : base(store) { }
public static StoreRoleManager Create(
IdentityFactoryOptions<StoreRoleManager> options,
IOwinContext context)
{
return new StoreRoleManager(new
RoleStore<StoreRole>(context.Get<StoreIdentityDbContext>()));
}
}
public class StoreUserManager : UserManager<StoreUser>
{
public StoreUserManager(IUserStore<StoreUser> store)
: base(store) { }
public static StoreUserManager Create(
IdentityFactoryOptions<StoreUserManager> options,
IOwinContext context)
{
StoreIdentityDbContext dbContext = context.Get<StoreIdentityDbContext>();
StoreUserManager manager =
new StoreUserManager(new UserStore<StoreUser>(dbContext));
return manager;
}
}
そして、著者種子データベースDbContext
種public class StoreIdentityDbContext : IdentityDbContext<StoreUser>
{
public StoreIdentityDbContext() : base("SportsStoreIdentityDb")
{
Database.SetInitializer<StoreIdentityDbContext>(new
StoreIdentityDbInitializer());
}
public static StoreIdentityDbContext Create()
{
return new StoreIdentityDbContext();
}
}
}
で初期化子を登録することにより、ここで
public class StoreIdentityDbInitializer :
CreateDatabaseIfNotExists<StoreIdentityDbContext>
{
protected override void Seed(StoreIdentityDbContext context)
{
StoreUserManager userMgr =
new StoreUserManager(new UserStore<StoreUser>(context));
StoreRoleManager roleMgr =
new StoreRoleManager(new RoleStore<StoreRole>(context));
string roleName = "Administrators";
string userName = "Admin";
string password = "secret";
string email = "[email protected]";
if (!roleMgr.RoleExists(roleName))
{
roleMgr.Create(new StoreRole(roleName));
}
StoreUser user = userMgr.FindByName(userName);
if (user == null)
{
userMgr.Create(new StoreUser
{
UserName = userName,
Email = email
}, password);
user = userMgr.FindByName(userName);
}
if (!userMgr.IsInRole(user.Id, roleName))
{
userMgr.AddToRole(user.Id, roleName);
}
base.Seed(context);
}
}
このパターンでは、アプリケーションが起動するたびにデータベースが作成され、シードされます。しかし、私はこのパターンに従うことを望んでいません。私はdbo.AspNetRoles、dbo.AspNetUsers、dbo.AspNetUserRolesで構成されたデータベースを作成し、それを手動で作成したいと考えています。このため、移行を追加しますが、作成した移行でEntity FrameworkがIDクラスを検出しないため、データベースを移行および更新できません。 この問題を解決するのを手伝ってください。 親切にお礼します
ありがとうございました。しかし、Entity Frameworkではまだ変更が表示されません。私は、作成されたプロジェクトの認証を選択しませんでした。空のプロジェクトにアイデンティティ・フレームワークを統合します。このプロジェクトは、将来の競合の原因となる移行なしで、起動時にユーザー、ロール、テーブルのデータベースを作成します。 –