Cela semble être assez évident, mais quelque chose dans le framework d'entité me trouble et je n'arrive pas à le faire fonctionner.Comment insérer ou mettre à jour de nombreuses tables dans un framework d'infrastructure .net
Tout simplement, j'ai trois tables où les valeurs d'identification sont des colonnes d'identité: utilisateurs (nom d'utilisateur), userId Catégories (CategoryId, categoryName) joinTable (UserId, CategoryId) composite.
Dans le concepteur d'entités (c'est .net 4.0), lorsque j'importe ces tables, comme prévu, la table de jointure n'apparaît pas mais les utilisateurs et les catégories affichent une relation. Le code suivant:
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();
Renvoie une erreur de (bien que rien n'a été ajouté à la base de données):
An item with the same key has already been added.
Si j'ajoute les éléments suivants avant d'enregistrer:
_context.Categories.AddObject(myCategory);
myCategory.Users.Add(myUser);
Je reçois la même erreur et rien enregistré dans la base de données. Si je sauve le myUser et l'objet myCategory avant d'essayer de les associer, ils ont tous deux sauver, mais le second sauvegarde jette une erreur, rien ajouté à la table de jointure:
Cannot insert the value NULL into column 'UserId', table '...dbo.JoinTable'; column does not allow nulls. INSERT fails. The statement has been terminated.
Je suis bien ne pas comprendre combien à beaucoup de relations sont insérées. Qu'est-ce que je rate?
Quel est le type de vos propriétés d'identité? –
int, identitity –
Toujours en train d'essayer de comprendre cela. En ajoutant un troisième champ erroné à la table de jointure (DateCreated), je peux forcer le concepteur d'entité à afficher la table de jointure. Je peux ensuite définir les relations: var myJoin = nouveau JoinTable {UserId = myUser.UserId, CategoryId = myCategory.CategoryId}; Ensuite, les éléments suivants seront insérés correctement lors de l'enregistrement: _context.Categories.AddObject (myCategory); myCategory.JoinTables.Add (myJoin); myJoin.User = myUser; –