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

时间:2011-01-07 14:45:07

标签: wcf poco odata dataservice

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

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

1 个答案:

答案 0 :(得分:10)

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

  • 如果有问题的班级有 属性称为ID,它是一个实体 将ID作为唯一的关​​键属性。
  • 如果要调用类,例如 客户和它有一个叫做的财产 CustomerID,它是一个实体 CustomerID属性作为唯一的关​​键 property(类的名称是 显然就像样品一样。)

没有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