c# - 通用插入或更新方法
问题描述
我有一个更新或插入和实体的通用方法。我不明白这里 if 语句的目的。该评论告诉我它的用途,但我不清楚。
为什么要根据 System.Data.Entity.DynamicProxies 检查命名空间。我以为通过实体框架检索到的所有实体都在这个命名空间下?为什么我们要检查基类型是否为空?
public virtual T InsertOrUpdate(T e)
{
DbSet<T> dbSet = Context.Set<T>();
DbEntityEntry<T> entry;
if (e.GetType().BaseType != null
&& e.GetType().Namespace == "System.Data.Entity.DynamicProxies")
{
//The entity being added is already a proxy type that supports lazy
//loading - just get the context entry
entry = Context.Entry(e);
}
else
{
//The entity being added has been created using the "new" operator.
//Generate a proxy type to support lazy loading and attach it
T instance = dbSet.Create();
instance.ID = e.ID;
entry = Context.Entry(instance);
dbSet.Attach(instance);
//and set it's values to those of the entity
entry.CurrentValues.SetValues(e);
e = instance;
}
entry.State = e.ID == default(int) ?
EntityState.Added :
EntityState.Modified;
return e;
}
解决方案
推荐阅读
- android - 以编程方式更改 DarkMode
- regex - 什么是匹配字符串的正则表达式,除了它有一个 $ 美元符号?
- r - 如何从 2 列中抽取 90/10 拆分% 的行
- reactjs - Redux-saga:处理仅在一个组件中使用的异步调用数据的最佳方式
- quarkus - 如何更新使用的 quarkus 版本
- javascript - GEOSERVER - DWITHIN 不过滤点并返回空数组
- apache-spark - 使用 Airflow 并行执行脚本
- android - 如何在 Android 10 中打开 APK 文件
- tikz - 使用 Tikz 实现精确平滑的曲线
- python - 使用Python为Excel中多列的条件创建不同的数据框