我正在从一个ORM(Lightspeed)转换到另一个(Entity Framework)。
Lightspeed类继承自Entity基类,而EF类实现IEntity
目前,我在仓库中有以下泛型类型:
public IQueryable<TEntity> GetAll<TEntity>() where TEntity : Entity { ... }
public IQueryable<TEntity> GetAll_EF<TEntity>() where TEntity : IEntity { ... }
示例用法如下
var claims = repository.GetAll<Claim>(); // Lightspeed
var users = repository.GetAll_EF<User>(); // EF
我希望有一个单独的公共方法来调用适当的更具体的方法。
public static IQueryable<TEntity> GetAll<TEntity>() where TEntity : class
{
if (typeof(Entity).IsAssignableFrom(typeof(TEntity))) // lightspeed
{
return GetAll_LS<TEntity>();
}
else
if (typeof(IEntity).IsAssignableFrom(typeof(TEntity))) // EF
{
return GetAll_EF<TEntity>();
}
else throw new NotImplementedException("xxx");
}
这会给编译器带来错误
类型“TEnty”不能用作泛型类型或方法“EfMigrationUtils.GetAll_LS()”中的类型参数“TEnty”。没有从“TEnty”到“Mindscape.LightSpeed. Entity”的隐式引用转换。
类型“TEnty”不能用作泛型类型或方法“EfMigrationUtils.GetAll_EF()”中的类型参数“TEnty”。没有从“TEnty”到“Eml.Repository.Base.Abstract. IEntity”的隐式引用转换。
我想要一些方法来告诉编译器Claim是Entity,user是IEntity。
1条答案
按热度按时间hfyxw5xn1#
你可以尝试使用
Cast
方法。