首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Entity Framework 7级联插入

Entity Framework 7级联插入
EN

Stack Overflow用户
提问于 2015-09-10 15:49:18
回答 1查看 1.8K关注 0票数 4

我们刚刚完成了从EF6到EF7的合并,因为我们在应用程序中使用了ASP.Net 5。这个项目刚刚开始,所以我们不会遇到依赖测试库发布代码的问题。

我们遇到了级联插入的问题。通过级联插入,我的意思是随父实体一起插入/更新子实体的集合。它似乎以一种令人惊讶的方式依赖于操作的顺序。

给定以下定义:

代码语言:javascript
复制
public class ParentEntity
{
    public int Id { get; set; }
    public ICollection<ChildEntity> Children { get; set; }
}

public class ChildEntity
{
    public int Id { get;set; }

    public ParentEntity Parent { get; set; }
}

下面的代码可以工作(ChildTable填充了3个值):

代码语言:javascript
复制
var parent = new ParentEntity();            

parentSet.Add(parent);

parent.Children = new List<ChildEntity>();

for (int i = 0; i < 3; i++)
{
    var child= new ChildEntity { Parent = parent };
    parent.Children.Add(child);
}

_uow.SaveChanges();

但以下代码不会(ChildTable保持为空):

代码语言:javascript
复制
var parent = new ParentEntity();                

// Moved parentSet.Add()

parent.Children = new List<ChildEntity>();

for (int i = 0; i < 3; i++)
{
    var child= new ChildEntity { Parent = parent };
    parent.Children.Add(child);
}

parentSet.Add(parent);

_uow.SaveChanges();

要使下面的代码正常工作,我必须执行以下操作:

代码语言:javascript
复制
var parent = new ParentEntity();                

parent.Children = new List<ChildEntity>();

for (int i = 0; i < 3; i++)
{
    var child= new ChildEntity { Parent = parent };
    parent.Children.Add(child);
    childSet.Add(child); // Added childSet.Add()
}

parentSet.Add(parent);

_uow.SaveChanges();

有没有人能解释一下为什么会有这样的差异?在EF6中,这正如我所期望的那样工作。如果EF7中还没有对自动跟踪子实体的支持,我可以理解,但是很明显,如果您移动Set.Add调用,就可以让它工作。更让我惊讶的是,将Set.Add调用移到何时填充子集合是有效的。

有什么想法/解释吗?

我们使用EF7 beta 7。

EN

回答 1

Stack Overflow用户

发布于 2015-09-10 23:57:11

我们正在积极地工作,以使这一行为符合预期。有关我们的最新想法,请参阅我们的August 27, 2015 Design Meeting Notes

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32496087

复制
相关文章

相似问题

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