ASP.NET EntityFramework 4数据上下文最佳实践

时间:2010-10-02 02:36:30

标签: asp.net entity-framework

我正在开发一个使用EntityFramework 4的项目,我正在使用实体对象作为我的业务对象。我最近遇到了一个问题,我在用户控件的using语句中声明了一个上下文。该语句所使用的方法返回了一个在另一个控件中使用的实体对象。所以我不得不分离实体,然后将其附加到另一个控件中的新上下文中。如果可能的话,我想避免这种情况。我在想的是我想在主页面中声明一个上下文,然后将其传递给任何需要它的页面/用户控件,这样它们都使用相同的上下文,我不必使用语句编写所有这些。

我的问题是这些:

1)在Pre_Init / Page_Load上声明一个上下文然后在Page_Unload上处理它是不好的做法吗?

2)如果处理它们的最佳做法是什么?

3)如果我确实在主页中声明上下文的路径,那么将它传递给pages / usercontrols的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

最大的问题是您已将EF上下文与表示层相结合。你在这里遇到了关注点分离的问题,并且它表现为EF上下文混乱。

在不了解应用程序的具体情况的情况下,典型的最佳实践是将EF上下文封装在存储库模式之外,而不是直接将上下文暴露给UI。使用存储库获取所需的实体并传递实体/模型。如果您有一个具有父/子关系的复杂实体,那么无论如何您都要加载子实体。因此,您可以在单个using语句中获得所需的一切。

如果您想发布代码,我们可以了解更多细节。但总结一下:

  • 不要将上下文置于用户控件中
  • 将整个模型放在请求的顶部,然后相应的实体传递给每个用户控件(在此顶级请求中将是您处理上下文的using语句)