Sze*_*zer 2 c# generics entity-framework
我正在使用EntityFramework,我需要一些方法来将实体的传入列表与数据库同步(覆盖记录描述或将它们标记为过时):
public void Synchronize<T>(List<T> entityList)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
首先,我需要从相应的表中获取所有数据并获得两个列表之间的差异(一个不可更改的东西是条目的GUID).例如,如果传入的entityList的类型是User,那么我需要从"User"表等获取所有数据.
它不起作用:
var query = from entity in typeof(T)
select entity;
Run Code Online (Sandbox Code Playgroud)
当然我可以用旧的方式做到:
switch (typeof(T).Name)
{
case "User":
var query = from user in User
select user;
//Sync with User table
break;
case "Project":
var query = from project in Project
select project ;
//Sync with Project table
break;
}
Run Code Online (Sandbox Code Playgroud)
但也许有一种优雅的方式来处理通用?因为我有很多表要同步.谢谢!
如果您有权访问DbContext,则可以使用该方法Set<T>执行此操作.
var query = from entity in context.Set<T>() select entity;
Run Code Online (Sandbox Code Playgroud)
但是为了使它在您的上下文中工作,您必须至少对类型T施加约束,并且实体需要共享类型或接口.否则你无法建立你的查询,因为T可能是任何东西(object).