0

我非常熟悉从我的模型中返回一个实体,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);
4

1 回答 1

1

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

在 ORM 上这种访问的问题在于它破坏了它提供的抽象。那么你就不能使用 CreateQuery 提供的 Mapper 了,因为你使用的对象不在模型中。

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

我建议你使用 Linq,因为它可以创建匿名类型。而且对于那个连接,你不需要手动创建 SQL,它并不复杂。实体框架左连接

于 2014-04-24T18:21:58.510 回答