我使用WCF DataService并想要使用POCO。为了让它正常工作,我必须指定DataServiceKey(显然)。当我这样做时,我必须引用System.Data.Services.Client(针对System.Data.Services.Common)- 这不太符合POCO的特点。有没有办法保持我的对象干净,并在其他地方指定Key?
如果您正在使用反射提供程序并且您的类没有遵循关键属性的约定,则必须使用DataServiceKey属性。 反射提供程序是当您仅向DataService提供类定义和上下文类时获取的提供程序。因此,如果未实现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