动态查询 - Expando/动态对象类型

Posted

技术标签:

【中文标题】动态查询 - Expando/动态对象类型【英文标题】:Dynamic Queries - Expando/Dynamic object type 【发布时间】:2011-04-08 09:54:13 【问题描述】:

我需要在编译时查询既不知道也不存在的表,通过 odata 发布表,然后将其提供给 Silverlight 客户端以进行 CRUD。

使用 dynamic 或 ExpandoObject 类型的 PCO 来实现这一点会很棒,但这似乎不起作用(正如怀疑的那样)。

我想知道是否有接口可以让我在行级别执行类型映射和序列化,所以我会动态地获取数据行并在服务器端往返它的值。可能是 PCO 的“帮助”接口,或者是动态创建的属性 getter/setter。我也在玩弄在运行时动态创建上下文类,但这有点难看。

然后 - 在客户端,对 odata 提要做同样的事情,我在这里有一个解决方案,但它还不足以与全世界分享。

【问题讨论】:

【参考方案1】:

EF 不提供任何“动态”方法以及让您创建新表并将其添加到映射的任何简单方法。另一个问题是 WCF 数据服务如何处理不断变化的数据 - 我相信它也不受支持。

如果您想要动态更改结构(添加表、列等),请使用一些元数据模型,而不是为每个实体创建新表。元数据模型通常具有具有共同属性的表和具有属性名称和值的键值对的相关表。它可以进一步扩展到更复杂的场景,但这是实现这一目标的唯一方法。不要在 EF 中进行映射,而是将您的实体类型作为数据。

【讨论】:

以上是关于动态查询 - Expando/动态对象类型的主要内容,如果未能解决你的问题,请参考以下文章

在linq查询中以匿名类型设置动态对象的所有属性

在 Django 模板中迭代 Expando 的动态属性

不允许使用源类型“动态”或具有“动态”类型连接序列的查询表达式

csharp 动态Expando演示

Lambda查询抛出对象不包含错误,同时通过`MOQ`设置来获取动态类型的数据

从动态类型信息创建新对象