Невозможно вставить объект с нулевым внешним ключом - PullRequest
0 голосов
/ 18 февраля 2019

Идея: ключевой объект, который может быть заменен другим ключом, если в этом случае они получают FK, указывающие друг на друга.

public class Key {
    string Id;
    string ReplacesId;
    Key Replaces;
    string ReplacedById;
    Key ReplacedBy;
}

Текущее отображение

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);

Проблема:При попытке сохранить сущность происходит сбой с ошибкой дублирования внешнего ключа (которая равна нулю) следующим образом:

System.Data.SqlClient.SqlException: Невозможно вставить строку дублирующегося ключа в объект 'dbo.Keys'с уникальным индексом 'IX_Keys_ReplacedById'.Дубликат значения ключа ().Заявление было прекращено.

1 Ответ

0 голосов
/ 18 февраля 2019

Решено с помощью уникальных индексов:

modelBuilder.Entity<Key>()
    .HasIndex(x => x.ReplacedById)
    .IsUnique(false)
    .HasFilter(null);

modelBuilder.Entity<Key>()
    .HasIndex(x => x.ReplacesId)
    .IsUnique(false)
    .HasFilter(null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...