我正在建立一个asp MVC网站。我正在为我的网站使用身份验证,因此我从默认模板中获取了默认身份验证方法。我现在在身份应用程序dbcontext类和我的应用程序的自定义dbcontext类之间完全混淆。我对此有很多疑问......
1)我应该单独为每个dbcontexts启用迁移吗?
2)我可以将上下文的数据库指向单个数据库吗? (我已经看到答案说它可以做到。)那有什么问题吗?
3)我可以将Identitymodel.cs
类从models文件夹移动到我的另一个dbcontext所在的名为Databases的自定义文件夹吗?我看到命名空间仍然是dbcontext.models而不是dbcontext.databases
有人可以回答我..我已经查询了所有与此相关的问题仍然无法澄清我的怀疑。
答案 0 :(得分:1)
1)无
2)是的,你可以做到这一点,但更好的是你在一个上下文中实现它。
你怎么能这样做?你的答案在这里:
创建一个类名ApplicationDbcontext
:
<强> ApplicationDbcontext.cs 强>
public class ApplicationDbContext :IdentityDbContext<User, Role, Guid, UserLogin, UserRole, UserClaim>
{
public ApplicationDbContext() :
base("Server=.;Initial Catalog=TestDb;Integrated Security=true;MultipleActiveResultSets=True;")
{
}
public DbSet<Person> Peoples { get; set; }
// add poco classes here
}
创建您的custom
身份POCO:
public class User : IdentityUser<Guid, UserLogin, UserRole, UserClaim>
public class Role : IdentityRole<Guid,UserRole>
public class UserLogin : IdentityUserLogin<Guid>
public class UserRole : IdentityUserRole<Guid>
public class UserClaim : IdentityUserClaim<Guid>
现在您有一个DbContext并可以删除IdentiyMode.cs
执行此命令:Add-Migration init
和Update-Database --verbose
您不需要其他DbContext
IdentityContext
继承DbContext
:
public class IdentityDbContext<TUser, TRole, TKey, TUserLogin, TUserRole,
TUserClaim> : DbContext
答案 1 :(得分:0)
因此,如果您确实需要两个DbContexts(我很奇怪为什么),您必须单独为每个dbcontexts启用迁移。您必须为要生成的每个Configuration.cs文件指定一个文件夹。像这样:
PM> Enable-Migrations -ContextTypeName ApplicationDbContext -MigrationsDirectory Migrations\ApplicationDbContext
Checking if the context targets an existing database...
Code First Migrations enabled for project SomeWebApplication.
PM> Enable-Migrations -ContextTypeName YourCustomDbContext -MigrationsDirectory Migrations\YourCustomDbContext
Checking if the context targets an existing database...
Code First Migrations enabled for project SomeWebApplication.
您的上下文可能指向同一个数据库(并且它们可以有一个公共连接字符串),只要它们不引用同一个表。
是的,您可以将IdentityModel移动到另一个文件夹,但您必须手动更改名称空间。 (或者获得ReSharper并自动完成)