我是WCF和实体框架的新手。
我有一个类库“A”,其中包含DatabaseEntities.edmx
(实体框架objectContext
)。
该库在内部使用实体对象公开包含函数FunctionB
的类“B”。
我已将此库“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
是可选的吗?
提前致谢..
答案 0 :(得分:10)
从 .NET 3.5 SP1 开始 - 是的,不再需要[DataContract]
。
如果省略它,那么类将像XML序列化程序那样被序列化:默认情况下,类的所有公共属性都将被序列化。
但是:如果您开始在您的课程上使用[DataContract]
或在您的某个媒体上使用[DataMember]
,那么您必须装饰您想要序列化的所有媒体资源[DataMember]
。
所以它要么:完全省略这些属性(使用XML序列化程序使用的默认行为),要么具体并使用[DataContract]
装饰类,并使用{{1来序列化每个属性}}。我更喜欢第二种方法。