gpt4 book ai didi

c# - 替换自动创建的 ApplicationDbContext

转载 作者:太空狗 更新时间:2023-10-29 21:17:15 24 4
gpt4 key购买 nike

我应该以免责声明作为开头,声明我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com