我使用WCF DataService并希望使用POCO。 我必须指定一个DataServiceKey才能使它工作(显然)。 当我这样做时,我必须引用System.Data.Services.Client(对于System.Data.Services.Common) - 它感觉不太POCO。
有没有办法保持我的对象干净并在其他地方指定密钥?
答案 0 :(得分:10)
如果您正在使用反射提供程序,并且您的类不遵循关键属性的约定,那么您必须使用DataServiceKey属性。 如果您只是向DataService提供类定义和上下文类,那么您将获得Reflection提供程序。因此,如果您未实现IDataServiceMetadataProvider,则很可能使用反射提供程序。 可以在没有类的属性的情况下使用反射提供程序,但随后WCF数据服务应用启发式来确定关键属性。它是这样的:
没有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