我正在使用实体框架,我遇到了问题:
当我尝试在表中插入一些数据时,它告诉我它违反了引用的完整性,但另一个表通常是填充的并且具有我试图插入的值。
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 :(得分:1)
我想我知道发生了什么。
如果您在Pedido
和Iten_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
希望这有帮助
亚历