2009-05-28 51 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