在不同的表中保存相同的对象
本文关键字:对象 保存 | 更新日期: 2023-09-27 18:05:14
在我的项目中,我有很多列表表(都是完全相同的结构),我存储所有下拉选项。对于每个表,我都有一个历史表来跟踪所有更改。
我想创建在主表中插入或更新记录的通用函数,并在历史表中添加新记录。
在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
虽然使用EF很难(或者可能不可能),但使用Drapper绝对是微不足道的。
方法可能看起来像这样:
public T Save<T> (T item) where T : IMyEntity
{
return _commander.Execute(item) ? item : null;
}
其中_commander
是Drapper的IDbCommander的实例。从这里开始,您将提供SQL来插入或更新数据库中的项目。把SQL放到你的配置中。
非常简单,非常快,完全可测试。
关于使你的代码适应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;
}
}