C# EF Core-使用对自身的引用更新实体时是否尝试删除它?

C# EF Core-使用对自身的引用更新实体时是否尝试删除它?,c#,entity-framework-core,C#,Entity Framework Core,在我正在处理的一个项目中,我们有一个类Person,它有两个属性,它们是对Person的引用:CreatedById和UpdatedById。当我尝试更新一个CreatedById或UpdatedById等于personsId-属性的person时,我得到以下异常: SqlException:DELETE语句与同一个表冲突 引用约束“FK_Persons_Persons_CreatedById” 我们的person类如下所示: 公共类人物{ [关键] 公共Guid Id{get;set;} 公共

在我正在处理的一个项目中,我们有一个类
Person
,它有两个属性,它们是对
Person
的引用:
CreatedById
UpdatedById
。当我尝试更新一个
CreatedById
UpdatedById
等于persons
Id
-属性的person时,我得到以下异常:

SqlException:DELETE语句与同一个表冲突 引用约束“FK_Persons_Persons_CreatedById”

我们的person类如下所示:

公共类人物{
[关键]
公共Guid Id{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串电子邮件{get;set;}
公共字符串PhoneNumber{get;set;}
公共日期时间偏移量CreatedDate{get;set;}
公共Guid CreatedById{get;set;}
[ForeignKey(nameof(CreatedById))]
通过{get;set;}创建的公共虚拟人
公共DateTimeOffset UpdateDate{get;set;}
公共Guid UpdatedById{get;set;}
[ForeignKey(name of(UpdatedById))]
公共虚拟人由{get;set;}更新
}
我们还使用fluent API配置
Person
,如下所示:

模型创建时受保护的覆盖无效(ModelBuilder){
builder.Entity(e=>
{
e、 HasOne(p=>p.CreatedBy);
e、 HasOne(p=>p.UpdatedBy);
});
}
除上述情况外,更新人员在所有情况下都有效。当我检查EF生成的SQL时,它会尝试删除我尝试更新的人:

将NOCOUNT设置为ON
从[人]中删除
其中[Id]='{guid}'
有人知道为什么会这样吗?我错过了什么

更新


我在试图通过更改跟踪器更新的实体上放置了一块手表。在调用
context.SaveChanges()
之前,它的状态为
Modified
。至于为什么EF在调用
SaveChanges
时试图删除此人,我仍然不知道。

只是一个猜测。。。您是否尝试过使用virtual:
公共虚拟人CreatedBy{…}
等?是否存在被删除的人引用CreatedById或UpdatedById主键的记录?您希望删除在另一个实体中引用的实体,但您的更新和删除不级联,因此,您应该先删除子实体,然后才能删除父实体。或者可以使用递归delete@PeterB我们使用的是virtual,我只是在“简化”person类时忘了包含它。现在更新@我不是想删除一个人,我是想更新它。当我用
Id
等于
CreatedById
UpdatedById
的身份更新一个人时,EF会生成此删除。您到底提出了哪个请求?