我最近在EF核心3.1.1中遇到一个奇怪的问题。我们正在尝试从EF6迁移到EF核心,拥有实体的行为与EF6中的复杂类型不同。当拥有实体由空对象初始化时,EF无法检测到更改。仅针对MSSQL,针对“内存”数据库,就出现了此问题。
server_name
在此示例中,上下文应检测到更改。 “在内存数据库中”可以正确检测到它,但是MS Sql提供程序无法检测到它。这很可能是由于缺少拥有类型的代理引起的。当拥有类型的所有属性均为默认属性且未初始化时,所拥有实体为null时,缺少代理。
能否请您给我一些提示,以正确设置它?我不想删除拥有实体的默认初始化,这将迫使我们检查所有实体是否为null。
整个项目都在github
上答案 0 :(得分:0)
我相信您必须为Equals
实现方法TestOwnedEntity
,例如:
public override bool Equals(object obj)
{
var other = obj as TestOwnedEntity;
if (other == null) return false;
if (object.ReferenceEquals(this, obj) return true;
return other.Code == this.Code;
}
答案 1 :(得分:0)
最后,他们在EF核心论坛https://github.com/dotnet/efcore/issues/20213
上提供了帮助public class TestEntity
{
public long Id { get; set; }
private TestOwnedEntity _testOwnedEntity;
public virtual TestOwnedEntity TestOwnedEntity
{
get
{
if (_testOwnedEntity == null)
{
_testOwnedEntity = new TestOwnedEntity();
}
return _testOwnedEntity;
}
private set { _testOwnedEntity = value; }
}
}
我的考试有变化,您可以在这里找到:https://github.com/PospisilBohumir/EfCoreTests/tree/FinalFix