如何使基于实体框架的存储库类对LINQ友好?
如果我已经用存储库类包装了实体框架数据上下文,那么如何使用LINQ 我想做一些类似的事情:如何使基于实体框架的存储库类对LINQ友好?,linq,entity-framework,repository-pattern,Linq,Entity Framework,Repository Pattern,如果我已经用存储库类包装了实体框架数据上下文,那么如何使用LINQ 我想做一些类似的事情: class A { public IRepositiry<T> GetRepository<T>() { DbContextAdapter adapter = new DbContextAdapter(ctx); return new Repository<T>(adapter); } } class B { vo
class A
{
public IRepositiry<T> GetRepository<T>()
{
DbContextAdapter adapter = new DbContextAdapter(ctx);
return new Repository<T>(adapter);
}
}
class B
{
void DoSomething()
{
A a = new A();
IRepository<House> rep = a.GetRepository<House>();
// Do some linq queries here, don't know how.
rep.[get Linqu] (from ...);
}
}
A类
{
公共IRepositiry GetRepository()
{
DbContextAdapter=新的DbContextAdapter(ctx);
返回新的存储库(适配器);
}
}
B类
{
无效剂量测定法()
{
A=新的A();
IRepository rep=a.GetRepository();
//在这里做一些linq查询,不知道怎么做。
代表[获取林渠](来自;
}
}
要使您的存储库LINQ友好,您需要在存储库上有一些返回IQueryable
或IEnumerable
因此,在类存储库中,您将有如下方法:
public class Repository<T>
{
DbContextAdapter ctx;
// other methods omitted
IEnumerable<Houses> GetHouses()
{
return ctx.Houses
}
}
标准查询运算符允许将查询应用于任何
基于IEnumerable的信息源MSDN
只要编写返回IEnumerable集合的方法,就可以与LINQ兼容 冒着完全懒惰的风险,您想要实现的就是存储库模式,请查看这篇好文章
还可以扩展实体类,以便它们返回自身的实例或列表(单例模式)。又名:
公共部分类FOO:FOO
{
public IEnumerable get愚人(get傻瓜)
{
使用(var context=new FooEntities())
{
return//YOU CODE获取FOO列表
}
}
}
或者类似的东西(代码语法不正确,但应该给你一个大概的想法)。如果您的实体类要实现类似的方法,请将它们抽象到接口契约中,并让您的部分实体类实现该接口。我认为您是唯一知道什么是rep.[get Linqu](from代码>意味着。这里有太多的信息缺失。什么是ctx?IRepositiry
定义了哪些方法?什么是存储库
?为什么存储库类是通用集合?据我所知,它没有任何好处。我只是根据原始海报提供的示例进行工作。我的目标是让它尽可能接近他的例子,这样答案对他来说就更容易理解了。
void DoSomething()
{
A a = new A();
IRepository<House> rep = a.GetRepository<House>();
var q = from house in rep.GetHouses()
where house.Color = "Purple"
select house;
foreach(var h in q)
{
house.SetOnFire();
}
}
public partial class FOO : FOO
{
public IEnumerable<Foo> GetFooList()
{
using (var context = new FooEntities())
{
return // YOU CODE TO GET LIST OF FOO
}
}
}