2009-05-28 48 views
0

我與實體框架的工作,我有一個問題,在表中的數據:無法插入與關係(實體框架)

當我嘗試它告訴我,表中插入一些數據它違反了引用的完整性,但其他表通常是填充的,並且具有我試圖插入的值。

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 2009-05-28 17:42:07

回答

1

我想我知道發生了什麼事情。

如果有PedidoIten_Pedido

之間的識別關係即Iten_Pedido主鍵是這樣的化合物和由兩個字段其中之一是一個FK回Pedido的(這將是Pedido_Id)在您的情況,不幸的是,您不能使用Pedido_Id屬性來建立該關係,您必須改用Pedido導航屬性。

如果您的Pedido已經在上下文中,您所需要做的就是按正常方式構建關係。但是,如果它不是整數,我懷疑,並且你知道的只是關鍵,那麼你有兩個選擇: 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(); 

更多信息請參見my tips series,特別是tip 9

希望這有助於

亞歷

+0

@Alex你可以看看這個http://stackoverflow.com/questions/1158795/ – 2009-07-21 12:29:31