sql >> Databasteknik >  >> RDS >> Sqlserver

Linq till SQL ForeignKeyReferenceAlreadyHasValueException

OK, så du får det här felet,

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

ForeignKeyReferenceAlreadyHasValueException

Och länken säger detta om det,

Representerar fel som uppstår när ett försök görs att ändra en främmande nyckel när enheten redan är laddad.

Jag tror att det du behöver göra är att ladda beställningen som du pratar om, och den kommer att ha en lista med OrderDetails associerad med den. Om du vill ta bort en av dessa referenser måste du ta bort OrderDetail från OrderDetails-listan.

Jag tror att du måste göra något liknande,

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

Prova utan InsertOnSubmit, men behåll fortfarande SubmitChanges. Jag föreslår det eftersom du redan lägger till posten genom att ställa in detta,

order.OrderDetails.Add(orderDetail);

Så du behöver förmodligen inte sätta in den igen.




  1. Mysql anpassad ordning efter och alfabetisk ordning efter:

  2. Lägg till begränsning för att göra kolumnen unik per grupp av rader

  3. Oracle:funktionsbaserad indexselektiv unikhet

  4. räkna datumskillnad i timmar med php och mysql