0

假設我有兩個SQL表,我想要使用POCO T4模板生成一個EDMX模型(現在,使用automagical生成所有模型)。假設我們的兩個表格是Person (ID, FName, LName)Comment (ID, PersonID, CommentText, CommentDate),兩者之間有一對多關係(即,您可以對一個人進行很多評論)。將自定義屬性添加到我的EF4模型

讓我的POCO實體生成很簡單,並且工作得很好。然而,我現在不知道該怎麼做,是在我的Person實體上添加一個自定義導航屬性,該屬性代表該人員最近的評論(最終比最終評論還要複雜得多)。目前,它可以是隻讀的,但是如果知道如何處理可寫屬性也不錯。

這樣做的正確方法是什麼?需要考慮的一件事是,我正在序列化這些實體,所以我將需要它們進行熱切加載並以一種方式持續存在,這樣我就可以用WCF將它們推送到我的UI中(也就是自定義的手寫屬性一個依賴延遲加載的擴展類不是一個選項)。

我已經非常擅長使用EF4作爲標準的東西,但現在我已經進入了這個定製的東西,我不完全知道如何以最佳實踐的方式做到這一點。

+0

理想情況下,我想調用Person.LatestComment並且調用Person.Comments.OrderByDescending(c => c.CommentDate).FirstOrDefault()'。 – Jaxidian 2010-05-12 22:49:30

回答

2

添加屬性很簡單。把它放在一個部分類中,與實體命名相同。但如果你的財產如下所示:

get 
{ 
    return this.Comments.OrderByDescending(c => c.CommentDate).FirstOrDefault(); 
} 

......那麼它會工作,但你不能在L2E查詢中使用它。

如果您需要L2E支持,您可以使用this technique

+0

您提供的示例將無法正常工作,因爲我需要L2E查詢和要序列化的值。我會研究你提到的其他技術。順便說一句,感謝您跟蹤我和我的問題,併爲您提供的所有答案。 ;-) – Jaxidian 2010-05-13 15:23:28

+0

調查其他解決方案看起來相當複雜(不一定在消費,但至少在理解發生了什麼)。因此,很難有一個直覺感覺它會如何工作。它是否會在急切加載,顯式延遲加載和序列化的情況下工作?在我的EDMX映射中,我真的沒有辦法做到這一點嗎?我認爲我應該能夠在那裏發生「有趣的」映射,所以我可以從那些「有趣的」映射SQL優化的查詢中受益... ... – Jaxidian 2010-05-13 16:18:11

+0

恕我直言,你的實體是錯誤的地方定製序列化。將自定義屬性添加到實體與映射不同。是的,你可以在某種程度上做「有趣」的映射(例如,實體分裂),但是自定義屬性完全是另一回事。 – 2010-05-13 16:25:56