实体框架 - 从SQL语句中获取多个结果

时间:2011-11-30 04:09:02

标签: c# entity-framework entity-framework-4

使用EF我可以返回像这样的对象集合

entities.Customers.ToArray();

我可以包含其他表,因此我可以在一个查询中有效地获得2个结果集

entities.Customers.Include("Invoice").ToArray();

或者如果我有一些自定义SQL,我可以得到类似的结果:

SqlDataReader reader = GetReaderFromSomewhere("SELECT * FROM Customer");
entities.Translate<Customer>(reader).ToArray();

但是如何从我自己的SQL中获取多个结果呢?我在想的是这样的事情

SqlDataReader reader = GetReaderFromSomewhere("SELECT Customer.Name AS CustomerName, Invoice.Number AS InvoiceNumber FROM Customer JOIN Invoice ON Customer.ID = Invoice.CustomerID");
entities.Translate<Customer>(reader).Include<Invoice>().ToArray();

在上面的示例中,我使用表名为所有返回的数据添加了前缀,以便Translate方法可以知道哪些列属于哪些表。我假设Tranlate方法不支持这个,但是当调用include方法时,EF必须做类似的事情。所以我的问题是,如何在使用翻译时获得Include的功能?

1 个答案:

答案 0 :(得分:1)

AFAIK你不能手动完成。 EF的作用是,它基于可以实现实体的LINQ查询(和包含)动态生成一个类。基本上这个类知道哪些列将映射到哪些属性。

但是,您可以使用Dapper之类的微型ORM来执行Multi Mapping。但这只适用于查询。因此,无法使用更改跟踪和CUD操作。