在使用通用存储库时,何处放置“类型”特定功能

时间:2011-10-27 09:53:56

标签: c# entity-framework repository

我想知道在使用通用存储库模式时,放置特定于类型的函数的最佳位置。

我的通用Repository<T>有像GetMany()之类的东西的方法,但是哪里是放置特定于Type的函数的最明智的位置?

一个简单的例子就是说,我有一个&#39;用户&#39;类型,我想要一个函数,而不是返回用户的名字/姓氏,并要求我在返回对象集时将它们粘在一起,可以返回FirstName + " " + LastName作为&#39; Username &#39 ;.

之前的非存储库模式实现我已经在EF类型上继承了使用的部分类来提供这些扩展方法,但是我很难确定在使用存储库时将这些类型的函数移动到何处。 / p>

任何想法都会有很大的帮助,

干杯,

道格

2 个答案:

答案 0 :(得分:4)

下面的链接解释了如何指定选择,而不是扩大通用存储库的合同,常见的技术是将通用存储库子类化以实现特定的存储库

EF POCO

 public class CustomerRepository : GenericRepository<Customer>, ICustomerRepository
{
    public CustomerRepository(ObjectContext context) : base(context) { }

    public IList<Customer> NewlySubscribed()
    {
        var lastMonth = DateTime.Now.Date.AddMonths(-1);

        return GetQuery().Where(c => c.Inserted >= lastMonth)
        .ToList();
    }

    public Customer FindByName(string firstname, string lastname)
    {
        return GetQuery().Where(c => c.Firstname == firstname && c.Lastname == lastname).FirstOrDefault();
    }
}

您可以将您的功能添加为NewlySubscribed()

答案 1 :(得分:3)

我创建了类似的东西,但我所有类型特定的东西都在源自Repository<T>的子类中。通用的东西应该保持通用。类型特定的东西成为一个打字的回购。