Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Linq à SQL ForeignKeyReferenceAlreadyHasValueException

OK, vous obtenez donc cette erreur,

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

ForeignKeyReferenceAlreadyHasValueException

Et le lien dit ceci à ce sujet,

Représente les erreurs qui se produisent lors d'une tentative de modification d'une clé étrangère alors que l'entité est déjà chargée.

Je pense que ce que vous devez faire est de charger la commande dont vous parlez, et une liste de détails de commande lui sera associée. Si vous souhaitez supprimer l'une de ces références, vous devez supprimer OrderDetail de la liste OrderDetails.

Je pense que vous devez faire quelque chose comme ça,

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

Essayez-le sans InsertOnSubmit, mais conservez toujours les SubmitChanges. Je suggère que parce que vous ajoutez déjà l'enregistrement en définissant ceci,

order.OrderDetails.Add(orderDetail);

Vous n'aurez donc probablement pas besoin de l'insérer à nouveau.