【问题标题】:WCF DataService, how do I avoid [DataServiceKey] in POCOsWCF DataService,如何避免 POCO 中的 [DataServiceKey]
【发布时间】:2011-06-05 07:51:22
【问题描述】:

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

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

【问题讨论】:

  • 不,我不知道任何其他方式。因此,要么您需要接受 POCO 类上的单个属性才能使用这些强大的功能 - 或者干脆不使用 WCF 数据服务....
  • 我不是一个纯粹主义者,所以如果没有其他选择我会使用它,只是想确保

标签: wcf poco odata dataservice


【解决方案1】:

如果您使用反射提供程序并且您的类不遵循关键属性的约定,那么您必须使用 DataServiceKey 属性。 如果您只是向 DataService 提供类定义和上下文类,那么反射提供者就是您所获得的。因此,如果您不实现 IDataServiceMetadataProvider,那么您很可能会使用反射提供程序。 可以在没有类属性的情况下使用反射提供程序,但是 WCF 数据服务会应用启发式方法来找出关键属性。它是这样的:

  • 如果有问题的类有 名为 ID 的属性,它是一个实体 以 ID 作为唯一的关​​键属性。
  • 如果类被调用,例如 客户,它有一个名为 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

【讨论】:

  • 非常好,这正是我想要的。谢谢!
猜你喜欢
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多