我在 Windows 8 商店应用程序
中使用 SQLite
数据库。
此外,我使用 SQLite 包装器 sqlite-net
对数据库进行操作。
我会详细解释这一点,以便您了解我的情况。
有包含业务逻辑的模型类
,例如类Location。然后是生成数据库表的 DatabaseModels
,例如 LocationDb。
我不想实现基本的数据库方法,如Insert(Model model)、Update(Model model)、Delete(int id)、每个模型类中的 GetAllRecords() 和 GetRecord(int id)。相反,我想在所有模型的基类中实现这些方法。这个所有模型的基类叫做ModelBase;所有数据库模型的基类都是DbModelBase。
所有模型按如下实现Insert方法没有问题:
public int Insert(ModelBase model)
{
int id;
using (var db = new SQLite.SQLiteConnection(MainApplication.DBPath))
{
db.Insert(model.GetDbModelFromModel());
id = (int)SQLite3.LastInsertRowid(db.Handle);
}
return id;
}
但我不知道如何使用 sqlite-net 实现其他的。 我需要在特定的表中找到特定的数据记录。我有一个包含 id 的模型对象。 但是如何在不显式调用特定表的情况下使一种方法适用于所有模型类? 以下代码适用于单个特定数据库表...
using (var db = new SQLite.SQLiteConnection(MainApplication.DBPath))
{
var queryResult = db.Table<LocationDb>().Where(l => l.Id == model.Id);
if (queryResult.Count() == 1)
{
db.Update(new TeacherDb(model));
}
}
...但是我不会写
var queryResult = db.Table<typeof(databaseModel)>().Where(t => t.Id == model.Id);
最佳答案
写一个generic function为此。
关于c# - 如何使用 sqlite-net 在适用于所有数据库模型的父类中实现插入、更新和删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15981241/