Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在存储库模式中使用ApplicationDbContext_C#_Asp.net_Asp.net Mvc_Repository Pattern - Fatal编程技术网

C# 在存储库模式中使用ApplicationDbContext

C# 在存储库模式中使用ApplicationDbContext,c#,asp.net,asp.net-mvc,repository-pattern,C#,Asp.net,Asp.net Mvc,Repository Pattern,我想在我的ASP.NETMVC项目中实现存储库模式。我在搜索谷歌时看到了很多实现,我有点困惑。他们中的大多数人创建了自己的上下文类,该类继承自DBContext类,然后将其注入到一个或多个存储库构造函数中。 我找到的文章中没有一篇解释为什么要创建自定义DBContext类,为什么不使用默认的ApplicationDbContext,以及如何更改应用程序代码以适应新的上下文类。他们甚至没有提到班级 我宁愿使用默认的ApplicationDbContext,将其注入到存储库类中,因为目前我认为创建新

我想在我的ASP.NETMVC项目中实现存储库模式。我在搜索谷歌时看到了很多实现,我有点困惑。他们中的大多数人创建了自己的上下文类,该类继承自DBContext类,然后将其注入到一个或多个存储库构造函数中。 我找到的文章中没有一篇解释为什么要创建自定义DBContext类,为什么不使用默认的ApplicationDbContext,以及如何更改应用程序代码以适应新的上下文类。他们甚至没有提到班级

我宁愿使用默认的ApplicationDbContext,将其注入到存储库类中,因为目前我认为创建新的DBContext类毫无意义。我错过什么了吗?这是个坏习惯吗

如果出于某种原因,我必须添加新的DbContext类,如何编辑我的代码web.config和其他代码以适应它?如果我已经迁移到数据库,DBContext类的更改会影响数据库吗?是否有必要再次进行迁移

要给您一个示例,请查看MSDN文档:
我只是不知道作者为什么使用学校上下文而不是应用程序上下文。

这是一个广泛的问题,猜测这就是投票失败的原因

你看起来很困惑。首先,我不是专家。我确实对默认的ApplicationDbContext有一点不满。也许你用一个弹出的模板?无论如何,我启动了MVC模板,tehre没有提供默认的上下文类

简而言之,您可以创建自己的上下文类。您可以给它任何您想要的名称,因为它以Context结尾,并且它继承自DbContext。如果没有,实体框架将无法识别它,也不知道在构建数据库时如何处理它等等。请参阅您的文章:

协调给定数据模型的实体框架功能的主要类是数据库上下文类。通过从System.Data.Entity.DbContext类派生来创建此类。在代码中指定数据模型中包括哪些实体。您还可以自定义某些实体框架行为。在这个项目中,这个类被命名为SchoolContext。 大宗报价

默认情况下,您只有一个上下文类

显然,您需要创建自己的上下文类,因为您无法访问DbContext类。即使可以,也不应该这样做,需要将抽象和实现分开

我不明白§2。ApplicationDbContext只是一种编写MySelfNamedContextClass的方法

§3:我不知道使用两个contect类是否可行,但简单的含义是,您将使用两个独立的数据库。这已经相当复杂了,而你所写的并不是朝着那个方向发展

若我已经迁移到数据库,DBContext是否会改变 类会影响数据库吗?是否需要进行一次迁移 又来了

是的,绝对会的。向其中添加表、字段、约束或关系。 根据您带来的更改,您可以做两件事: 我添加了一个补充迁移 ii您必须倒带您的迁移删除迁移。您可能需要将数据库重置为第一次迁移更新数据库“此处为第一次迁移的名称,不带引号”。如果您遇到了这个问题,并且仍然使用本地数据库,只需在关闭解决方案、回放和重建迁移并重建数据库之后通过直接删除数据库来删除数据库即可。 特别是对于场景ii,如果数据库中已经有数据,但没有被植入其中,则需要采取措施将其存储在某个位置

我希望这能回答你的问题


亲切问候。

谢谢您的全面回答。当我问一些事情的时候,我总是希望尽可能的精确。由于我的困惑,我认为这个问题是不准确的。无论如何,我提到的默认ApplicationBuser类似乎是在创建项目时自动创建的,在选择身份验证选项时选择单个用户帐户。我不知道没有它就不能创造。也许这就是ASP.NET使开发人员更容易开始使用数据库的方式,它还创建了用户模型等等。这有助于开发人员不必浪费时间从头开始编写自己的DBContext类。现在我把它理解为一种可能被开发人员使用也可能不被开发人员使用的工具。您可以使用它或编写自己的class.PS。ApplicationDbContext类位于IndentityModels.cs中。不知道为什么他们将两个类合并到一个文件中,但这是您应该知道的。您在VS2019中使用的确切模型是什么?如果你解释你正在使用的模板,我们可以更好地模拟和理解这个问题。ASP.NET web应用程序,模板-MVC,身份验证-个人用户帐户 s