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);
}