3

我试图弄清楚我应该将每个实体的数据库操作放在哪里。在这种混乱之前,对于每个实体,我都在提供程序类中执行所有这些数据库操作。Provider类意味着每个类都有一个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

4 回答 4

5

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

于 2012-06-19T21:02:12.740 回答
4

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

和另一个在 ASP.NET MVC 应用程序中实现存储库和工作单元模式

于 2012-06-20T01:29:14.503 回答
3

您应该考虑使用“关注点分离”原则。因此,另一个类应该负责 crud 操作。

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

于 2012-06-19T21:00:58.327 回答
2

我觉得数据库操作应该在一个单独的类中。查看单一职责主体http://www.objectmentor.com/resources/articles/srp.pdf和存储库设计模式http://martinfowler.com/eaaCatalog/repository.html

于 2012-06-19T20:59:07.687 回答