C# 如何使用sqlite net在适用于所有数据库模型的父类中实现插入、更新和删除?

C# 如何使用sqlite net在适用于所有数据库模型的父类中实现插入、更新和删除?,c#,sqlite,windows-store-apps,sqlite-net,C#,Sqlite,Windows Store Apps,Sqlite Net,我正在一个windows8商店应用程序中使用SQLite数据库。 此外,我还使用SQLite包装器SQLite net对数据库进行操作 我会详细解释,以便你了解我的情况。 有模型类包含业务逻辑,例如类位置。然后是生成数据库表的DatabaseModels,例如LocationDb 我不想在每个模型类中实现基本的数据库方法,如插入(模型模型)、更新(模型模型)、删除(int-id)、获取所有记录()和获取记录(int-id)。相反,我想在所有模型的基类中实现这些方法。所有模型的这个基类称为Mode

我正在一个
windows8商店应用程序中使用
SQLite
数据库。 此外,我还使用SQLite包装器
SQLite net
对数据库进行操作

我会详细解释,以便你了解我的情况。 有
模型类
包含业务逻辑,例如类位置。然后是生成数据库表的
DatabaseModels
,例如LocationDb

我不想在每个模型类中实现基本的数据库方法,如插入(模型模型)、更新(模型模型)、删除(int-id)获取所有记录()获取记录(int-id)。相反,我想在所有模型的基类中实现这些方法。所有模型的这个基类称为ModelBase;所有数据库模型的基类都是DbModelBase

对于所有模型,按如下方式实现插入方法没有问题:

    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 db=new SQLite.SQLiteConnection(MainApplication.DBPath))
{
var queryResult=db.Table(),其中(l=>l.Id==model.Id);
if(queryResult.Count()==1)
{
数据库更新(新教师数据库(模型));
}
}
。。。但是我不会写字

var queryResult = db.Table<typeof(databaseModel)>().Where(t => t.Id == model.Id);
var queryResult=db.Table(),其中(t=>t.Id==model.Id);

为此编写一个解决方案。

这个解决方案怎么样:

public class BaseModel<T> where T : Type
{
    protected T Id;
    /// <summary>
    /// Adds a new record to data base. It doesn't check for record existance.
    /// </summary>
    /// <returns></returns>
    protected BaseModel<T> Add() 
    {
        try
        {
            var entities = Variable.CurrentEntities;
            var dbSet = entities.Set<BaseModel<T>>();
            var result = dbSet.Add(this);
            entities.SaveChanges();
            return result;
        }
        catch (Exception exception)
        {
            LogException.HandleException(exception);
            return null;
        }
    }

    protected bool Update()
    {
        try
        {
            var entities = Variable.CurrentEntities;
            var dbSet = entities.Set<BaseModel<T>>();
            var original = dbSet.Find(this);
            entities.Entry(original).CurrentValues.SetValues(this);
            entities.SaveChanges();
            return true;
        }
        catch (Exception exception)
        {
            LogException.HandleException(exception);
            return false;
        }
    }

    protected BaseModel<T> Delete()
    {
        try
        {
            var entities = Variable.CurrentEntities;
            var dbSet = entities.Set<BaseModel<T>>();
            var result = dbSet.Remove(this);
            entities.SaveChanges();
            return result;
        }
        catch (Exception exception)
        {
            LogException.HandleException(exception);
            return null;
        }
    }

    protected bool Upsert()
    {
        try
        {
            var entities = Variable.CurrentEntities;
            var dbSet = entities.Set<BaseModel<T>>();
            dbSet.AddOrUpdate(this);
            return true;
        }
        catch (Exception exception)
        {
            LogException.HandleException(exception);
            return false;
        }
    }

    protected BaseModel<T> Save()
    {
        try
        {
            var entities = Variable.CurrentEntities;
            var dbSet = entities.Set<BaseModel<T>>();
            var original = dbSet.Find(Id);
            if (original == null)
            {
                original = dbSet.Add(this);
            }
            else
            {
                entities.Entry(original).CurrentValues.SetValues(this);
            }
            entities.SaveChanges();
            return original;
        }
        catch (Exception exception)
        {
            LogException.HandleException(exception);
            return null;
        }
    }
}
公共类基类,其中T:Type
{
受保护的T-Id;
/// 
///将新记录添加到数据库。它不检查记录是否存在。
/// 
/// 
受保护的BaseModel添加()
{
尝试
{
var实体=Variable.CurrentEntities;
var dbSet=entities.Set();
var result=dbSet.Add(此);
entities.SaveChanges();
返回结果;
}
捕获(异常)
{
LogException.HandleException(异常);
返回null;
}
}
受保护的bool更新()
{
尝试
{
var实体=Variable.CurrentEntities;
var dbSet=entities.Set();
var original=dbSet.Find(本);
entities.Entry(原始).CurrentValues.SetValues(本);
entities.SaveChanges();
返回true;
}
捕获(异常)
{
LogException.HandleException(异常);
返回false;
}
}
受保护的BaseModel删除()
{
尝试
{
var实体=Variable.CurrentEntities;
var dbSet=entities.Set();
var result=dbSet.Remove(此);
entities.SaveChanges();
返回结果;
}
捕获(异常)
{
LogException.HandleException(异常);
返回null;
}
}
受保护的bool Upsert()
{
尝试
{
var实体=Variable.CurrentEntities;
var dbSet=entities.Set();
dbSet.AddOrUpdate(本文件);
返回true;
}
捕获(异常)
{
LogException.HandleException(异常);
返回false;
}
}
受保护的BaseModel保存()
{
尝试
{
var实体=Variable.CurrentEntities;
var dbSet=entities.Set();
var original=dbSet.Find(Id);
如果(原始==null)
{
原始=dbSet.Add(本);
}
其他的
{
entities.Entry(原始).CurrentValues.SetValues(本);
}
entities.SaveChanges();
归还原件;
}
捕获(异常)
{
LogException.HandleException(异常);
返回null;
}
}
}