7

我使用 WCF DataService 并想使用 POCO。我必须指定一个 DataServiceKey 才能使其工作(显然)。当我这样做时,我必须参考 System.Data.Services.Client(用于 System.Data.Services.Common)——这感觉不是很 POCO。

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

4

1 回答 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-提供者.aspx

可以使用具有任意键属性的 100% POCO 类,但是您必须实现自定义提供程序。这是相当多的工作,因为您必须以编程方式定义类的形状。可以在此处找到示例自定义提供程序演练:http: //blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx

于 2011-01-10T23:48:35.807 回答