在 Entity Framework 4.1 中,如何使用 SqlQuery 创建在编译时不知道查询详细信息的匿名对象

Posted

技术标签:

【中文标题】在 Entity Framework 4.1 中,如何使用 SqlQuery 创建在编译时不知道查询详细信息的匿名对象【英文标题】:In Entity Framework 4.1 how can I use SqlQuery to create anonymous objects where the query details are not known at compile time 【发布时间】:2012-05-03 14:51:40 【问题描述】:

我正在使用 EF 4.1 并且需要使用 DbContext.Database.SqlQuery 来运行一个存储过程,这将有效地执行 SELECT * FROM table where table 在编译时甚至可能不存在。

我可能很粗,但我不知道 应该使用什么,它表示一个包含表中单行数据的对象。

我不会对 类型的结果对象进行操作,但它们最终会被序列化为 JSON。

如果我问的是不可能或不可行的问题,欢迎指出更简单的路线!

皮特·赛克斯

【问题讨论】:

【参考方案1】:

此事件中的泛型是将结果映射到的对象。即使您只是对它们进行序列化,您也需要将结果放入某个列表中。

【讨论】:

谢谢哈默斯坦。我可能不清楚 - 我了解泛型,并且 是接收每一行结果的类型,但问题是我在编译时不知道表的任何细节可能会被查询 - 实际上,该表在编译时甚至可能不存在,因此不可能为它编写一个类。我认为匿名对象可能会有所帮助,但我还没有在这里找到使用它们的方法。【参考方案2】:

我目前正在研究类似的问题。到目前为止,我找到了this blog entry。它可能会解决您的问题,但是,我对动态创建类型有点谨慎。

【讨论】:

以上是关于在 Entity Framework 4.1 中,如何使用 SqlQuery 创建在编译时不知道查询详细信息的匿名对象的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework 4.1 - 映射错误的模式

我应该如何在 MVC3 中使用 Code First Entity Framework (4.1) 声明外键关系?

Entity Framework 4.1 Code First 关系中的更改通常不需要

virtual 关键字在 Entity Framework 4.1 POCO Code First 中可以产生啥影响?

在 Entity Framework 4.1 中,如何使用 SqlQuery 创建在编译时不知道查询详细信息的匿名对象

Entity Framework 4.1 - 动态预加载