2010-09-11 51 views
8

我正在以與Hanselman showed it could be done for Stackoverflow幾乎相同的方式創建API。我有一組實體框架生成的類和一個DataService thingy將它們序列化爲Atom和JSON。我想通過Web服務公開一些生成的屬性。認爲FullName是通過連接First-和LastName生成的(但有些更復雜)。我已經將這些添加到擴展實體框架EntityObject的部分類中,並賦予它們[DataMember]屬性,但它們不會顯示在服務中。下面是一個例子屬性(set拋出的好措施,沒有它不工作要麼):WCF數據服務,從實體框架部分類序列化其他屬性

[DataMember] 
public string FullName 
{ 
    get 
    { 
     return (this.FirstName ?? "") + " " + (this.LastName ?? ""); 
    } 
    set { } 
} 

據對MSDN論壇thesediscussions,這是一個已知的問題。有沒有人找到很好的解決方法,或沒有人有替代方案的建議?

+4

不是答案,但作爲風格問題,當您使用屬性時不需要說'屬性'。 '[DataMember]'是你所需要的。 – 2010-09-12 03:29:51

回答

0

我有相同的問題暴露了WCF服務的實體對象,並使用了鏈接到here的變通方法,即將以下屬性添加到屬性中以強制它們被序列化。

[global::System.Runtime.Serialization.DataMemberAttribute()] 

我還沒有找到任何'更好'的方式來得到這個工作。

例如,給定名爲教師與領域標題,Forenames和姓,你可以添加一個部分類教師類似的實體:

public partial class Teacher 
{ 
    [global::System.Runtime.Serialization.DataMemberAttribute()] 
    public string FullName 
    { 
     get { return string.Format("{0} {1} {2}", Title, Forenames, Surname); } 
     set { } 
    } 
} 

這時只要你的WCF服務接口引用這個類,則額外的屬性被序列化並可用於服務的消費者。

例如

[OperationContract] 
List<Teacher> GetTeachers(); 
+0

hm,雖然似乎沒有工作。你正在使用哪些實體? – friism 2010-09-14 09:01:15

+0

我已經在上面的答案中添加了更詳細的示例。 – Nelson 2010-09-14 16:57:45

+0

我認爲這需要EF4的工作。 @Nelson - 你能否證實你擁有.NET Framework 4.0? – Antony 2010-10-21 02:03:05

相關問題