我使用以下代码段将修改过的实体保存在我的存储库中
object id1 = item.GetProperty("Id");
T originalEntity = dbSet.Find(id1); // but this doesnt update navigation properties
((DbContext)context).Entry(originalEntity).CurrentValues.SetValues(item);
navProps = GetNavigationProperties(originalEntity);
foreach (PropertyInfo navProp in navProps)
{
//Set originalEntity prop value to modifiedEntity value
var newval = (LoggedEntity)navProp.GetValue(item);
object entity = null;
if (newval != null)
{
Type tp = navProp.PropertyType;
DbSet entities = ((DbContext)context).Set(tp);
entity = entities.Find(newval.Id);
}
navProp.SetValue(originalEntity, entity);
}
调用
public List<PropertyInfo> GetNavigationProperties(T entity)
{
Type t = entity.GetType();
ObjectContext objectContex = ((IObjectContextAdapter)((DbContext)context)).ObjectContext;
EntityType elementType = objectContex.CreateObjectSet<T>().EntitySet.ElementType;
var properties = new List<PropertyInfo>();
Type entityType = entity.GetType();
foreach (NavigationProperty navigationProperty in elementType.NavigationProperties)
{
PropertyInfo prop = entityType.GetProperty(navigationProperty.Name);
properties.Add(prop);
}
return properties;
}
但是,当我想将navigation属性设置为null时,我遇到了问题。 这些变化根本无法保存。
答案解释为in this question
指出导航属性需要加载。
如何将我的GetNavigationProperties程序修改为急切加载?
答案 0 :(得分:0)
我插入了以下行 originalEntity.GetProperty(navProp.Name);
前 navProp.SetValue(originalEntity,entity);
现在,如果entity为null,代码可以正常工作