2009-05-28 5 views
0

私はEntity Frameworkをして働いていると私は問題を抱えている:関係(エンティティフレームワーク)を使用してテーブルにデータを挿入することはできません

私はそれがいることを私に語ったテーブル内のいくつかのデータを挿入しようとすると、それは参照整合性に違反していますが、他のテーブルには通常、データが挿入され、挿入しようとしている値があります。

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

どのようなエラーが表示されますか? – Perpetualcoder

答えて

1

私は何が起こっているのか知っていると思います。 Iten_Pedidoの主キーは、化合物であり、バックPedidoにFKそのうちの1つは二つのフィールドで構成された、すなわち、あなたがPedidoIten_Pedido

間の特定の関係を持っている場合

に(つまりはPedido_Idなります)場合によってはPedido_Idプロパティを使用してその関係を構築することはできませんが、代わりにPedidoナビゲーションプロパティを使用する必要があります。

すでにコンテキスト内にPedidoがある場合は、通常の方法で関係を構築するだけです。しかし、それが私が疑う文脈ではなく、あなたが知っていることが鍵であるならば、2つの選択肢があります: 1)それを照会 2)スタンドインエンティティを作成して添付しますエンティティをObjectContextの中に変更しない状態で置くという点でクエリに追加します)。

だからパターンはどちらかである:

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

または

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

は、特定のtip 9

希望で、より多くの情報のためmy tips seriesを参照してください。この役立ちます

アレックス

+0

@Alexあなたはこれを見てくださいhttp://stackoverflow.com/questions/1158795/ –