【发布时间】:2021-07-15 15:55:56
【问题描述】:
我有一个准备功能,用于将记录保存到数据库中,这可能有点矫枉过正,但我的想法是我可以在以后添加它。
public void Prepare<T>(T model) where T : class {
var key = ReflectionHelper.GetAttribute<T, KeyAttribute>();
if(null == key) { return; }
SetContext<T>();
var set = DbManager.Context.Set<T>();
object id = key.GetValue(model);
object def = key.PropertyType.GetDefaultValue();
if(id == def) { set.Add(model); }
}
当前的实现只是检查记录的主键是否为默认值(通常为 0),然后将其添加到数据集中。这适用于 90% 的表将使用自动递增键构建的情况,但是,我遇到了一个表的问题,其中键是为每条记录手动生成的,这意味着它是在插入之前设置的进入数据库。
对于上述功能,这显然不理想,它导致检查失败并且实际上没有将其保存到数据库中。我知道实体框架必须进行某种内部测试来检查记录是否是新的,以确定它是否需要执行 UPDATE 或 INSERT 和 AFAIK,它不依赖于预先设置的 ID,否则我会EF 的代码与我使用上述函数时遇到的问题相同。有没有办法可以从该检查中提取结果,而不是我目前正在做的方式?
【问题讨论】:
-
这就是
DbSet.Update的用途。 -
@GertArnold 不幸的是我没有使用核心:(
标签: c# .net entity-framework