Ich verwende Entity Framework als ORM in meinem Projekt. Nehmen wir an, ich benutze Code-First-Muster und ich habe zwei Modelle. WieEntity Framework und Duplikate
internal class First
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Name { get; set; }
}
internal class Second
{
public int Id { get; set; }
public First ForeignKeyEntity { get; set; }
// other members
}
Und hier Code Datenbank bevölkern:
List<Second> res = GetData();
using (var ctx = new StatisticContext())
{
foreach (var item in res)
{
ctx.Seconds.Add(item);
}
ctx.SaveChanges();
}
Wie Sie jede Instanz der Klasse sehen First
in ihrem Mitglied ForeignKeyEntity
Second
Instanz der Klasse hat. Offensichtlich können einige Instanzen von First
in res dupliziert werden. Und wenn ich diesen Code ausführen ich DbUpdateException in ctx.SaveChanges()
mit innerer Ausnahme erhalten, dass die folgenden Meldung hat:
Violation of PRIMARY KEY constraint 'PK_dbo.First'.
Cannot insert duplicate key in object 'dbo.First'.
The duplicate key value is (29459). The statement has been terminated.
Ich kann nicht duplizierten Zeilen einfügen, aber ich will nicht Duplikate einzufügen, würde Ich mag Zeile einfügen nur wenn es nicht existiert. Wie man dieses Problem löst? Wie fügt man ein Fremdschlüsselobjekt nur ein, wenn es nicht existiert?
Was ist die Beziehung 'First: Second'? – Sampath
@Sampath Jede Instanz von Second hat eine Instanz von First. Als Datenbank habe ich zwei Tabellen: Erste und Zweite. Und Second hat einen Fremdschlüssel für die ID in der Tabelle Erste – Pupkin
ist das bedeuten '1: 1'? – Sampath