0 votes

Impossible d'insérer des données dans une table avec une relation (entity framework)

Je travaille avec Entity Framework et j'ai un problème :

Lorsque j'essaie d'insérer des données dans une table, il me dit qu'il y a violation de l'intégrité de la référence, mais l'autre table est normalement remplie et contient la valeur que j'essaie d'insérer.

Pedido pedido = new Pedido();
pedido.Data = DateTime.Now;

db.AddToPedido(pedido);
db.SaveChanges();

EntityKey chave = db.CreateEntityKey("Pedido", pedido);
Itens_Pedido item = new Itens_Pedido();

item.Pedido_Id = Convert.ToInt32(chave.EntityKeyValues.First().Value);
item.Carta_Id = Convert.ToInt32(Request.QueryString["Id"].ToString());                    
item.Quantidade = 1;
item.Foil = "N";

db.AddToItens_Pedido(item);
db.SaveChanges();

1voto

Alex James Points 15939

Je pense savoir ce qui se passe.

Si vous avez un lien d'identification entre Pedido et Iten_Pedido

c'est-à-dire la clé primaire de Iten_Pedido est un composé et se compose de deux champs dont l'un est un FK en retour à Pedido (ce serait le Pedido_Id ) dans votre cas, malheureusement vous ne pouvez pas construire cette relation en utilisant la fonction Pedido_Id vous devez utiliser la propriété Pedido à la place de la propriété de navigation.

Si vous avez le Pedido déjà dans le contexte, tout ce que vous avez à faire, c'est d'établir les relations normalement. Si ce n'est pas le cas, ce que je soupçonne, et que tout ce que vous savez, c'est la clé, vous avez deux options : 1) L'interroger 2) Fabriquer une entité de substitution et l'attacher (c'est similaire à une requête en ce sens que cela place l'entité dans l'ObjectContext dans l'état inchangé).

Les modèles sont donc les suivants

//assuming the key of the Pedido is Id change as appropriate
Pedido pedido = ctx.Pedido.First( p => p.Id == XXX); 
item.Pedido = pedido;
...
ctx.AddToItens_Pedido(item);
ctx.SaveChanges();

ou

Pedido pedido = new Pedido {Id = XXX};
ctx.AttachTo("Pedido", pedido);
item.Pedido = pedido;
...
ctx.AddToItens_Pedido(item);
ctx.SaveChanges();

Voir ma série de conseils pour plus d'informations, notamment Conseil 9

J'espère que cela vous aidera

Alex

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X