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.