Idée: entité clé pouvant être remplacée par une autre clé, si cela se produit, leurs FK se désignent.
public class Key {
string Id;
string ReplacesId;
Key Replaces;
string ReplacedById;
Key ReplacedBy;
}
Cartographie courante
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);
Problème: En essayant de sauvegarder une entité, il échoue avec une erreur de clé étrangère en double (qui est null) comme suit:
System.Data.SqlClient.SqlException: impossible d'insérer une ligne de clé en double dans l'objet 'dbo.Keys' avec l'index unique 'IX_Keys_ReplacedById'. La valeur de la clé en double est (). La déclaration a été terminée.
Résolu en faisant des index non uniques:
modelBuilder.Entity<Key>()
.HasIndex(x => x.ReplacedById)
.IsUnique(false)
.HasFilter(null);
modelBuilder.Entity<Key>()
.HasIndex(x => x.ReplacesId)
.IsUnique(false)
.HasFilter(null);