ASP.Net中的实体框架最佳实践

时间:2011-11-28 03:38:57

标签: asp.net entity-framework-4

我刚刚开始在ASP.net应用程序中开发实体框架,我想知道是否有人可以针对最佳实践指出正确的方向。我有一些问题,特别是我在下面列出的。

  1. 首先,我使用的是实体框架4.0。我已经创建了数据库,因此我创建了一个类库并从数据库生成实体模型。我一直在使用数据库生成的Guids,因此我必须修改ssl以包含属性StoreGeneratedPattern="Identity"。有没有办法自动执行此操作,还是每次更新数据库和模型时都必须手动编辑ssl? (对于那些你知道正面临guid问题或想知道我为什么这样做... this is a clear article关于自动生成GUID的问题)

  2. 我打算在类库中使用单个文件来保存所有数据库查询。这是好习惯吗?我如何确保不同的程序员不要一遍又一遍地重写相同的查询?

  3. 我计划使用每种方法的唯一上下文。这是正确的方法吗?我通过Rick Strahl's post阅读了关于上下文生命周期管理的内容。但我仍然不确定每种方法的唯一上下文是否是正确的方法。

  4. 我可以将数据库查询作为静态方法,因为它们不使用任何实例变量吗?

  5. 如果我使用3中提到的每个方法的唯一上下文,并且我希望修改一个上下文返回的实体对象,那么最佳做法是什么?我是否使用附加功能将对象附加到新上下文并保存更改?我没试过这个,但我读了几篇文章,看起来有点简单,但想知道是否有任何替代方案。

  6. 如果您对如何在ASP.net应用程序中使用Entity Framework提出任何建议,我绝对可以使用帮助。这是我的第一个ASP.net/Entity框架应用程序,所以任何提示都有帮助

1 个答案:

答案 0 :(得分:1)

  1. 这是VS 2010初始版本中的问题。在某些情况下,一旦安装了VS 2010 SP1,这应该已经正常工作。如果没有安装此KB
  2. 您可以轻松地使用大量静态方法获得巨大的课程。尝试使用您要查询的实体类型进行一些分隔。您永远不会完全确保其他程序员不会再次创建相同的查询。这是关于正确的查询命名遵循相同的命名策略,文档和程序员之间的沟通。
  3. 通常不需要“每种方法”的唯一上下文。在大多数情况下,您应该对每个逻辑(业务)事务的唯一上下文感到满意 - 在Web应用程序的情况下,逻辑操作在大多数情况下是单个请求处理=每个请求一个上下文。
  4. 如果您将上下文实例传递给您的查询,答案是肯定的。一旦你不将它们创建为静态,并且它们将从它们的类实例中获取上下文实例,那么你将非常接近于存储库模式。
  5. 这正是每个方法的上下文的问题,并且很难解决,因为要完成这项工作,您必须首先从第一个上下文中分离实体并将其附加到第二个上下文。如果您的实体也加载了相关实体,则在分离期间所有这些关系都将被清零(除非您使用深度克隆而不是分离=创建实体的第二个实例)。
相关问题