首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq复制/复制整个记录

Linq复制/复制整个记录
EN

Stack Overflow用户
提问于 2014-03-31 15:32:39
回答 1查看 1.6K关注 0票数 3

我正在使用Linq对实体进行一般CRUD操作。最近,我看到了一个场景,我必须在数据库中复制整个记录(在所有相关表中都有不同的主键)。我的DB结构很简单。我有主桌(比如说A)和其他桌子(比如B,C,D)。主表将表B、C、D的主键作为外键。

我从数据库中获取一条必须复制的记录。然后我

1)使用context.objectStateManager.ChangeObjectState(AObj,EntityState.Added将其对象状态更改为“添加”)

2)使用context.AddToA(AObj)在上下文中添加对象

3)然后做saveChanges()

表A上一切正常,并插入了适当的新对象。

如果我对表B、C、D执行相同的步骤,就会得到异常

1)使用context.objectStateManager.ChangeObjectState(AObj.B,EntityState.Added将其对象状态更改为"Added“)//这里我访问子表B

2)使用context.AddToA(AObj)在上下文中添加对象

3)然后做saveChanges()

objectContext可能处于不一致的状态。发生了引用完整性约束无效。定义refrential约束的属性值在关系中的主体对象和依赖对象之间不一致。

EN

回答 1

Stack Overflow用户

发布于 2014-04-17 09:03:47

使用AsNoTracking()阅读对象图,这只是一个添加和保存的问题,不用担心顺序或状态,我在最近的项目中使用它实现了一个SaveAs特性:

代码语言:javascript
复制
        var myGraph = tableA.Where(c => c.Id == id)
            .Include(c => c.childA)
            .Include(c => c.childB)
            .Include(c => c.childC)
            .AsNoTracking()
            .FirstOrDefault();

        if (myGraph != null)
        {
            myGraph.CopiedFromId = id;

            myGraph = Context.Set<TableA>().Add(myGraph);

            Context.SaveChanges();
        }

下面是关于AsNoTracking()的讨论

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

https://stackoverflow.com/questions/22765808

复制
相关文章

相似问题

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