我SQLite
在Windows 8 Store Application
. 此外,我使用 SQLite 包装器sqlite-net
对数据库进行操作。
我将详细解释这一点,以便您了解我的情况。有些Model classes
包含业务逻辑,例如类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);