2011-11-30 54 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