Aknettel
NewSellerID ist das Ergebnis einer Suche auf tblSellers.Diese Tabellen (tblSellerListings und tblSellers) sind auch nicht" offiziell "mit einer Fremdschlüsselbeziehung verknüpft im Modell oder in der Datenbank, aber ich möchte, dass einige referenzielle Integrität für die Zukunft beibehalten wird.so bleibt mein Problem.Warum bekomme ich die Ausnahme ({"Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt."}) mit diesem Code , wenn ich nicht jede Wiederholung der foreach-Schleife mit einem neuen ObjectContext beginne und sie mit SaveChanges beende, was sich auf die Performance auswirkt.Könnte man mir auch erklären, warum ORCSolutionsDataService.tblSellerListings (Ein ADO.NET DataServices/WCF-Objekt) ist nicht IDisposable, wie LINQ to Entities ??Warum bekomme ich diese Ausnahme? {Ein Element mit demselben Schlüssel wurde bereits hinzugefügt. "})
=================== ===========================
// Add listings to previous seller
int NewSellerID = 0;
// Look up existing Seller key using SellerUniqueEBAYID
var qryCurrentSeller = from s in service.tblSellers
where s.SellerEBAYUserID == SellerUserID
select s;
foreach (var s in qryCurrentSeller)
NewSellerID = s.SellerID;
// Save the selected listings for this seller
foreach (DataGridViewRow dgr in dgvRows)
{
ORCSolutionsDataService.tblSellerListings NewSellerListing = new ORCSolutionsDataService.tblSellerListings();
NewSellerListing.ItemID = dgr.Cells["txtSellerItemID"].Value.ToString();
NewSellerListing.Title = dgr.Cells["txtSellerItemTitle"].Value.ToString();
NewSellerListing.CurrentPrice = Convert.ToDecimal(dgr.Cells["txtSellerItemPrice"].Value);
NewSellerListing.QuantitySold = Convert.ToInt32(dgr.Cells["txtSellerItemSold"].Value);
NewSellerListing.EndTime = Convert.ToDateTime(dgr.Cells["txtSellerItemEnds"].Value);
NewSellerListing.CategoryName = dgr.Cells["txtSellerItemCategory"].Value.ToString();
NewSellerListing.ExtendedPrice = Convert.ToDecimal(dgr.Cells["txtExtendedReceipts"].Value);
NewSellerListing.RetrievedDtime = Convert.ToDateTime(dtSellerDataRetrieved.ToString());
NewSellerListing.SellerID = NewSellerID;
service.AddTotblSellerListings(NewSellerListing);
}
service.SaveChanges();
}
catch (Exception ex) { MessageBox.Show ("Es konnte kein neuer Fall hinzugefügt werden. Ausnahme: "+ ex.Message);
}
Was ist der Primärschlüssel in NewSellerListing? BTW, du brauchst nicht wirklich die erste foreach-Schleife, um die sellerId zu bekommen, du kannst das direkt in deine Abfrage schreiben: NewSellerID = (von s in service.tblSellers wo s.SellerEBAYUserID == SellerUserID select s.SellerID) .First (); // Natürlich müssen Sie damit umgehen, wenn keine ID gefunden wird, aber dies spart Datenbankzeit. – xandy
Aus Neugier, warum machst du eine foreach var s in QryCurrentSeller und ständig den Wert NewSellerID neu zuweisen. NewSellerID wird immer nur die letzte Iteration der ersten foreach nehmen ??? –