【发布时间】:2013-08-05 07:13:18
【问题描述】:
所以,这涉及到具体细节,但我希望这里的人可能有见解。
这是我设法收集的内容(当然,我可能对其中任何一个有误,所以请纠正我)
表达式.绑定
根据我的研究,包括 [topic][1] 上的 MSDN 条目,似乎 Expression.Bind 方法用于生成 MemberAssignment 类型的表达式,它是 MemberBinding 表达式的特定子类型。该方法采用 MemberInfo 和它应该绑定到的表达式。生成的 MemberAssignment 表达式表示成员的初始化。
表达式.赋值
是一种创建表示赋值操作的 BinaryExpression 的方法
这是我的问题:为什么我们不能在为 Expression.MemberInit 方法提供绑定时只使用 Expression.Assign?而不是:
MemberAssignment binding = Expression.Bind(PropAccessMethodInfo, TargetExpression)
例如,我们可以这样做:
MemberExpression getProperty = Expression.Property(FindObjectExpression, PropAccessMethodInfo)
Expression binding = Expression.Assign(getProperty, TargetExpression)
我知道编译器会抱怨,但我想我想问这里是否存在语法问题。 换句话说,Expression.Bind / MemberBindings 是否在幕后为我们提供了一些额外的东西? 或者,它们只是使管理成员初始化更容易的语法糖吗?
更具体地说,它是否可以帮助跟踪业务对象与 .NET EF4 中的底层实体之间的关系?它是否适合实体框架中的“使用代理”或有助于更改跟踪或业务对象和基于 EF 的数据访问层之间的桥梁?
正如您可能预见的那样,我正在尝试以编程方式将我的业务对象的创建从底层组件实体和此类表达式(尤其是 MemberInit 方法)连接到创建位。
但是,我不确定 EF / .NET 是否足够智能以使用这些绑定进行跟踪?或者,我是否可以重用这些相同的绑定到 BizEnt 跟踪/桥接器。
我希望这是有道理的。如果有不清楚的地方,我很乐意提供更多信息。
谢谢!!
【问题讨论】:
-
改变了响应...现在我深入研究对象初始化器的工作。
-
感谢您出色而详细的回复。这样就清楚多了!!我仍在寻找一种方法来重用这些成员绑定表达式来跟踪/桥接业务实体层。当我发现一些东西时,我会四处寻找并更新......
标签: c# expression-trees