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
fonte
2011-01-10 23:48:35
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 .... –
Non sono un purista, quindi se ci sono non è un'alternativa, la userò, voglio solo assicurarmi che l' –