Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Linq to SQL ForeignKeyReferenceAlreadyHasValueException


OK, então você está recebendo este erro,

http://msdn.microsoft.com/en -us/library/system.data.linq.foreignkeyreferencealreadyhasvalueexception.aspx

ForeignKeyReferenceAlreadyHasValueException

E o link diz isso sobre isso,

Representa erros que ocorrem quando é feita uma tentativa de alterar uma chave estrangeira quando a entidade já está carregada.

Acho que o que você precisa fazer é carregar o pedido do qual está falando, e ele terá uma lista de detalhes do pedido associados a ele. Se você quiser remover uma dessas referências, precisará remover o OrderDetail da lista OrderDetails.

Eu acho que você precisa fazer algo assim,
using (DataClasses1DataContext context = new DataClasses1DataContext())
{
    Customer customer = context.Customers.Where(x => x.CustomerID == 1).Single();
    Order order = new Order();
    // set some order fields here
    customer.Orders.Add(order);

    OrderDetail orderDetail = new OrderDetail();
    order.OrderDetails.Add(orderDetail);

    orderDetail.Product = context.Products.Where(x => x.ProductID == 2).Single();
    orderDetail.ProductID = orderDetail.Product.ProductID;

    context.SubmitChanges();
}

Experimente sem InsertOnSubmit, mas ainda mantenha o SubmitChanges. Sugiro que, como você já está adicionando o registro definindo isso,
order.OrderDetails.Add(orderDetail);

Então você provavelmente não precisa inseri-lo novamente.