2010-08-23 77 views
2

我正在使用WCF RIA Services製作Silverlight 4應用程序。在客戶端暴露自定義服務器端實體框架屬性

在服務器端(*.Web項目),我有一個從SQL Server數據庫自動生成的實體模型。 在客戶端,我有由Visual Studio生成的用於Silverlight程序集的域服務和代理對象。

我想爲模型添加自定義屬性(最好在服務器端)。 假設我有Contact,CompanyAddress表,它們通過外鍵鏈接(但不一定是實際的外鍵約束條件)。我想添加一個屬性,該屬性將返回一個ContactCompanyAddress對象。

我一直試圖做一個部分類來擴展Contact類,並添加一個CompanyAddress { get; }屬性。但我不知道我需要用新的屬性來傳播到客戶端的自動生成的代碼。我需要添加哪些特定屬性?我是否需要在某個地方註冊它,以便代碼生成器知道它?

這是否必須是一個導航屬性,或者它可以更簡單?

這是甚至是做事情的最佳方式,還是我應該放棄擴展服務器端模型並在客戶端執行它? (如果我在客戶端執行此操作,我將面臨無法訪問個別Entity派生類中的上下文對象的問題。)

回答

-1

我從來沒有使用過Silverlight或RIA服務,但我想它會是相當的類似。當你創建EF模型並且你有與外鍵相關的實體(必須有關係)時,與其他實體相關的每個實體都將包含一些稱爲導航屬性的東西。因此,在您的場景中,聯繫人應包含名爲公司的公司,並且公司應包含名爲地址的屬性您可以通過在ObjectSet上使用Include或通過延遲加載(在WCF中不是好主意)來isntruct EF加載這些導航屬性。如果您通過WCF向客戶發送聯繫人,則公司和地址也會發送。

你的方法有一個大問題。你的屬性只包含getter - 這個屬性不是序列化的。

+0

我目前沒有修改現有數據庫模式的能力,所以我不能依賴已生成的.edmx文件中已存在的外鍵關係。我也不能手動修改.edmx文件,因爲將來可能更改模式*,並且在重新生成edmx文件時我的修改將被覆蓋。 – kpozin 2010-08-23 20:55:37

+0

將setter添加到您的屬性並檢查生成的實體類是否標有DataContract屬性。如果是,請使用DataMember屬性標記您的屬性。 – 2010-08-23 21:10:34

+0

感謝您的幫助。 我添加了一個setter,並用[DataMember]標記了屬性。這沒有影響;該屬性未添加到Generated_Code \\ *中的Contact代理類中。Web.g.cs – kpozin 2010-08-23 21:21:46