包括忽略的字符串属性

时间:2017-07-12 14:46:32

标签: c# entity-framework entity-framework-core

我的db模型有字符串属性“描述”,我不想加载每个操作。所以我用 [NotMapped] 属性标记了它。但我在代码中有一个位置,我需要这些数据。我尝试用.Include加载它,但它抛出异常:

  

System.InvalidOperationException:传递给Include运算符的表达式'[n] .Description'无法绑定。

有没有办法实现所需的行为?

2 个答案:

答案 0 :(得分:2)

如果你没有在模型创建时(第一次实例化上下文)映射它,EF将永远不会加载它,除非你愿意通过反射加载它。

没有反思的唯一方法就是这样做:

// When you DO want to load it
var x = context.X.Find(id);

// When you DON'T want to load it
var x = context.X
    .Where(y => y.Id == id)
    .Select(y => new X /* Or a ViewModel */ { Id = y.Id, ... }) // all properties but Description
    .FirstOrDefault();

还有一种方法,可能是最差的方法,将描述移动到一个新表并在需要时加载它。

答案 1 :(得分:0)

NotMapped属性将告诉实体框架该字段不应添加到数据库表中。

如果您不想要某些字段,则可以使用select投影字段 另外,请不要忘记删除NotMapped属性 E. G

    db.entity.where(p => p. Id == id).select(p => new EntityModel{ name=p.name}). ToList();