代码之家  ›  专栏  ›  技术社区  ›  Thomas Koelle

实体框架核心导航属性不保持为空

  •  2
  • Thomas Koelle  · 技术社区  · 7 年前

    我有一个链接类的类,例如想象一个人和一条狗。在PersonDto中它是这样映射的:

    public int? DogId { get; set; }
    public virtual DogDto Dog { get; set; }
    

    我的场景要大得多,但很简单,它可能看起来像这样:

    var person = await _entities.Persons.Where(p => p.Name == "Ann")
                .Select(p => p).Include(p => p.Dog).First();
    person.Name = "Bob";
    _entities.SaveChanges();
    

    现在想象一下,安没有狗,狗应该保持空。

    SQL实体框架核心执行如下插入:

    DECLARE @inserted0 TABLE ([Id] int, [_Position] [int]);
    MERGE [Dogs] USING (
    VALUES (@p0, @p1, @p2, @p3, @p4, 0),
    (@p5, @p6, @p7, @p8, @p9, 1)) AS i ([Col1], [Col2], [Col3], [Col4], [Col5], 
    _Position) ON 1=0
    WHEN NOT MATCHED THEN
    INSERT ([Col1], [Col2], [Col3], [Col4], [Col5])
    VALUES (i.[Col1], i.[Col2], i.[Col3], i.[Col4], i.[Col5])
    OUTPUT INSERTED.[Id], i._Position
    INTO @inserted0;
    

    我错过了什么。不会吧?足够允许它为空吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Thomas Koelle    7 年前

    我只想发布一个答案,以防搜索到此结束。

    这是完全正确的,虚拟并不重要,问题是在我的Dto和域层之间的一些映射中,我错误地附加了一个空白条目。