使用带有SQLite的通用存储库进行转换困境
本文关键字:转换 困境 存储 SQLite | 更新日期: 2024-07-27 08:04:55
称呼。我正在使用通用存储库来方便访问两个不同且必要的数据存储;一个本地SQLite DB和一个远程REST WS(在C#中用于移动MonoDroid应用程序(。
interface IRepository<T>
{
List<T> Read(ICond cond);
}
class RepositorySQL<T>: IRepository where T : new()
{
List<T> Read(ICond cond)
{
sqlArgs = convertCond(cond); // convert cond to sql arguments
List<object[]> results = dbLayer.DBSelect(sqlARgs); // sqlite SELECT wrapper
List<T> returnList = new List<T>();
for(int i=0; i < results.Count; i++)
{
object[] oa = results[i];
T t = new T();
// cast/convert oa to T
///////////////////////////
t = (T)oa; // override cast operator ???
t = oa; // override = operator ???
t.Convert(oa); // use a method/delegate somehow ???
returnList.Add(t);
}
}
我的问题是我需要将每个object[]
转换为T
,然后再将其添加到返回List<T>
,但不确定最佳方法是什么。 我的数据库层方法DBSelect
构建并返回一个List<object[]>
,因为这是从SqliteDataReader
方法获取查询结果的最直接和通用的方法(我认为GetValue(i)
(每个object[]
是一行,每列是一object
。我也可以通过调用GetString(i)
将行存储到string[]
中,但仍然会遇到转换/转换问题(。
我真的很想在这里使用通用存储库,即使静态类型的存储库将是一个快速解决方案。我也坚持使用两个存储库(我已经阅读了许多关于存储库的帖子,其中的答案指出了为什么不应该使用两个数据重复问题等......除此之外,我对任何和所有建议都持开放态度。 感谢您的帮助!
你需要以任何方式映射。因此,这只是代码组织的问题,该代码将驻留在强类型存储库类或实体类中。
类 foo : IDataReader公共空隙构造(对象[] 行(
那么你的仓库将是其中 T:IDataReader