我们正在使用SQL和Sprocs从经典ASP迁移。我们的选择落在c#.net 4 Webforms with Entity Framework 4上。
我的问题是如何处理上下文。例如:
调用存储库函数GetProductById()
,它打开一个新的上下文(使用)然后我们在对象上更改某些内容并保存它。
当我们保存它时,我们不会在获取对象时处于相同的上下文中。
以上并不适合我们。然后,我们尝试在应用程序中发送上下文。虽然这很有效,但如果我们不必这样做,我们并不是真的想以这种方式工作。
我们目前正在使用第三个选项,将当前上下文存储在全局变量中。我们保存后会处理上下文。但是,从长远来看,我们不确定这是否是一种可行的方法,或者我们是否会采用这种方法。
我们已尝试搜索有关此主题的最佳做法,但实际上找不到任何最佳做法。希望并帮助解决这个问题。
答案 0 :(得分:4)
本文中描述的工作单元模式可能有所帮助,尽管本文中的示例是使用MVC应用程序而不是WebForms应用程序。
答案 1 :(得分:1)
当您从数据库中获取一个对象然后对其进行操作时,经过一段时间后(在丢弃上下文之后)想要将其保存回来,请使用主键值。
创建正确实体对象的新实例并设置关键属性(以及必须更改的属性),然后将其保存到新创建的上下文中。
或您可以在保存之前再次获取它。这是浪费资源,但它是最有效的方法。夏娃,虽然我不会推荐它。
如果你已经习惯了ASP,我非常建议你转而使用Asp.net MVC,那么你在MVC中会更好更容易。
答案 2 :(得分:1)
您可以使用的另一个选项是将上下文放在线程请求上。这是通过在HTTPModule的BeginRequest事件上创建上下文来完成的。然后,您需要确保处理已创建的任何需要在EndRequest事件中处理的资源。
答案 3 :(得分:0)
在上班途中获得标签(工作单元模式)之后,我们发现这个链接几乎就是我们的工作方式,它可能对我们有同样想法的人有所帮助: