76 messaggi dal 16 marzo 2011
Salve

ho riscontrato il seguente problema, ho un db modellato mediante EntityFramework nel quale inserisco dati su una tabella tramite l'istruzione AddObject dell'EntityContext.

this.context.AddObject("TabellaDesiderata", toInsert);

La tabella è relazionata con altre tabelle per cui inserisco prima nelle tabelle con cui ha relazione ed in fine nella tabella desiderata. A questo punto ottengo l'eccezione:

Violazione del vincolo di molteplicità. Il ruolo 'TabellaDesiderata' della relazione 'ConfigurationModel.FK_TabellaDesiderata_TabellaRelazionata' ha molteplicità 1 o 0..1.

La cosa strana è che se riavvio l'applicazione di Test da cui eseguo l'inserimento e provo ad effettuare di nuovo l'operazione, ovviamente non riesco ad inserire nelle tabelle relazionate perchè li contengono già dato l'inserimento tramite l'esecuzione precedente però riesco ad inserirli nella TabellaDesiderata. Sembra quasi che chiudendo la connessione precedente poi riesco ad inserire di nuovo.

Avete un idea del perchè e di come sia possibile risolvere il problema?

Grazie
89 messaggi dal 13 marzo 2010
Una domanda: esegui l'aggiornamento con una singola chiamata a SaveChanges()?
Oltre a questo: perchè usi la AddObject() invece di aggiungere la entity alla collection mappata sulla tabella "TabellaDesiderata"?
76 messaggi dal 16 marzo 2011
Il SaveChange viene richiamato ogni volta che effettuo un inserimento, e non uso l'altra istruzione perchè sono all'interno di una dll in cui si effettua l'inserimento in base al nome della tabella passata dall'esterno

Grazie
76 messaggi dal 16 marzo 2011
Ho trovato la soluzione, compongo prima l'oggetto TabellaRelazionata con gli attributi della Tabella desiderata e poi eseguo l'istruzione sulla tabella relazionata e funziona.

Grazie
89 messaggi dal 13 marzo 2010
Ottimo.

Essendo però un fanatico dello scambio culturale, vorrei chiederti: come mai chiami una SaveChanges() ogni volta che inserisci qualcosa?
Oltre ad essere molto inefficiente, ti devi preoccupare di eseguire gli inserimenti in base alle relazioni fra le entità.
Non ti converrebbe aggiungere al context tutto il grafo di tutti i tuoi oggetti e poi chiamare la SaveChanges()? Tra l'altro tutte le operazioni verrebbero eseguite in una transazione e in caso di errore non ti troveresti con un database non consistente.

Ciao
Federico

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.