EF Core - обновление сущности со ссылкой на себя пытается ее удалить? - PullRequest
0 голосов
/ 28 сентября 2018

В проекте, над которым я работаю, у нас есть класс Person, который имеет два свойства, которые ссылаются на Person: CreatedById и UpdatedById.Когда я пытаюсь обновить человека с CreatedById или UpdatedById, равным Id -property, я получаю следующее исключение:

SqlException: оператор DELETE конфликтует с SAME TABLEСсылочное ограничение "FK_Persons_Persons_CreatedById"

Наш класс person выглядит примерно так:

public class Person {
    [Key]
    public Guid Id { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }

    public DateTimeOffset CreatedDate { get; set; }
    public Guid CreatedById { get; set; }
    [ForeignKey(nameof(CreatedById))]
    public virtual Person CreatedBy { get; set; }

    public DateTimeOffset UpdatedDate { get; set; }
    public Guid UpdatedById { get; set; }
    [ForeignKey(nameof(UpdatedById))]
    public virtual Person UpdatedBy { get; set; }
}

Мы также настраиваем Person, используя свободный API, например:

protected override void OnModelCreating(ModelBuilder builder) {
    builder.Entity<Person>(e =>
    {
        e.HasOne(p => p.CreatedBy);
        e.HasOne(p => p.UpdatedBy);
    });
}

Обновление человека работает во всех случаях, кроме упомянутого выше.Когда я проверяю SQL, который генерирует EF, он пытается удалить человека, которого я пытаюсь обновить:

SET NOCOUNT ON
DELETE FROM [Persons]
WHERE [Id] = '{guid}' 

Кто-нибудь знает, почему это происходит?Чего мне не хватает?

ОБНОВЛЕНИЕ

Я помещаю часы в объект, который пытаюсь обновить через трекер изменений.До тех пор, пока не будет вызвано * 1030, оно имеет состояние Modified.Относительно того, почему EF пытается удалить человека, когда вызывается SaveChanges, я до сих пор понятия не имею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...