c# - 替换自动创建的 ApplicationDbContext

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

我应该以免责声明作为开头,声明我是 ASP.NET 开发的新手,并不真正了解数据库上下文,尽管我花了最后一个小时阅读了文档。当我构建我的 ASP.NET MVC 5 应用程序时,我选择了个人用户帐户身份验证。 Visual Studio 创建了一个名为 IdentityModels.cs 的文件,并在其中定义了一个 ApplicationUser类和一个ApplicationDbContext类。

我做了一些开发工作,我的 CRUD Controller 使用 ApplicationDbContext通过在每个 Controller 上拥有这个私有(private)属性来与数据库对话:

private ApplicationDbContext db = new ApplicationDbContext();

然后在 Controller 操作中,我会执行以下操作:

return View(db.Trains.ToList());

我想整理这个数据库上下文,但我需要先了解它。我的主要问题是:

  1. 我的整个应用程序只使用一个数据库上下文是否可以,就像我现在所做的那样?
  2. 我可以替换 ApplicationDbContext 吗? IdentityModels.cs 中定义的类和我自己的?
  3. ApplicationDbContext类派生自 IdentityDbContext<ApplicationUser> ,这是否意味着我应该为 Visual Studio 提供的用户身份验证内容和我自己的代码使用单独的数据库上下文?

我认为我的最终目标是使用我自己的数据库上下文,称为 DatabaseContext ,然后在我的所有 Controller 继承自的基本 Controller 中使用。然后我只有一个实例化数据库上下文的地方,而不是在每个 Controller 中。

谁知道呢,我可能想错了。每个人似乎都有自己喜欢的处理方式。

谢谢!

最佳答案

Is it okay to use just one database context for my entire application, like I'm doing now?

  • 如果您决定直接从 UI 层访问数据库(这是一个单独的讨论),那也没关系,因为 ApplicationDbContext是您的 Controller 的私有(private)字段, Controller 是根据请求创建和处理的 - ApplicationDbContext将根据请求创建和处置。

Can I replace the ApplicationDbContext class defined in IdentityModels.cs with my own?

  • 你绝对可以做到。它用于创建 UserStore接收 DbContext作为构造函数中的参数,所以这个

var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(new CustomDbContext("connection")));

会起作用。您仍然必须确保 ApplicationUser是您自定义上下文中的一个实体。当然你可以覆盖/替换 ApplicationUser

The ApplicationDbContext class derives from IdentityDbContext, does that mean I should have seperate database contexts for my user authentication stuff provided by Visual Studio, and my own code?

默认情况下,Asp.Net Identity 会为您和 ApplicationDbContext 生成一个新的数据库配置为使用此数据库。您也可以将与身份验证相关的实体存储在任何其他数据库中,您只需要确保所有相关表都在那里。您还可以扩展此数据库以包含您在应用程序中使用的其他表,这样您就可以全部使用相同的上下文。

附注: ApplicationDbContext不必实现 IdentityDbContext<ApplicationUser> , 扩展默认 DbContext也可以正常工作(如果您已经生成了 Db,则必须对其进行更新\使用代码迁移才能使以下内容正常工作):

 public class ApplicationDbContext : DbContext 
  {
     public ApplicationDbContext()
         : base("DefaultConnection")
     {
     }

     public static ApplicationDbContext Create()
     {
         return new ApplicationDbContext();
     } 
  }

关于c# - 替换自动创建的 ApplicationDbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28010113/

相关文章:

javascript - jquery onclick后播放声音

javascript - ASP.NET MVC 中的日期格式设置

c# - MVC 5 - DataAnnotations 的默认消息和本地化(电子邮件、Url 等)

c# - 如何单元测试数据库依赖行为 C#

c# - 在服务器标签中调用服务器函数

c# - 动态表达式不适用于动态对象

c# - 对象或值作为我的服务/数据层的参数

asp.net-mvc - mvc signalr如何显示所有连接的用户

C# ImageFormat 到字符串

c# - 转换 DateTime 时不支持系统 - DotNetHighChart