2009-05-28 2 views
0

je travaille avec Entity Framework et je vais avoir un problème:Impossible d'insérer des données dans le tableau avec la relation (Entity Framework)

Lorsque je tente d'insérer des données dans une table, il me dit que cela viole l'intégrité de la référence, mais l'autre table est normalement remplie et a 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(); 
+0

Quelle erreur voyez-vous? – Perpetualcoder

Répondre

1

Je pense que je sais ce qui se passe.

Si vous avez une relation d'identification entre Pedido et Iten_Pedido

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

Si vous avez déjà le Pedido dans le contexte, tout ce que vous avez à faire est de construire les relations normalement. Si toutefois ce n'est pas dans le contexte, ce que je soupçonne, et tout ce que vous savez est la clé, alors vous avez deux options: 1) Demander 2) Fabriquer une entité stand-in et l'attacher (c'est similaire à une requête en ce qu'il place l'entité dans ObjectContext dans l'état inchangé).

Ainsi, les motifs sont soit:

//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 my tips series Pour plus d'informations, notamment tip 9

Hope this helps

Alex

+0

@Alex pouvez-vous s'il vous plaît regarder cela http://stackoverflow.com/questions/1158795/ –

Questions connexes