Linq to sql Repository模式,有些问题

Min*_*mer 3 c# design-patterns linq-to-sql

我使用linq到sql的存储库模式,我每个表使用一个存储库类.我想知道,我是以良好/标准的方式做事,

ContactRepository

  Contact GetByID()
  Contact GetAll()
Run Code Online (Sandbox Code Playgroud)

COntactTagRepository

 List<ContactTag> Get(long contactID)
 List<ContactTag> GetAll()
 List<ContactTagDetail> GetAllDetails()

class ContactTagDetail
{
  public Contact Contact {get;set;}
  public ContactTag COntactTag {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

当我需要在contactrepository中使用contact i call方法时,对于contacttag也是如此

但是当我需要接触和标签一起我打电话GetDetais()在ContactTag存储库它不是返回产生由ORM insted的其返回ContactTagDetail实体conatining由ORM产生的接触和COntactTag的COntactTag实体,我知道我可以在COntactTag简单的通话GETALL存储库并且可以访问Contact.ContactTag但是作为它的linq到sql它将在查询级别没有延迟加载的选项,所以每当我需要一个具有相关实体的实体时我创建一个投影类

另一个疑问是,我真的需要正确的方法我可以在联系人和ContactTag repostitory,如在联系人存储库GetALlWithTags()或其他东西,但我在COntactTag存储库中做它的方法

你的建议是什么?

Dan*_*plo 5

我没有时间细说,但基本上没有表和您的存储库之间的一比一的关系.我犯了这个错误,但它不起作用.相反,让您的存储库包含所有与概念相关的表.在您的情况下,只需要一个联系人存储库来处理Contacts和ContactTags(以及任何其他相关表).没有关于"相关"意味着什么的规则,只有你可以决定 - 但是根据你对应用程序元素如何自然地组合在一起的理解来管理你的决定.

还要读取SO上的这两个线程来处理类似的问题:

使用LINQ的多个或单个存储库以及如何正确使用存储库模式?