2013-07-05 56 views
0

我試圖創建2個linq到sql實體之間的關聯,比如實體A和實體B. A使用非列屬性屬性(名爲BaseDocumentType)以及「ThisKey」的關聯中的列屬性以及「OtherKey」的2個列屬性。以下是我的協會屬性定義的示例... [System.Data.Linq.Mapping.AssociationAttribute(... ThisKey = 「BaseDocumentType,列2」,OtherKey = 「column1的,列2」)]Linq to Sql使用關聯屬性中的非列屬性

當我運行它時,出現以下錯誤... 「類型'Library'的數據成員'System.String BaseDocumentType'不是類型'A'的映射的一部分。成員是繼承層次?」

如何使用非列屬性屬性定義關係,或者如何使其工作?

謝謝。

+0

這裏的問題是您的繼承模型不能很好地與LINQ to SQL一起工作。如果您可以添加關於使用繼承模型的表和實體的信息,我們可能會提供一些其他選擇。最初,我會說你的BaseDocumentType可能會更好,而不是基類,因爲我懷疑你的EntityA和EntityB是BaseDocumentType的子類型,而是實現一個IDocumentType接口。 EF確實支持你想要的映射,但是性能可能會低於預期。 –

回答

0

該消息非常清楚。 LINQ to SQL將語句轉換爲SQL,並且您嘗試使用不映射到列的屬性,因此無法將其轉換爲SQL。

您將不得不從數據庫中檢索所需的實體,然後嘗試使用LINQ to Objects來查詢它們,即對結果列表或數組執行LINQ操作。一個更好的選擇是重新考慮你的設計,並找到一種方法只從數據庫中檢索你需要的數據,並避免在客戶端上處理結果。

Linq to SQL在這種情況下阻止您執行某些非常危險的操作。它可以檢索所有數據並使用非列屬性處理它們,但這會造成巨大的性能下降。一些天真的LINQ提供者實際上就是這麼做的。想象一下,從數據庫中檢索1000個對象,只找到匹配這個非列屬性的兩個對象。