EF核心3.1.1-拥有实体代理问题

时间:2020-03-05 18:17:27

标签: c# .net ef-core-3.1

我最近在EF核心3.1.1中遇到一个奇怪的问题。我们正在尝试从EF6迁移到EF核心,拥有实体的行为与EF6中的复杂类型不同。当拥有实体由空对象初始化时,EF无法检测到更改。仅针对MSSQL,针对“内存”数据库,就出现了此问题。

server_name

在此示例中,上下文应检测到更改。 “在内存数据库中”可以正确检测到它,但是MS Sql提供程序无法检测到它。这很可能是由于缺少拥有类型的代理引起的。当拥有类型的所有属性均为默认属性且未初始化时,所拥有实体为null时,缺少代理。

能否请您给我一些提示,以正确设置它?我不想删除拥有实体的默认初始化,这将迫使我们检查所有实体是否为null。

整个项目都在github

2 个答案:

答案 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