В проекте, над которым я работаю, у нас есть класс 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
, я до сих пор понятия не имею.