我正在尝试将dblinq与sqlite数据库一起使用,但当我尝试强制转换
ITable
作为一个
Queryable<TEntity>
.
dblinq中存在已知的错误(
Issue 211
,这可能是我的问题的根源,但我想确保我的代码是健全的,如果是的话,找出我是否可以做些什么来解决这个bug。
下面是尝试执行转换的通用存储库方法:
public IQueryable<TEntity> GetAll()
{
return Table.Cast<TEntity>();
}
它编译,但如果我传入接口
IPerson
对于
TEntity
表中的实体类型为
Person
(何处)
Person : IPerson
,我从dblinq得到这个错误:
S0133:实现querymethod queryable.cast。
我为什么要这么做?
我有一个库项目,直到运行时才知道实体的类型,但它知道实体的接口。所以,我尝试强制转换为接口类型,以便我的库项目可以使用数据。
问题:
-
我是在尝试一个不可能的演员,还是这绝对是DBLinq中的一个bug?
-
我还能怎么解决我的问题呢?
更新
我修改了我的知识库类,所以现在它需要
柔韧性
和
一
TEntityBase
在哪里
柔韧性
是实体的实际类型,并且
张力基
是我试图转换到的接口。重要的是,我现在有以下内容
where
类定义中的子句:
where TEntity : class, TEntityBase
这让我可以存储
Table
属性作为
Table<TEntity>
而不是
可得的
允许我使用
AsEnumerable()
(正如斯蒂芬建议的那样)。修订方法如下:
public IEnumerable<TEntityBase> GetAll()
{
return Table.AsEnumerable().Select(e => (TEntityBase)e);
}
到目前为止,
似乎
做这个把戏。