2013-06-02 35 views
3

我是WCF和實體框架的新手。我有一個類庫「A」其中包含DatabaseEntities.edmx(實體框架objectContext)。我有一個類庫「A」其中包含DatabaseEntities.edmx(實體框架objectContext)。實體框架數據合同

該庫正在公開一個類「B」,其中包含一個函數FunctionB,內部使用實體對象。

我採取這種庫「A」引用到一個WCF Web服務和IService.cs裏面 - 我已經編寫這樣的:

[OperationContract] 
void FunctionB_Proxy(); 

沒有定義任何DataContract我已經進入了Service1.cs並實現此功能 如下:

public void FunctionB_Proxy() 
{ 
    ClassB x=new ClassB();//Class of ClassLibrary 
    x.FunctionB(); 
} 

這工作正常。

但我的問題:在WCF中是否可選DataContract

在此先感謝..

回答

10

由於.NET 3.5 SP1 - 是的,[DataContract]不再需要。

如果省略它,那麼該類將像XML序列化程序那樣被序列化:類中的所有公共屬性將默認序列化。

不過:如果你開始使用你的類[DataContract]或你的屬性之一[DataMember],那麼你必須裝飾你想用[DataMember]連載所有的屬性。

所以它可以是:完全忽略這些屬性(使用XML序列化程序使用的默認行爲),或者使用[DataContract]以及您想要與[DataMember]序列化的每個屬性來裝飾該類。我更喜歡第二種方法。

+0

看起來非常令人印象深刻,感謝這樣一個寶貴的答案。我也會更喜歡你的建議路線,但是爲了做到這一點,我將不得不爲ORM自己編寫代碼。 – Suzane