将同一对象保存在不同的表中

时间:2016-09-02 10:51:26

标签: c# mysql entity-framework

在我的项目中,我有很多列表表(都是完全相同的结构),我存储了所有下拉选项。对于每个表,我都有一个历史表来跟踪所有更改。

我想创建用于在主表中插入或更新记录的通用函数,并在历史表中添加新记录。

在SQLite中,我使用的是

    public int SaveItem<T>(T item) where T : IMyEntity {
        lock (locker) {
            if (item.Id != 0) {
                database.Update(item);
                return item.Id;
            }
            else {
                return database.Insert(item);
            }
        }
    }

我无法用EF做到这一点。数据库是MySQL。

2 个答案:

答案 0 :(得分:0)

虽然使用EF很难(或者也许不可能),但使用Drapper绝对是微不足道的。

该方法可能类似于:

public T Save<T> (T item) where T : IMyEntity
{
    return _commander.Execute(item) ? item : null; 
}

_commander是Drapper的IDbCommander的一个实例。从这一点开始,您将提供SQL以插入或更新数据库中的项目。把SQL放在你的配置中。

非常简单,非常快,完全可测试。

答案 1 :(得分:0)

如果您正在使用附加实体

,那么关于将您的代码调整为EF,这项工作很有用
public int SaveItem<T>(T item) where T : IMyEntity {
    lock (locker) {
        if (item.Id != 0) {
            context.Set(typeof(T)).Add(item);
        }
        context.SaveChanges();
        return item.Id;
    }
}