我有两种这样的类型
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识别和插入除法和SubDivision之间的关系,而不必向SubDivision类添加FK字段的导航属性?
发布于 2017-09-29 18:38:16
你的模特很好。问题就不一样了。
看来您已经关闭了上下文更改跟踪。我无法重现“标准”(默认)上下文设置的问题(新记录是用正确的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();https://stackoverflow.com/questions/46494446
复制相似问题