EntitySql CreateQuery <t>返回类型</t>

时间:2014-04-24 17:13:21

标签: c# .net entity-framework-6 entity-sql

我非常熟悉使用CreateQuery<T>从模型中返回实体但是如何从多个表中返回结果?我已经接近使用CreateQuery<dynamic>,但这似乎返回了一个System.Data.Entity.Core.Objects.MaterializedDataRecord对象,我无法使用它。

var sql = "SELECT TableA.ColumnA, TableB.ColumnB
 FROM TestingContext.TableA
LEFT OUTER JOIN TestingContext.TableB
ON TableA.TableBId = TableB.Id";

var results = ((IObjectContextAdapter)context).ObjectContext.CreateQuery<dynamic>(sql);

1 个答案:

答案 0 :(得分:1)

为此,您需要使用DbDataRecord,然后将其映射到某个对象(DTO或动态对象)。这里有一个如何做到这一点的例子:http://www.codeproject.com/Articles/152742/EF-DbDataRecord-ConvertTo

ORM上的这种访问问题是它打破了它提供的抽象。然后你不能使用CreateQuery提供的Mapper,因为你使用的对象不在模型中。

您可以在此处查看Entity Framework + AutoMapper ( Entity to DTO and DTO to Entity )有关如何使用Mapper的一些示例。

我建议您使用Linq,因为它可以创建匿名类型。对于该连接,您不需要手动创建SQL,它不是那么复杂。 Entity framework left join