2011-01-07 9 views
7

Uso un WCF DataService e voglio utilizzare POCOs. Devo specificare un DataServiceKey affinché funzioni (ovviamente). Quando lo faccio devo fare riferimento a System.Data.Services.Client (per System.Data.Services.Common) - che non si sente molto POCO.WCF DataService, come evitare [DataServiceKey] in POCOs

C'è un modo per mantenere puliti gli oggetti e specificare la chiave da qualche altra parte?

+0

No, non conosco nessun altro modo. Quindi o dovrai accettare quel singolo attributo sulla tua classe POCO per utilizzare queste fantastiche funzioni - o semplicemente non usare i servizi dati WCF .... –

+0

Non sono un purista, quindi se ci sono non è un'alternativa, la userò, voglio solo assicurarmi che l' –

risposta

10

Se si utilizza un provider di riflessione e le classi non seguono una convenzione per le proprietà chiave, è necessario utilizzare l'attributo DataServiceKey. Il provider di riflessione è quello che si ottiene se si forniscono semplicemente definizioni di classe e classe di contesto al DataService. Pertanto, se non si implementa IDataServiceMetadataProvider, è molto probabile che si utilizzi un provider di riflessione. È possibile utilizzare il provider di riflessione senza gli attributi sulle classi, ma i Servizi dati WCF applicano un'euristica per determinare le proprietà della chiave. Va in questo modo:

  • se la classe in questione ha una proprietà chiamata ID, è un'entità con l'ID come l'unica proprietà chiave.
  • se la classe si chiama ad esempio clienti ed ha una proprietà chiamata CustomerID, si tratta di un soggetto con la proprietà CustomerID come l'unica chiave proprietà (il nome della classe è ovviamente solo come campione).

Nessun'altra proprietà viene riconosciuta come proprietà chiave senza l'attributo DataServiceKey. Questo è anche descritto per esempio in questo blog: http://blogs.msdn.com/b/alexj/archive/2010/06/11/tip-56-writing-an-odata-service-using-the-reflection-provider.aspx

È possibile utilizzare classi 100% POCO con proprietà di chiave arbitrarie, ma in tal caso si dovrebbe implementare un provider personalizzato. Questo è molto più lavoro dal momento che devi definire la forma delle tue classi in modo programmatico. Un esempio di procedura dettagliata del provider personalizzato è disponibile qui: http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx

+0

sia eccellente, questo era quello che stavo cercando. Grazie! –

Problemi correlati