Idea: Entidad clave, que puede ser reemplazada por otra clave, si eso sucede, sus FK se apuntan entre sí.
public class Key {
string Id;
string ReplacesId;
Key Replaces;
string ReplacedById;
Key ReplacedBy;
}
Mapeo fluido
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);
Problema: al intentar guardar una entidad, falla con un error de clave foránea duplicada (que es nulo) de la siguiente manera:
System.Data.SqlClient.SqlException: No se puede insertar una fila de clave duplicada en el objeto 'dbo.Keys' con un índice único 'IX_Keys_ReplacedById'. El valor de la clave duplicada es (). La instrucción se ha terminado.
Resuelto haciendo índices no únicos:
modelBuilder.Entity<Key>()
.HasIndex(x => x.ReplacedById)
.IsUnique(false)
.HasFilter(null);
modelBuilder.Entity<Key>()
.HasIndex(x => x.ReplacesId)
.IsUnique(false)
.HasFilter(null);