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

7
我使用WCF DataService并想要使用POCO。为了让它正常工作,我必须指定DataServiceKey(显然)。当我这样做时,我必须引用System.Data.Services.Client(针对System.Data.Services.Common)- 这不太符合POCO的特点。有没有办法保持我的对象干净,并在其他地方指定Key?

不,我不知道其他的方法。所以,要么你需要接受在你的POCO类上使用单个属性来利用这些强大的功能 - 要么就不要使用WCF数据服务... - marc_s
我并不是那么纯粹主义者,所以如果没有其他选择,我会使用它,只是想确保。 - Christina Mayers
1个回答

10
如果您正在使用反射提供程序并且您的类没有遵循关键属性的约定,则必须使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接