在我正在研究的项目中,我们有一个类Person
,该类具有两个引用CreatedById
的属性:UpdatedById
和CreatedById
。当我尝试更新具有UpdatedById
-属性的Id
或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; }
}
的人员时,出现以下异常:
SqlException:DELETE语句与SAME TABLE冲突 参考约束“ FK_Persons_Persons_CreatedById”
我们的人员类别如下:
Person
我们还使用流利的API配置protected override void OnModelCreating(ModelBuilder builder) {
builder.Entity<Person>(e =>
{
e.HasOne(p => p.CreatedBy);
e.HasOne(p => p.UpdatedBy);
});
}
,如下所示:
SET NOCOUNT ON
DELETE FROM [Persons]
WHERE [Id] = '{guid}'
在除上述情况外的所有情况下,更新人员均有效。当我检查EF生成的SQL时,它将尝试删除我要更新的人:
context.SaveChanges()
有人知道为什么会这样吗?我想念什么?
更新
我监视要通过变更跟踪器更新的实体。直到调用Modified
为止,它的状态为SaveChanges
。至于为什么在调用{{1}}时EF试图删除该人,我仍然不知道。