我非常熟悉使用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);
答案 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