【发布时间】:2019-07-24 00:38:50
【问题描述】:
我遇到了一个奇怪的情况:
public Class A
{
public int Id { get; set; }
}
public class B
{
public int Id { get; set; }
[ForeignKey("A1")]
public virtual int A_Id { get; set; }
public virtual A A1 { get; set; }
}
当我通过修改 A1 更新 B 类型的实体时,A1.Id 被更新为新的实体 ID,但 B.A_Id 仍然分配给旧 ID。这会导致实体框架抛出错误。
我已经读过,通过将两个属性都标记为虚拟,EF 更改跟踪器会自动检测更改并更新相关的外键,但这不会发生在我身上。我还能检查什么?
【问题讨论】:
-
this question 可能会有所帮助。
-
您需要 A_Id 属性吗?我认为您可以将其删除,并将属性保持在 A1 以上,它可能会按您的预期工作?
-
是的,在某些情况下我确实需要它。
-
使用的上下文是如何配置的?如果 AutoDetectChanges 被禁用,您需要自己保持 FK 和导航属性的 PK 同步。
-
据我所知,AutoDetectChanges 没有被禁用
标签: c# sql-server asp.net-mvc entity-framework