无法在关系表中插入数据(实体框架)

时间:2009-05-28 17:38:36

标签: .net 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();

1 个答案:

答案 0 :(得分: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

希望这有帮助

亚历