如何使EF EntityType.GetProperty Eager加载?

时间:2014-09-14 10:43:35

标签: entity-framework-6

我使用以下代码段将修改过的实体保存在我的存储库中

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程序修改为急切加载?

1 个答案:

答案 0 :(得分:0)

我插入了以下行     originalEntity.GetProperty(navProp.Name);

前     navProp.SetValue(originalEntity,entity);

现在,如果entity为null,代码可以正常工作