2011-01-07 4 views
7

Ich verwende einen WCF DataService und möchte POCOs verwenden. Ich muss einen DataServiceKey angeben, damit er funktioniert (offensichtlich). Wenn ich das mache, muss ich System.Data.Services.Client verweisen (für System.Data.Services.Common) - die nicht sehr POCO fühlt.WCF DataService, wie vermeide ich [DataServiceKey] in POCOs

Gibt es eine Möglichkeit, meine Objekte sauber zu halten und den Schlüssel woanders anzugeben?

+0

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 .... –

+0

Ich bin nicht so sehr ein Purist, also wenn es da ist ist keine Alternative ich werde es verwenden, will nur sicherstellen, –

Antwort

10

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

+0

excelent, das war, was ich gesucht habe. Vielen Dank! –

Verwandte Themen