【问题标题】:Can't insert data in table with relationship (entity framework)无法在具有关系的表中插入数据(实体框架)
【发布时间】:2009-05-28 17:38:35
【问题描述】:

我正在使用实体框架,但遇到了问题:

当我尝试在表中插入一些数据时,它告诉我它违反了引用的完整性,但另一个表通常已填充并且具有我尝试插入的值。

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

【问题讨论】:

    标签: .net entity-framework


    【解决方案1】:

    我想我知道发生了什么。

    如果您在PedidoIten_Pedido 之间存在识别关系

    Iten_Pedido 的主键是一个复合词,由两个字段组成,其中一个是返回 Pedido 的 FK(即 Pedido_Id),不幸的是,您无法使用 @987654327 建立这种关系@ 属性,您必须改用 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

    希望对你有帮助

    亚历克斯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多