我应该用一个免责声明作为开场白,说我是ASP.NET开发新手,虽然花了最后一个小时阅读文档,但我并不真正理解数据库上下文。当我构建我的ASP.NET MVC 5应用程序时,我选择了单独的用户帐户身份验证。Visual创建了一个名为IdentityModels.cs的文件,并在其中定义了一个ApplicationUser类和一个ApplicationDbContext类。
我做了一些开发工作,我的CRUD控制器通过在每个控制器上拥有这个私有属性来使用ApplicationDbContext与数据库对话:
private ApplicationDbContext db = new ApplicationDbContext();在控制器操作中,我会执行如下操作:
return View(db.Trains.ToList());我想整理一下这个数据库上下文,但是我需要首先理解它。我的主要问题是:
ApplicationDbContext替换在IdentityModels.cs中定义的类吗?ApplicationDbContext类是从IdentityDbContext<ApplicationUser>派生的,这是否意味着我应该为Visual提供的用户身份验证内容和我自己的代码分离数据库上下文?我认为我的最终目标是使用我自己的数据库上下文,称为DatabaseContext,然后在我的控制器继承的基本控制器中使用它。然后,我只有一个地方来实例化数据库上下文,而不是在每个控制器中。
谁知道呢,我可能想错了。每个人似乎都有自己喜欢的方法来处理这个问题。
谢谢!
发布于 2015-01-18 15:31:04
在整个应用程序中只使用一个数据库上下文可以吗,就像我现在所做的那样?
ApplicationDbContext是控制器的私有字段,控制器是根据请求创建和释放的-- ApplicationDbContext将根据请求被创建和释放。我可以用我自己的ApplicationDbContext替换在IdentityModels.cs中定义的类吗?
UserStore,它在构造函数中接收DbContext作为参数,因此var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(new CustomDbContext("connection")));
会起作用的。您仍然需要确保ApplicationUser是自定义上下文中的一个实体。当然,您也可以重写/替换ApplicationUser。
ApplicationDbContext类是从IdentityDbContext派生的,这是否意味着我应该为Visual提供的用户身份验证内容和我自己的代码分离数据库上下文?
默认情况下,Asp.Net标识将为您和配置为使用此数据库的ApplicationDbContext生成新的数据库。您也可以将您的身份验证相关实体存储在任何其他数据库中,您只需确保所有相关表都是there.You,就可以扩展此数据库以包括您在应用程序中使用的其他表,这样您就可以到处使用相同的上下文了。
P.S: ApplicationDbContext不必实现IdentityDbContext<ApplicationUser>,扩展默认的DbContext也能工作(如果您已经生成了Db,则必须更新它\use代码迁移才能工作):
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}https://stackoverflow.com/questions/28010113
复制相似问题