2011-11-30 51 views
1

随着EF我可以返回对象的集合,像这样实体框架 - 从SQL语句

entities.Customers.ToArray(); 

,我还可以包括其他表得到多个结果,这样我就可以有效地得到2结果在一个设置回查询

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

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

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(); 

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

回答

1

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

但是,您可以使用像Dapper这样的微型ORM,它可以执行Multi Mapping。但这只会用于查询。所以更改跟踪和CUD操作将不可用。

+0

所以唯一的解决办法是自己写点东西?当然不是我想要的答案,但这是一个答案,并允许我前进。我可能会考虑写点东西。它看起来不太复杂(着名的遗言?:-)感谢答复,如果解决方案在一天左右没有出现,我会将其标记为答案。 – MikeKulls