Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Linq to SQL ForeignKeyReferenceAlreadyHasValueException

OK, Sie erhalten also diesen Fehler,

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

ForeignKeyReferenceAlreadyHasValueException

Und der Link sagt dazu,

Stellt Fehler dar, die auftreten, wenn versucht wird, einen Fremdschlüssel zu ändern, wenn die Entität bereits geladen ist.

Ich denke, Sie müssen die Bestellung laden, von der Sie sprechen, und ihr wird eine Liste mit Bestelldetails zugeordnet. Wenn Sie eine dieser Referenzen entfernen möchten, müssen Sie OrderDetail aus der OrderDetails-Liste entfernen.

Ich denke, Sie müssen so etwas tun,

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

Versuchen Sie es ohne InsertOnSubmit, aber behalten Sie trotzdem die SubmitChanges bei. Ich schlage vor, weil Sie den Datensatz bereits hinzufügen, indem Sie dies festlegen,

order.OrderDetails.Add(orderDetail);

Sie müssen es also wahrscheinlich nicht erneut einfügen.