C# 铸造DbSet<;实体>;至其数据库集<;积极性>;无需将所有实体拉入内存
我的问题是,我正在使用的系统期望数据为C# 铸造DbSet<;实体>;至其数据库集<;积极性>;无需将所有实体拉入内存,c#,linq,entity-framework,C#,Linq,Entity Framework,我的问题是,我正在使用的系统期望数据为iQuereable,而entityframework给我的数据为iQuereable 这是我需要实现的一个接口: public IQueryable<T> GetData<T>() where T : class, IData {} 我不想将所有数据都放到内存中并进行强制转换,没有其他解决方案吗?IQueryable是协变的,因此与其尝试将DbSet强制转换为DbSet,只需分配: Data = context.Set<En
iQuereable
,而entityframework给我的数据为iQuereable
这是我需要实现的一个接口:
public IQueryable<T> GetData<T>() where T : class, IData {}
我不想将所有数据都放到内存中并进行强制转换,没有其他解决方案吗?IQueryable
是协变的,因此与其尝试将DbSet
强制转换为DbSet
,只需分配:
Data = context.Set<Entity>(); // .AsQueryable() not needed but does make it more readable
我在应用程序中最终使用的代码是:
public IQueryable<T> GetData<T>() where T : class, IData
{
var factory = EntityFrameworkConfiguration.TypeFactory[typeof(T)];
var context = factory.Item2();
ThreadDataManager.GetCurrentNotNull().OnDispose += () =>
{
context.Dispose();
};
var method = typeof(DbContext).GetMethod("Set", new Type[0]).MakeGenericMethod(factory.Item1);
IQueryable<T> genericItem = (IQueryable < T >)method.Invoke(context, new object[0]);
return genericItem;
}
public IQueryable GetData(),其中T:class,IData
{
var factory=EntityFrameworkConfiguration.TypeFactory[typeof(T)];
var context=factory.Item2();
ThreadDataManager.GetCurrentNotNull().OnDispose+=()=>
{
context.Dispose();
};
var method=typeof(DbContext).GetMethod(“Set”,新类型[0]).MakeGenericMethod(factory.Item1);
IQueryable genericItem=(IQueryable)方法。调用(上下文,新对象[0]);
返回泛型项;
}
需要注意的是,ThreadDataManager是我正在集成的系统的内置部分。如果C1Data是一个接口而不是实际实现,这也会起作用吗?似乎我让它起作用了。我确信我尝试过类似的东西,但没有成功。一切正常,谢谢。
where Entity: C1Data
public IQueryable<T> GetData<T>() where T : class, IData
{
var factory = EntityFrameworkConfiguration.TypeFactory[typeof(T)];
var context = factory.Item2();
ThreadDataManager.GetCurrentNotNull().OnDispose += () =>
{
context.Dispose();
};
var method = typeof(DbContext).GetMethod("Set", new Type[0]).MakeGenericMethod(factory.Item1);
IQueryable<T> genericItem = (IQueryable < T >)method.Invoke(context, new object[0]);
return genericItem;
}