EF Core 2.1 [更改跟踪] - 保存所有相关实体

EF Core 2.1 [change tracking] - saving all related entities

也许标题被误解了,但我会尝试在这里解释我的情况。

因此,考虑到我的实体 Person 具有虚拟 属性 Country,如下所示:

public class Person {
    public long Id { get; set;}
    public short IdCountry { get; set;}
    public virtual Country Country { get; set; }
    ...
}

映射如下:

...
builder.HasOne(c => c.Country)
    .WithMany()
    .HasForeignKey(c => c.IdCountry);

我的存储库是通用的。

这里发生的事情是,当我尝试在 Person 中保存一些更改时,我发现 Country 实体状态 Added 没有意义。

我在这里举了一个发生在我身上的类似例子。实际上,我的 class Person 中还有其他五个虚拟财产,其中一些处于这种状态 (Added)。

有人处理过吗? 提前致谢。


编辑:Ansewing @alans 回复:我正在做类似如下的事情:

foreach (var entrie in entry.Context.ChangeTracker.Entries())
{
    try
    {
        key = entrie.Entity.GetType().GetProperty("Id").GetValue(entrie.Entity, null);
    }
    catch (Exception ex)
    {
        key = null;
    }
    if (key != null && entrie.State == EntityState.Added)
    {
        entrie.State = EntityState.Unchanged;
    }
    else if (Convert.ChangeType(key, typeof(long)) as long? == 0)
    {
        entrie.State = EntityState.Added;
    }
}
_dbContext.SaveChanges();

@TanvirArjel 上面的这个方法就是状态Added

您是在某处更新 Country 对象吗?如果 属性 的键有默认值,我会将其标记为已添加。这是我的猜测。

我在 EF6 中使用 AsNoTracking() 扩展方法来解决性能问题,但我意识到在 EFCore 这个特定方法 中有点不同(我正在迁移代码).所以,我只删除了方法