posts - 644, comments - 2003, trackbacks - 137

My Links

News

Raffaele Rialdi website

Su questo sito si trovano i miei articoli, esempi, snippet, tools, etc.

Archives

Post Categories

Image Galleries

Blogs

Links

RIA Services ed EF 4.1 code-first non si sposano bene

Il primo test che ho effettuato è già concluso miseramente.

Il modello di prova ha una serie di entities e ciascuna di queste ha i corrispettivi 'details' (Contact => ContactDetails, Document => DocumentDetails, etc.).

Ho scelto di avere una sola tabella Details per cui non posso avere la FK in Details che punta alla Contact e alla Document.

Creo quindi il DomainService in un progetto RIA, dopo aver cancellato il progetto Silverlight che è inutile per questo esempio:

[EnableClientAccess] public class TestService : DbDomainService<BizContext> { [System.ServiceModel.DomainServices.Server.Query(IsDefault = true)] public IQueryable<Contact> GetProducts() { return this.DbContext.Contacts; } ...

Configuro l'endpoint (nel mio caso oData ma potrebbe essere anche SOAP o Json):

<system.serviceModel> <domainServices> <endpoints> <add name="OData" type="System.ServiceModel.DomainServices.Hosting.ODataEndpointFactory, System.ServiceModel.DomainServices.Hosting.OData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </endpoints> </domainServices>

 

E purtroppo ottengo una YSOD con questo errore:

Unable to retrieve association information for association '….DataLayer.Contact_Details'. Only models that include foreign key information are supported

Un vecchio post conferma i sospetti, la FK è indispensabile.

A questo va aggiunto il noto problema delle relazioni molti a molti (http://forums.silverlight.net/p/90385/346173.aspx) (http://social.msdn.microsoft.com/Forums/is/adodotnetentityframework/thread/cc48da63-502d-4429-b90a-0c558b1b9c94) che addirittura è sfociato in un progetto di workaround su codeplex (http://m2m4ria.codeplex.com/).

I RIA services sono indubbiamente una manna per chi fa RAD e le più recenti aggiunte dell'endpoint JSon per supportare i client jQuery sono vere killer features.

Ma qui stiamo partendo dal presupposto che il Modello venga prima di tutto. Quindi:

  • per i più svariati motivi viene prima fatto il design delle entity
  • poi mappo le entity al database con la fluent-API della Code-first, e genero il DB di conseguenza
  • quindi voglio 'nascondere' tutto dietro un servizio in modo da poter presentare i dati con la fondamentale IQueryable e per client di tipo differente:
    • Silverlight via soap
    • jQuery via json
    • altri client via oData

In quest'ottica non posso stravolgere il modello solo perché RIA non capisce bene il mapping di EF 4.1 e quindi per certi scopi non sono la soluzione. Un vero peccato perché si perdono un certo numero di facilities che sarebbero realmente molto comode.

Altri esperimenti in vista …

Print | posted on venerdì 2 settembre 2011 17:54 |

Feedback

Gravatar

# re: RIA Services ed EF 4.1 code-first non si sposano bene

Ciao Dario, queste sono tutte cose che già faccio. OnModelCreating + fluent è un must per la code-first. Il problema non è tanto della tabella intermedia quanto al fatto che per evitare giri assurdi loro ti suggeriscono una entity intermedia che dal mio punto di vista è inaccettabile.
Se devo 'strapazzare' il model allora preferisco rifarmi il tracking a manina e fare tutto via WebApi (su cui ho già parlato parecchio in sessioni e blog) che ti da molto più controllo.
WebApi non fornisce tracking ma almeno puoi intervenire a qualsiasi livello e ti permette comunque di esporre qualsiasi formato (soap, json, odata e anche altro) anche come IQueryable.
RIA è bello ma mi sembra che stiano puntando troppo al RAD.
03/09/2011 01:20 | Raffaele Rialdi
Gravatar

# re: RIA Services ed EF 4.1 code-first non si sposano bene

Voglio chiarire cosa intendevo nel post. Se scegli l'approccio "code-first" significa che il tuo model non vuole compromessi. Diversamente se per te il model è sacrificabile in modo da avere meno rogne, allora tantovale che parti con il designer e vai con l'approccio RAD.
03/09/2011 01:48 | Raffaele Rialdi
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET