Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Collega a SQL ForeignKeyReferenceAlreadyHasValueException

OK, quindi stai ricevendo questo errore,

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

ForeignKeyReferenceAlreadyHasValueException

E il link dice questo a riguardo,

Rappresenta gli errori che si verificano quando si tenta di modificare una chiave esterna quando l'entità è già caricata.

Penso che quello che devi fare sia caricare l'ordine di cui stai parlando e avrà un elenco di OrderDetails associato ad esso. Se desideri rimuovere uno di questi riferimenti, devi rimuovere OrderDetail dall'elenco OrderDetails.

Penso che tu debba fare qualcosa del genere,

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

Provalo senza InsertOnSubmit, ma mantieni comunque SubmitChanges. Lo suggerisco perché stai già aggiungendo il record impostando questo,

order.OrderDetails.Add(orderDetail);

Quindi probabilmente non è necessario inserirlo di nuovo.