【发布时间】:2011-03-22 18:52:39
【问题描述】:
在我的 ASP.NET MVC 应用程序中,我需要实现数据的持久性。我选择 Entity Framework 是因为它能够从实体模型创建类、数据库表和查询,这样我就不必手动编写 SQL 表创建或 Linq to SQL 查询。所以简单是我的目标。
我的方法是创建模型,而不是创建一个自定义 HttpModule,它在每个请求的 and 处被调用,并且在上下文中只调用 SaveChanges()。这让我的生活变得非常艰难——实体框架不断抛出非常奇怪的异常。有时它起作用了——也不例外,但有时它没有。一开始我试图一个一个地解决问题,但当我遇到另一个问题时,我意识到我的一般方法可能是错误的。
那么这是在 ASP.NET MVC 应用程序中实现持久性的一般做法吗?每次更改后我只打电话给saveChanges 吗?是不是有点低效?而且我不知道如何使用服务模式来做到这一点(服务与实体一起工作,所以我必须将上下文实例传递给它们,以便它们在进行某些更改时可以保存更改)。
我们也感谢您提供一些指向学习材料或教程的链接。
注意:这个问题要求编程练习。我请那些认为它含糊不清的人记住,它仍在解决我非常特殊的问题,正确的技术将在投票结束之前为我节省很多技术问题。
【问题讨论】:
-
通过阅读您的描述,我感觉您正在使用上下文的单个共享实例,并且在 http 模块的最终请求期间对该实例调用
SaveChanges。 -
@Ladislav Mrnka 你的坏感觉是对的,但现在我正在重建它以使用存储库模式。只需要弄清楚如何正确使用该模式。
-
这里描述了为什么您当前的解决方案不起作用:stackoverflow.com/questions/3653009/…
-
@Ladislav Mrnka 我认为这不是原因。我很清楚“EF 在每个上下文中只加载单个实体一次”。但就我而言,只有我的应用程序连接到数据库。因此,没有数据会在外部发生变化的风险,因此当我为整个应用程序使用单个静态上下文时,我将使用非实际实体。并不是说这是一个好的模式。
-
该描述有两个部分。您描述了第一个 - 身份映射。更大的问题可以是共享工作单元,其中保存更改可以保存来自并发请求处理的不完整更新。
标签: c# .net asp.net-mvc entity-framework