Не удается получить идентификатор вставленного объекта для другой вставки с помощью LINQ.
У меня проблема с LINQ to SQL. Я вставляю новый DetailsComposantsMan в свою базу данных (он работает), и я хочу вставить новый DetailsRep, указывающий на мой вставленный идентификатор DetailsComposantsMan.
Эти функции работают правильно
- Функция InsertOnSubmit работает
- Функция SumbitChanges работает
Вот код вставки для DetailsComposantsMan
if (detailsComposantMan.Id == 0)
{
DetailsComposantsMan inserted = new DetailsComposantsMan();
inserted.Article_Id = detailsComposantMan.Article_Id;
inserted.BlocFonctionnel_Id = detailsComposantMan.BlocFonctionnel_Id;
inserted.CategorieComposant_Id = detailsComposantMan.CategorieComposant_Id;
inserted.DetailComposant = detailsComposantMan.DetailComposant;
inserted.Fabricant = detailsComposantMan.Fabricant;
inserted.IndicationSAV_Id = detailsComposantMan.IndicationSAV_Id;
inserted.IsMAJ = detailsComposantMan.IsMAJ;
inserted.IsActive = true;
inserted.NumPieceStuder = detailsComposantMan.NumPieceStuder;
inserted.PositionSchema = detailsComposantMan.PositionSchema;
db.DetailsComposantsMans.InsertOnSubmit(inserted);
}
// Autrement on tente de trouver le details a update
else
{
#region Update DetailsComposantsMan
DetailsComposantsMan updated = lst.Single(x => x.Id == detailsComposantMan.Id);
updated.Id = detailsComposantMan.Id;
updated.Article_Id = detailsComposantMan.Article_Id;
updated.BlocFonctionnel_Id = detailsComposantMan.BlocFonctionnel_Id;
updated.CategorieComposant_Id = detailsComposantMan.CategorieComposant_Id;
updated.DetailComposant = detailsComposantMan.DetailComposant;
updated.Fabricant = detailsComposantMan.Fabricant;
updated.IndicationSAV_Id = detailsComposantMan.IndicationSAV_Id;
updated.IsMAJ = detailsComposantMan.IsMAJ;
updated.IsActive = detailsComposantMan.IsActive;
updated.NumPieceStuder = detailsComposantMan.NumPieceStuder;
updated.PositionSchema = detailsComposantMan.PositionSchema;
#endregion
}
try
{
// Submit tout les changements
db.SubmitChanges();
}
catch (Exception E)
{
// Si erreur on la balance au try catch supérieur
throw E;
}
После вставки я создаю новый объект DetailsRep и поле DetailsComposantsMan_Id с 0.
dbConn.updateOrinsertDetailsComposantMan(newDetailsComposantsMan);
// Si c'est une mise à jour, créer une nouvelle DetailsRep
DetailsRep newDetailsRep = new DetailsRep();
newDetailsRep.Quantity = 1;
newDetailsRep.Rep_Id = sav.Id;
// PROBLEM HERE (ID = 0) !!!
newDetailsRep.DetailComposantMan_Id = newDetailsComposantsMan.Id;
Это внешний ключ, поэтому, если поле стоит 0, оно не работает. Может кто-нибудь мне помочь?