Je suis en train de faire un linq 2 sql simple-à-plusieurs, insérer des données, opération.Problème avec Linq2Sql relation plusieurs-à-plusieurs et insertion de nouveaux objets
est ici le modèle de stock Northwind représentant un nombre à plusieurs:
alt text http://www.iaingalloway.com/images/linq-detail.jpg
Maintenant, ce que je suis en train de faire est d'insérer un nouvel ordre et si le produit n'existe pas, insérer ce à en même temps, dans la même transaction. L'erreur que je reçois est:
System.Data.Linq.DuplicateKeyException: Cannot add an entity with a
key that is already in use.
Alors ceci est mon (pseduo) Code:
using (SqlContext db = new SqlContext())
{
// Get existing or create a new instance.
Order newOrder = GetOrder(order.Id) ?? new Order();
// Left to right stuff.
newOrder.Foo = order.Foo;
// Now associate this new order to a product (which might not exist).
if (!order.ProductList.IsNullOrEmpty())
{
// We have some products...
IList<Order_Detail> orderDetailList = new List<Order_Detail>();
foreach(Models.Product product in order.ProductList)
{
// Associate each product to the a new order_detail.
orderDetailList.Add(new Order_Detail
{
Product = new SqlContext.Product
{
Foo = product.Foo
}
});
}
// Now associate all the order_details to this order.
newOrder.Order_Details.AddRange(orderDetailList);
if (newOrder.Id <= 0)
db.InsertOnSubmit(newOrder);
db.SubmitChanges(); // <-- exception throw here.
}
}
Je suppose que je dois enregistrer les produits d'abord avant que j'essayer de sauver l'ordre? Je suis tellement confus :(
Merci pour les liens. Vous avez absolument raison de dire que M-M n'a pas de support (natif) dans LINQ2SQL et qu'un pont 1-M: M-1 est la méthode normale. Pas tout à fait sûr qu'il y avait des votes négatifs. –