Sembra che dovrebbe essere abbastanza ovvio, ma qualcosa riguardo al framework delle entità mi confonde e non riesco a farlo funzionare.Come si inseriscono o si aggiornano molte tabelle in .net Entità
Molto semplicemente, ho tre tabelle in cui i valori ID sono colonne di identità: utenti (userid, username) Categorie (IDCategoria, categoryName) JoinTable (UserId, CategoryId) composito.
Nella finestra di progettazione delle entità (questo è .net 4.0), quando si importano queste tabelle, come previsto, la tabella di join non viene visualizzata, ma Utenti e Categorie mostrano una relazione. Il seguente codice:
var _context = new MyContext();
var myUser = new User();
myUser.UserName = "joe";
var myCategory = new Category();
myCategory.CategoryName = "friends";
_context.Users.AddObject(myUser);
myUser.Categories.Add(myCategory);
var saved = _context.SaveChanges();
restituisce un errore di (anche se nulla è stato aggiunto al database):
An item with the same key has already been added.
Se aggiungo quanto segue prima di salvare:
_context.Categories.AddObject(myCategory);
myCategory.Users.Add(myUser);
ho la stesso errore e nulla salvato nel db. Se risparmio il myUser e l'oggetto MyCategory prima di cercare di associarli, entrambi salvano, ma il secondo salvataggio getta un errore, senza nulla aggiungere alla tabella di unirsi:
Cannot insert the value NULL into column 'UserId', table '...dbo.JoinTable'; column does not allow nulls. INSERT fails. The statement has been terminated.
sto chiaramente non riuscendo a capire quanti a molte relazioni sono inserite. Cosa mi manca?
Qual è il tipo di proprietà ID? –
int, identità –
Ancora cercando di capirlo. Aggiungendo un terzo campo spurio alla tabella di join (DateCreated), posso forzare il progettista di entità a visualizzare la tabella di join. Posso quindi definire le relazioni: var myJoin = new JoinTable {UserId = myUser.UserId, CategoryId = myCategory.CategoryId}; E, quindi, il seguente verrà inserito correttamente quando salvato: _context.Categories.AddObject (myCategory); myCategory.JoinTables.Add (myJoin); myJoin.User = myUser; –