【发布时间】:2017-12-18 17:02:36
【问题描述】:
如何从表达式更新实体?
我动态构建应该更新哪些属性(列)。执行此操作的函数返回Expression<Func<T, T>>,其中T 是entity。
我已经使用Where 和Single 从数据库中加载了实体。
Expression<Func<T, T>> expr = this.CallVirtualMethodAndGetExpression(ModelFromRequest);
DbUser entity = this.context.Users.Where(t => t.Id == 1).Single();
some magic ??? //tried expr.Compile()(entity) but it does not work.
this.context.SaveChanges();
//use DbUser with updated properties of course.
我知道我可以使用EF Plus(批量更新),但我想坚持使用SaveChanges(我需要在SaveChanges 之后使用DbUser,并且我想避免发送另一个请求)。
更新:
我有实体对象和表达式。现在,我需要根据表达式编辑实体对象并调用SaveChanges,它应该更新实体。
【问题讨论】:
-
赏金不会让问题变得可以回答。绝对不清楚您要达到的目标。您可以先在评论中显示您提到的尝试。
-
我添加了有问题的附加信息。我相信我的代码和额外的解释解释了我想要实现的目标。
-
如果你所说的表达是来自你Build expression from object的这个问题,一般是
Expression<Func<T, T>>,那么它绝对不适合更新。对于更新,您需要Expression<Action<T, T>>,它不使用new { ... }(Expression.MemberInit),而是使用分配块。目前的表述方式,这个问题没有任何意义。 -
更新后:嗯,那里的新信息为零。也许您应该说明为什么仅在
User对象中设置值是不够的。我认为创建表达式至少需要相同数量的代码。
标签: entity-framework entity-framework-core