Entity framework 通用方法和实体框架

Entity framework 通用方法和实体框架,entity-framework,entity-framework-6.1,Entity Framework,Entity Framework 6.1,我有一些特定于客户端的实体,因此我经常希望获得应用于特定客户端的实体集。如下所示: interface IClientSpecific int ClientId {get;} class Entity1 : IClientSpecific { ... } class Entity2: IClientSpecific { ... } class MyContext : DbContext { DbSet<Entity1> Entity1s {get; set;}

我有一些特定于客户端的实体,因此我经常希望获得应用于特定客户端的实体集。如下所示:

interface IClientSpecific
  int ClientId {get;}

class Entity1 : IClientSpecific
{
 ...
}

class Entity2: IClientSpecific
{
 ...
}

class MyContext : DbContext
{
  DbSet<Entity1> Entity1s {get; set;}
  DbSet<Entity2> Entity2s {get; set;}
}
我尝试添加扩展方法:

IQueryable<T> GetForClient<T>(this IQueryable<T> items, int clientId)
  where T : IClientSpecific
{
  return items.Where(i => i.ClientId = clientId);
}
IQueryable GetForClient(此IQueryable项,int clientId)
其中T:IClientSpecific
{
返回项目。其中(i=>i.ClientId=ClientId);
}
这一点失败得很惨:

“System.NotSupportedException”类型的首次意外异常 在EntityFramework.SqlServer.dll中发生

其他信息:无法将类型“Entity1”强制转换为类型 “IClientSpecific”。LINQ to实体仅支持铸造EDM 基本类型或枚举类型


如何在多个实体类型上重用逻辑?

class
泛型类型约束添加到扩展方法中,它可能会解决问题。这对我有用

IQueryable<T> GetForClient<T>(this IQueryable<T> items, int clientId)
 where T : **class**, IClientSpecific
{
  return items.Where(i => i.ClientId = clientId);
}
IQueryable GetForClient(此IQueryable项,int clientId)
其中T:*类**,IClientSpecific
{
返回项目。其中(i=>i.ClientId=ClientId);
}

的确如此,谢谢!由于我花了几秒钟才明白你的意思,所以我冒昧地强调了这一区别
IQueryable<T> GetForClient<T>(this IQueryable<T> items, int clientId)
 where T : **class**, IClientSpecific
{
  return items.Where(i => i.ClientId = clientId);
}