Wenn Sie einen Reflection-Provider verwenden und Ihre Klassen keiner Konvention für Schlüsseleigenschaften folgen, müssen Sie das DataServiceKey-Attribut verwenden. Der Reflektionsanbieter wird erhalten, wenn Sie dem DataService einfach Klassendefinitionen und eine Kontextklasse bereitstellen. Wenn Sie IDataServiceMetadataProvider nicht implementieren, verwenden Sie sehr wahrscheinlich einen Reflection-Provider. Es ist möglich, den Reflection-Provider ohne die Attribute für Ihre Klassen zu verwenden, aber dann wendet WCF Data Services eine Heuristik an, um die Schlüsseleigenschaften herauszufinden. Es geht so:
- , wenn die Klasse in Frage eine Eigenschaft namens ID hat, es ist ein Unternehmen mit der ID als einziger Schlüsseleigenschaft.
- , wenn die Klasse zum Beispiel Kunde genannt wird, und es hat eine Eigenschaft namens CustomerID, es ist ein Unternehmen mit der CustomerID-Eigenschaft als einzigen Schlüssel Eigenschaft (der Name der Klasse ist offensichtlich nur als Beispiel).
Keine anderen Eigenschaften werden als Schlüsseleigenschaften ohne das DataServiceKey-Attribut erkannt. Dies wird auch beispielsweise in diesem Blog beschrieben: http://blogs.msdn.com/b/alexj/archive/2010/06/11/tip-56-writing-an-odata-service-using-the-reflection-provider.aspx
Es ist möglich, 100% POCO-Klassen mit beliebigen Schlüsseleigenschaften zu verwenden, aber dann müssten Sie einen benutzerdefinierten Anbieter implementieren. Dies ist wesentlich mehr Arbeit, da Sie die Form Ihrer Klassen programmatisch definieren müssen. Ein Beispiel für benutzerdefinierte Anbieter Walkthrough finden Sie hier: http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx
Nein, ich kenne keine andere Möglichkeit. Entweder müssen Sie dieses einzelne Attribut in Ihrer POCO-Klasse akzeptieren, um diese großartigen Funktionen nutzen zu können - oder einfach WCF Data Services nicht verwenden .... –
Ich bin nicht so sehr ein Purist, also wenn es da ist ist keine Alternative ich werde es verwenden, will nur sicherstellen, –