在EF中更新单向关系中依赖对象的关系

时间:2017-09-29 17:52:51

标签: entity-framework foreign-keys

我有两种类型

public class Division
{

    public Division()
    {
        SubDiv = new List<EFTest.SubDivision>();
    }

    public int ID { get; set; }

    public string name { get; set; }

    public List<SubDivision> SubDiv { get; set; }


}

public class SubDivision : DomainObject
{

    public int Id { get; set; }

    public string name { get; set; }

}

现在我已经在数据库中添加了一个已加载它的分区,并希望通过以下代码为其添加新的SubDivision。

Division div = c.Divisions.Include(x => x.SubDiv).First();
SubDivision sub = new EFTest.SubDivision() { name = "d" };
div.SubDiv.Add(sub);
c.SubDivisions.Add(sub);
c.SaveChanges();

这段代码的作用是它在数据库中添加了一个新的SubDivision,但是将DivisionId(FK列)列设置为NULL。那么如何让EF识别并插入Division和SubDivision之间的关系而不必将FK字段的导航属性添加到SubDivision类?

1 个答案:

答案 0 :(得分:1)

你的模特很好。问题不同。

您似乎已关闭了上下文更改跟踪功能。我无法使用&#34;标准&#34;重现问题。 (默认)上下文设置(使用正确的FK插入新记录,甚至删除正常冗余的c.SubDivisions.Add(sub);行),但是一旦我执行了c.Configuration.AutoDetectChangesEnabled = false;,则没有插入任何记录(当删除上述内容时)冗余线),或者使用原始代码,记录是用NULL FK插入的。

要获得所需的行为,请保持更改跟踪:

c.Configuration.AutoDetectChangesEnabled = true; // <--
Division div = c.Divisions.Include(x => x.SubDiv).First();
SubDivision sub = new EFTest.SubDivision() { name = "d" };
div.SubDiv.Add(sub);
c.SaveChanges();

或在DetectChanges之前明确调用SaveChanges

c.Configuration.AutoDetectChangesEnabled = false; // <--
Division div = c.Divisions.Include(x => x.SubDiv).First();
SubDivision sub = new EFTest.SubDivision() { name = "d" };
div.SubDiv.Add(sub);
c.ChangeTracker.DetectChanges(); // <--
c.SaveChanges();