在我的项目中,我有很多列表表(都是完全相同的结构),我存储了所有下拉选项。对于每个表,我都有一个历史表来跟踪所有更改。
我想创建用于在主表中插入或更新记录的通用函数,并在历史表中添加新记录。
在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。
答案 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;
}
}