将Asp.Net Mvc默认应用程序dbcontext类移动到另一个文件夹

时间:2017-08-11 09:03:11

标签: c# asp.net asp.net-mvc entity-framework asp.net-identity

我正在建立一个asp MVC网站。我正在为我的网站使用身份验证,因此我从默认模板中获取了默认身份验证方法。我现在在身份应用程序dbcontext类和我的应用程序的自定义dbcontext类之间完全混淆。我对此有很多疑问......

1)我应该单独为每个dbcontexts启用迁移吗?

2)我可以将上下文的数据库指向单个数据库吗? (我已经看到答案说它可以做到。)那有什么问题吗?

3)我可以将Identitymodel.cs类从models文件夹移动到我的另一个dbcontext所在的名为Databases的自定义文件夹吗?我看到命名空间仍然是dbcontext.models而不是dbcontext.databases

有人可以回答我..我已经查询了所有与此相关的问题仍然无法澄清我的怀疑。

2 个答案:

答案 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 initUpdate-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并自动完成)