Если вы используете провайдер отражения и ваши классы не соблюдают соглашение по ключевым свойствам, тогда вы должны использовать атрибут DataServiceKey.
Поставщик отражений - это тот, который вы получаете, если просто предоставляете определения класса и класс контекста для DataService. Поэтому, если вы не реализуете IDataServiceMetadataProvider, вы, скорее всего, используете провайдера отражений.
Можно использовать поставщика отражения без атрибутов в ваших классах, но затем службы данных WCF применяют эвристику для определения ключевых свойств. Это выглядит так:
- если рассматриваемый класс имеет
свойство называется 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