Idee: Schlüsseleinheit, die durch einen anderen Schlüssel ersetzt werden kann. In diesem Fall weisen sie ihre FKs aufeinander zu.
public class Key {
string Id;
string ReplacesId;
Key Replaces;
string ReplacedById;
Key ReplacedBy;
}
Fließendes Mapping
modelBuilder.Entity<Key>().HasOne(k => k.Replaces)
.WithOne()
.HasForeignKey<Key>(k => k.ReplacesId)
.IsRequired(false);
modelBuilder.Entity<NagKey>().HasOne(k => k.ReplacedBy)
.WithOne()
.HasForeignKey<NagKey>(k => k.ReplacedById)
.IsRequired(false);
Problem: Beim Versuch, eine Entität zu speichern, schlägt der Fehler mit dem doppelten Fremdschlüsselfehler (der null ist) wie folgt fehl:
System.Data.SqlClient.SqlException: Es kann keine doppelte Schlüsselzeile im Objekt 'dbo.Keys' mit dem eindeutigen Index 'IX_Keys_ReplacedById' eingefügt werden. Der doppelte Schlüsselwert ist (). Die Anweisung wurde beendet.
Gelöst, indem Indizes nicht eindeutig sind:
modelBuilder.Entity<Key>()
.HasIndex(x => x.ReplacedById)
.IsUnique(false)
.HasFilter(null);
modelBuilder.Entity<Key>()
.HasIndex(x => x.ReplacesId)
.IsUnique(false)
.HasFilter(null);