在实体上执行CRUD操作的最佳实践(实体框架)

时间:2012-06-19 20:55:01

标签: c# asp.net-mvc entity-framework

我想弄清楚我应该在哪里为每个实体放置数据库操作。在此混淆之前,对于每个实体,我在提供程序类中执行所有这些数据库操作。 Provider类意味着每个类都有一个提供者。如:

class Member
{
   public string FirstName;
   public string LastName;
}

class MemberProvider
{
  //Singleton
  //Do database operations

   ......

   public List<Member> GetItems(FirstName = null, LastName = null)
   {
       // run store procedure
       //this returns List<Member> if any
   }

   public Member GetItem(int? Id = null,FirstName = null, LastName = null)
   {
       // run store procedure
       //this return Member if any
   }

   ....
}

然后当我需要一个带有一些过滤的成员列表时,我这样做:

 List<Member> members = MemberProvider.Instance.GetItems(FirstName = "John", LastName = "Black");

问题是如何在实体本身中完成与实体相关的所有数据库操作?这是好习惯吗?我应该阅读什么来理解这个概念?

提前致谢。

4 个答案:

答案 0 :(得分:5)

在大多数情况下,业务对象和数据访问应该分开。查看存储库模式herehere。这可能正是您所需要的。

答案 1 :(得分:4)

我建议使用Repository模式。 在这里,您可以获得很好的介绍和示例代码:Using Repository and Unit of Work patterns with Entity Framework 4.0

和另一个Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application

答案 2 :(得分:3)

您应该考虑使用“Seperation of Concerns”原则。因此,另一个班级应负责粗暴行动。

您可以考虑查看存储库模式。 Patrik Löwendahl编写了一个易于阅读的教程。

答案 3 :(得分:2)

我觉得数据库操作应该在一个单独的类中。看一下Single Responsibility Principal http://www.objectmentor.com/resources/articles/srp.pdf和Repository设计模式http://martinfowler.com/eaaCatalog/repository.html