我使用 WCF DataService 并想使用 POCO。我必须指定一个 DataServiceKey 才能使其工作(显然)。当我这样做时,我必须参考 System.Data.Services.Client(用于 System.Data.Services.Common)——这感觉不是很 POCO。
有没有办法让我的对象保持清洁并在其他地方指定密钥?
我使用 WCF DataService 并想使用 POCO。我必须指定一个 DataServiceKey 才能使其工作(显然)。当我这样做时,我必须参考 System.Data.Services.Client(用于 System.Data.Services.Common)——这感觉不是很 POCO。
有没有办法让我的对象保持清洁并在其他地方指定密钥?
如果您使用反射提供程序并且您的类不遵循关键属性的约定,那么您必须使用 DataServiceKey 属性。如果您只是向 DataService 提供类定义和上下文类,那么您将获得反射提供者。因此,如果您不实现 IDataServiceMetadataProvider,那么您很可能会使用反射提供程序。可以在没有类属性的情况下使用反射提供程序,但是 WCF 数据服务会应用启发式方法来找出关键属性。它是这样的:
如果没有 DataServiceKey 属性,则不会将其他属性识别为关键属性。例如,此博客中也对此进行了描述:http: //blogs.msdn.com/b/alexj/archive/2010/06/11/tip-56-writing-an-odata-service-using-the-reflection-提供者.aspx
可以使用具有任意键属性的 100% POCO 类,但是您必须实现自定义提供程序。这是相当多的工作,因为您必须以编程方式定义类的形状。可以在此处找到示例自定义提供程序演练:http: //blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx