Salve amici,
vi scrivo perchè sono ormai un paio di giorni che ho problemi nell'uso degli ADO.NET DataService, e più nello specifico ho problemi nel settare le relazioni tra entità.
Vi posto il codice :
try{ ProvaServiceReference.Prova_dsEntities dc = new Console.ProvaServiceReference.Prova_dsEntities(new Uri("http://localhost:62352/WebSite/Prova_dsService.svc/")); ProvaServiceReference.PercorsoPrincipale p = ProvaServiceReference.PercorsoPrincipale.CreatePercorsoPrincipale(default(int)); p.Nome = "Percorso di prova1"; dc.AddToPercorsiPrincipali(p); for (int i = 1; i < 4; i++) { ProvaServiceReference.Tratta t = ProvaServiceReference.Tratta.CreateTratta(default(int)); t.Nome = "Tratta di prova" + i.ToString(); dc.AddToTratte(t); dc.AddLink(p, "TrattePercorso", t);} dc.SaveChanges(SaveChangesOptions.Batch); } catch (Exception ex) { }
try{
ProvaServiceReference.Prova_dsEntities dc = new Console.ProvaServiceReference.Prova_dsEntities(new Uri("http://localhost:62352/WebSite/Prova_dsService.svc/"));
ProvaServiceReference.PercorsoPrincipale p = ProvaServiceReference.PercorsoPrincipale.CreatePercorsoPrincipale(default(int));
p.Nome = "Percorso di prova1";
dc.AddToPercorsiPrincipali(p);
for (int i = 1; i < 4; i++) {
ProvaServiceReference.Tratta t = ProvaServiceReference.Tratta.CreateTratta(default(int));
t.Nome = "Tratta di prova" + i.ToString();
dc.AddToTratte(t);
dc.AddLink(p, "TrattePercorso", t);}
dc.SaveChanges(SaveChangesOptions.Batch); }
catch (Exception ex) { }
La chiamata a SaveChanges produce la seguente eccezione:
MESSAGE: "Errore durante l'elaborazione della richiesta."
INNEREXCEPTION : "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\r\n<error xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">\r\n <code></code>\r\n <message xml:lang=\"it-IT\">Errore durante l'elaborazione della richiesta.</message>\r\n</error>\r\n"
Da notare che se non utilizzo addLink per settare le relazioni, SaveChanges persiste le nuove entità create su db (ovviamente senza però le relazioni!)
Spero nel vostro aiuto!
Ok, svelato l'arcano!!
In pratica il codice è giusto, quello che non andava bene era l'EntityModel (Prova_dsEntities) creato a partire dal db. Infatti Entity Framework, tramite il suo wizard, mappa le tabelle senza PrimaryKey come entità in sola lettura, e indovinate un pò com'era la mia tabella associativa sul db?!?
Quindi ho reso le due chiavi esterne della tabella associativa chiave primaria, aggiornato l'edmx e tutto funziona perfettamente!!
Beh, meglio tardi che mai... Grazie a chiunque si fosse interessato!
Enso
Associazione Culturale DotNetCampania - C.F.: 95127870632