2009-05-28 3 views
0

ich mit dem Entity Framework bin arbeiten, und ich habe ein Problem:Kann nicht mit Beziehung (Entity Framework) Daten in Tabelle einfügen

Wenn ich versuche, einige Daten in einer Tabelle einfügen es mir sagt, dass Es verletzt die Integrität der Referenz, aber die andere Tabelle ist normalerweise gefüllt und hat den Wert, den ich einfügen möchte.

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

Welchen Fehler sehen Sie? – Perpetualcoder

Antwort

1

Ich denke, ich weiß, was los ist.

Wenn Sie eine identifizierende Beziehung zwischen Pedido haben und Iten_Pedido

dh der Primärschlüssel Iten_Pedido eine Verbindung ist, und aus zwei Feldern, von denen ein FK zurück zu Pedido (das wäre die Pedido_Id) in Ihr Fall, leider können Sie diese Beziehung nicht unter Verwendung der Pedido_Id Eigenschaft erstellen, die Sie stattdessen die Pedido Navigationseigenschaft verwenden müssen.

Wenn Sie die Pedido bereits im Kontext haben, alles was Sie tun müssen, ist die Beziehungen als normal aufzubauen. Wenn es jedoch nicht im Kontext ist, den ich vermute, und alles, was Sie wissen, ist der Schlüssel, dann haben Sie zwei Möglichkeiten: 1) Abfrage für sie 2) Fabrizieren Sie ein Stand-in-Entity und fügen Sie es (das ist ähnlich zu einer Abfrage, in der es die Entität in den ObjectContext im unveränderten Zustand versetzt).

So die Muster sind entweder:

//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(); 

oder

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

Siehe my tips series für weitere Informationen, insbesondere tip 9

this helps

Alex

+0

@Alex können Sie bitte auf diese http://stackoverflow.com/questions/1158795/ –

Verwandte Themen