Je cela me deviens fou,LINQ to SQL SubmitChanges() insère deux lignes de base de données et un enfant Row
Je joins une liste avec 1 client et 1 Adresse ligne d'enregistrement des enfants. Tout semble OK pendant le débogage. 1 ligne de client et 1 ligne d'adresse doivent être insérées. Mais à la place, je reçois 2 enregistrements client et 1 ligne d'adresse.
Je ne sais pas pourquoi. Lors de l'attachement et de la mise en boucle dans la liste, seulement 1 enregistrement vu.
Tous les points?
[edited]
codeCi-joint:
public bool InsertUpdateCustomers(List<Customer> customerList, List<Customer> originalCustomers)
{
using (DbContext db = new DbContext(DbContext.ConnectionString))
{
db.Log = Console.Out;
List<Customer> customerCloned = new List<Customer>();
customerList.ForEach(p => customerCloned.Add(p.CloneObjectGraph()));
customerCloned.ForEach(p => p.Address =
customerList.Where(pe => pe.Id == p.Id).Single().Address.CloneObjectGraph());
customerCloned.ForEach(p =>
{
if (p.Id > 0)
{
db.Customer.Attach(p,
originalCustomers.Single(
x => x.Id == p.Id));
db.Address.Attach(p.Address,
originalCustomers.Single(
x => p.AddressId== x.AddressId).
Address);
}
});
customerCloned.ForEach(p =>
{
if (p.Id == 0)
db.Customer.InsertOnSubmit(p);
});
try
{
db.SubmitChanges(ConflictMode.ContinueOnConflict);
return true;
}
catch (Exception ex)
{
return false;
}
}
}
J'ai vérifié le journal de la sortie et je vois en effet 2 insertions dans la table. Je ne vois rien sur l'adresse, mais insère correctement.
Il pourrait être le problème clé étrangère que je ne comprends pas.
Fixer un exemple de code bro. – hydrogen
1 minute s'il vous plaît. – AlwaysBeCoding
ce qui est originalClients ???? – DEVMBM