2011-04-24 71 views
7

我正在寻找完整的ef知识库接口(和实现)。我有这个:完整的实体框架知识库接口

public interface IRepository<T> where T: class 
{ 
    IQueryable<T> GetQuery(); 

    IEnumerable<T> GetAll(); 
    IEnumerable<T> Find(Func<T, bool> where); 
    T Single(Func<T, bool> where); 
    T First(Func<T, bool> where); 

    void Delete(T entity); 
    void Add(T entity); 
    void Attach(T entity); 
    void SaveChanges(); 
} 

而我期待的所有方法的接口包括SingleOrDefault等。
我在哪里可以找到这样的东西?

+4

'的SingleOrDefault()'是'IEnumerable的' – 2011-04-25 00:11:22

+0

@Bala为r的扩展方法:我知道,我很期待为了完成所有IObjectSet的接口和实现,我可以公开所有的方法。 – Naor 2011-04-25 00:19:00

回答

10

定义存储库有两种方法。首先是通过暴露IQueryable的是够做任何事:

public interface IRepository<T> where T: class 
{ 
    IQueryable<T> GetQuery(); 

    // This method requires additional knowledge about entity 
    // or more compilcated approach. The point of the method 
    // is to check EF's internal storage first before querying DB 
    // T GetById(int Id);   

    void Delete(T entity); 
    void Add(T entity); 
    void Attach(T entity); 
} 

拥有一个像GetAllFirst东西简直是多余的,因为GetQuery服务器这一切。第二种方法是特定的储存库,你不要暴露IQueryable

public interface IRepository<T> where T : class 
{ 
    IEnumerable<T> GetAll(); 

    // Expressions!!!! Func will load all items to memeory 
    // and then perform filtering by linq-to-objects!!!!!! 
    IEnumerable<T> Find(Expression<Func<T, bool>> where); 
    T Single(Expression<Func<T, bool>> where); 
    T First(Expression<Func<T, bool>> where); 

    void Delete(T entity); 
    void Add(T entity); 
    void Attach(T entity); 
} 

第二个版本,然后通过添加方法,如GetXXXOrderedByName,GetXXXWithRelatedYYY等具体信息库接口派生

还有一点就是SaveChanges通常不是存储库的一部分,因为您可能需要修改多个存储库中的项目,并通过单一方法将更改保存在所有存储库中。为此目的存在另一种模式 - 工作单元。

+0

通常不是部分,但EF环境本身就是一个工作单元。 – Rushino 2011-09-14 13:45:40

0

您可以在IEnumerable here上找到所有方法的列表。

0

您只需从nuget包管理器安装T4Scaffolding nuget包即可。

这个包安装到你的模型类库项目或新项目的类库称为库

然后在包管理器控制台选择模型类库项目然后键入

支架库[DomainClasses.Alias] - DbContextType:ContextClass]

enter image description here

你得到生成的接口和实现仓库类为您的域类

,如果你使用Visual Studio 2015年,我建议你使用nugetPackage T4Scaffolding.VS2015

enter image description here

如果要概括你的资料库,然后你可以和T实体替换类

有关详细信息,http://thedatafarm.com/data-access/using-t4scaffolding-to-create-dbcontext-and-repository-from-domain-classes/