WCF DataService,如何在POCO中避免[DataServiceKey]

Chr*_*ers 7 wcf poco dataservice odata

我使用WCF DataService并希望使用POCO.我必须指定一个DataServiceKey才能使它工作(显然).当我这样做时,我必须引用System.Data.Services.Client(对于System.Data.Services.Common) - 这感觉不是很POCO.

有没有办法保持我的对象清洁,并在其他地方指定密钥?

Vit*_*SFT 10

如果您使用的是反射提供程序,并且您的类不遵循关键属性的约定,那么您必须使用DataServiceKey属性.如果您只是向DataService提供类定义和上下文类,那么您将获得Reflection提供程序.因此,如果您未实现IDataServiceMetadataProvider,则很可能使用反射提供程序.可以在没有类的属性的情况下使用反射提供程序,但随后WCF数据服务应用启发式来确定关键属性.它是这样的:

  • 如果有问题的类具有名为ID的属性,则它是具有ID作为唯一关键属性的实体.
  • 如果类被调用例如Customer并且它具有一个名为CustomerID的属性,那么它是一个具有CustomerID属性作为唯一键属性的实体(类的名称显然就像样本一样).

没有DataServiceKey属性,没有其他属性被识别为关键属性.例如,在此博客中也对此进行了描述:http://blogs.msdn.com/b/alexj/archive/2010/06/11/tip-56-writing-an-odata-service-using-the-reflection- provider.aspx

可以使用具有任意键属性的100%POCO类,但是您必须实现自定义提供程序.这是相当多的工作,因为您必须以编程方式定义类的形状.可以在此处找到示例自定义提供程序演练:http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx