c#.NET with Entity Framework 4 - 如何处理上下文?最佳做法?

时间:2010-06-21 13:57:29

标签: c# entity-framework

我们正在使用SQL和Sprocs从经典ASP迁移。我们的选择落在c#.net 4 Webforms with Entity Framework 4上。

我的问题是如何处理上下文。例如:

调用存储库函数GetProductById(),它打开一个新的上下文(使用)然后我们在对象上更改某些内容并保存它。

当我们保存它时,我们不会在获取对象时处于相同的上下文中。

以上并不适合我们。然后,我们尝试在应用程序中发送上下文。虽然这很有效,但如果我们不必这样做,我们并不是真的想以这种方式工作。

我们目前正在使用第三个选项,将当前上下文存储在全局变量中。我们保存后会处理上下文。但是,从长远来看,我们不确定这是否是一种可行的方法,或者我们是否会采用这种方法。

我们已尝试搜索有关此主题的最佳做法,但实际上找不到任何最佳做法。希望并帮助解决这个问题。

4 个答案:

答案 0 :(得分:4)

本文中描述的工作单元模式可能有所帮助,尽管本文中的示例是使用MVC应用程序而不是WebForms应用程序。

http://msdn.microsoft.com/en-us/ff714955.aspx

答案 1 :(得分:1)

使用对象键

当您从数据库中获取一个对象然后对其进行操作时,经过一段时间后(在丢弃上下文之后)想要将其保存回来,请使用主键值。

创建正确实体对象的新实例并设置关键属性(以及必须更改的属性),然后将其保存到新创建的上下文中。

您可以在保存之前再次获取它。这是浪费资源,但它是最有效的方法。夏娃,虽然我不会推荐它。

使用ASP?然后使用MVC

如果你已经习惯了ASP,我非常建议你转而使用Asp.net MVC,那么你在MVC中会更好更容易。

答案 2 :(得分:1)

您可以使用的另一个选项是将上下文放在线程请求上。这是通过在HTTPModule的BeginRequest事件上创建上下文来完成的。然后,您需要确保处理已创建的任何需要在EndRequest事件中处理的资源。

答案 3 :(得分:0)

在上班途中获得标签(工作单元模式)之后,我们发现这个链接几乎就是我们的工作方式,它可能对我们有同样想法的人有所帮助:

http://dotnet.dzone.com/news/using-unit-work-pattern-entity?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+zones%2Fdotnet+%28.NET+Zone%29