首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF中依赖对象在单向关系中的更新

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

Stack Overflow用户
提问于 2017-09-29 17:52:51
回答 1查看 45关注 0票数 1

我有两种这样的类型

代码语言:javascript
复制
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。

代码语言:javascript
复制
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字段的导航属性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-29 18:38:16

你的模特很好。问题就不一样了。

看来您已经关闭了上下文更改跟踪。我无法重现“标准”(默认)上下文设置的问题(新记录是用正确的FK插入的,甚至删除了通常多余的c.SubDivisions.Add(sub);行),但一旦执行了c.Configuration.AutoDetectChangesEnabled = false;,就要么没有插入记录(当删除上述冗余行时),要么使用原始代码插入NULL FK。

若要获得所需的行为,请继续跟踪以下更改:

代码语言:javascript
复制
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

代码语言:javascript
复制
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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46494446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档