微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在存储库模式中使用ApplicationDbContext

如何解决在存储库模式中使用ApplicationDbContext

我想在我的ASP.NET MVC项目中实现存储库模式。搜索Google时,我已经看到了很多实现,但我有些困惑。他们中的大多数人都创建了自己的Context类,该类从DBContext类继承,然后将其注入到存储库(或存储库)构造函数中。 我找不到的文章都没有解释为什么创建自定义DBContext类以及为什么它们不使用认的ApplicationDbContext和HOW来更改您的应用程序代码以适应新的Context类。他们甚至没有提到课程。

我宁愿使用认的ApplicationDbContext,我将它注入存储库类中,因为目前我看不到创建新的DBContext类的意义。我想念什么吗?这是不好的做法吗?

如果由于某种原因,我将不得不添加新的DbContext类,那么如何编辑我的代码(web.config和其他代码)以使其适应?如果我已经进行了数据库迁移,那么DBContext类的更改会影响数据库吗?是否需要再次进行迁移?

为您提供示例,请查看MSDN文档: https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application 我只是不知道为什么作者使用SchoolContext而不是ApplicationDbContext。

解决方法

这是一个广泛的问题,这就是投票否决的原因。

您似乎很困惑。首先,我不是专家(请参阅要点)。我确实使用 default ApplicationDbContext除去了一些杂草。也许您使用弹出的模板?无论如何,我启动了MVC模板,并且没有提供默认上下文类。

简而言之,您将创建自己的上下文类。您可以给它提供任何想要的名称,以DbContext的Context和IT INHERITS结尾。否则,实体框架将无法识别它,并且在构建数据库时将不知道如何处理它。查看您的文章:

为给定数据模型协调Entity Framework功能的主要类是数据库上下文类。您可以通过派生System.Data.Entity.DbContext类来创建此类。在代码中,您可以指定数据模型中包含哪些实体。您还可以自定义某些实体框架行为。在该项目中,该类名为SchoolContext。 引用

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

很明显,您需要创建自己的上下文类,因为您无法访问DbContext类。 (即使可以,您也不想这样做,您需要将摘要和实现分开。)

我不了解§2。 ApplicationDbContext只是编写MySelfNamedContextClass的一种方式。

§3:我不知道使用两个接触类是否可行/可行,但是简单的含义是您将使用两个单独的数据库。这已经很复杂了,您正在抱怨的事情并没有朝着这个方向发展。

如果我已经迁移到数据库,则会更改DBContext 类影响数据库?是否有必要进行一次迁移 再来一次?

是的,绝对会。您添加表,字段或约束或关系到...。 您可以根据所带来的变化做两件事: (i)添加补充迁移 (ii)您将不得不倒回迁移(remove-migration)。可能是您需要将数据库重置为第一次迁移(update-database'此处是不带引号的第一次迁移的名称'。如果遇到这种情况,而您仍在本地数据库上,只需按以下方式删除数据库即可:完全删除(可能是在关闭解决方案之后),然后倒退并重建迁移并重建数据库。 特别是对于场景(ii),如果数据库中已经有数据(没有种子数据),则需要采取措施将其存储在某个地方!!!

我希望这能以某种方式回答您的问题。

亲切的问候。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。