Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >有时,实体框架在将“子”添加到新(父)元素后插入多个“父”行。

有时,实体框架在将“子”添加到新(父)元素后插入多个“父”行。
EN

Stack Overflow用户
提问于 2019-10-16 22:32:32
回答 1查看 175关注 0票数 0

我正在试图找出在向它添加子(一对多连接)的情况下,什么会导致实体乘法。

我的代码非常复杂,类有更多的属性,但主要问题如下。

下面是一个示例代码:

代码语言:javascript
代码运行次数:0
复制
public class Parent
{
    public int Id { get; set; }
    public List<Child> Children { get; set; }
    public string Name { get; set; }
    public Parent()
    {
        Children = new List<Child>();
    }
}

public class Child
{
    public int Id { get; set; }
    public Parent Parent { get; set; }
    public int ParentId { get; set; }
    public string ParentName { get; set; }
}

子节点可以在没有父服务器的情况下生存,父也可以。

因此,当我想连接两个实体时,它必须在代码中很好地工作。如果已经创建了一个新的父实体,则不可能创建一个新的父实体。这个过程是线性的。

例如,我首先在没有父级(这是第一个状态)的情况下创建三个子,并将其保存到Db中。然后,我“处理”实体(可能在创建孩子一天后):

如果找不到一个名为dbContext.

  • Looping的
  • ,选择第一个孩子并创建它的名称(子级已经在DB中)。
  • 子级添加到父级的‘’t子>列表。

H 118保存该,而我有没有父级的任何子级。H 221F 222

代码示例:

代码语言:javascript
代码运行次数:0
复制
public void ProcessChildren()
{
    IDbContextTransaction trans = dbContext.BeginTransaction();
    foreach(var item in Children) //Children is a list of child entities (existing in the DB)
    {
        var parent = dbContext.Parents.SingleOrDefault(x => x.Name == item.ParentName);
        if(parent == null)
        {
            parent = new Parent{Name = item.ParentName};
            dbContext.Parents.Add(parent);
        }
        parent.Children.Add(item);
        dbContext.SaveChanges();
    }
    trans.Commit(); //rollback implemented if it fails
}

我那时(只是偶尔也很少)的是3的父母和3个孩子的女巫没有ParentIds,所以看起来(对我来说) EF在某种程度上崩溃了,并且意外地这样做了。

因此,这个bug发生在一个巨大的过程中(从几十万个孩子那里创建了很少的父母),而这个错误出现的几率仍然很低(并不是有意复制的)。然而,在我的系统中,它会造成后果。

有人听说过这样的行为吗?也许问题在于EF (EntityFramework 6.2.0Nuget)或它的Npgsql扩展(EntityFramework6.Npgsql 3.1.1Nuget)?

编辑:添加了保存和创建实体的代码示例。Edit2:父引用异常修复。很抱歉,代码是在这里编写的--这是它的工作方式的一个例子,而不是代码本身。

EN

回答 1

Stack Overflow用户

发布于 2019-10-16 23:23:08

在这行之后,您只需在数据库上下文中添加新的父变量,但是“父”变量不会更改,它将保持为空。

代码语言:javascript
代码运行次数:0
复制
if(parent == null)
{
    dbContext.Parents.Add(new Parent{Name = item.ParentName});
}

因此,每次父级为空时,当您想访问空变量时,您的代码都会崩溃,parent.Children.Add(item);

您可以尝试将父变量分配给新添加的父对象。

代码语言:javascript
代码运行次数:0
复制
if (parent == null)
{
    parent = dbContext.Parents.Add(new Parent{Name = item.ParentName});
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58426252

复制
相关文章
子元素滚动,父元素不滚动
这个是为了处理在bootstrap框架中的iframe 滚动条的问题,查找到的解决方案
solate
2019/07/22
4K0
css 子元素margin-top影响了父元素
可以看到box1虽然没有margin-top:50px,但是上方也留出了50px
路过君
2020/11/12
1.6K0
css 子元素margin-top影响了父元素
子元素margin-top转移到父元素
如果子元素设置了margin-top/bottom,且父元素没有触发hasLayout,那么子元素的margin就可能转移到父元素。具体表现如下图(父元素虽然设置了background,但并不能覆盖子元素的margin部分;不过父元素高度足够时可以覆盖margin-bottom):
gojam
2019/09/19
1.1K0
子元素margin-top转移到父元素
vue获取当前点击元素的父元素、子元素、上级元素等
<div @click = "clickfun($event)">点击</div> methods: { clickfun(e) { // e.target 是你当前点击的元素 // e.currentTarget 是你绑定事件的元素 #获得点击元素的前一个元素 e.currentTarget.previousElementSibling.innerHTML #获得点击元素的第一个子元素 e.curre
用户1349575
2022/01/26
11.3K0
jquery 获取元素(父节点,子节点,兄弟节点)
1、jquery 获取元素(父节点,子节点,兄弟节点) $("#test1").parent(); // 父节点 $("#test1").parents(); // 全部父节点 $("#test1").parents(".mui-content"); $("#test").children(); // 全部子节点 $("#test").children("#test1"); $("#test").contents(); // 返回#test里面的所有内容,包括节点和文本 $("#test").content
biaoblog.cn 个人博客
2022/08/11
5.6K0
子元素margin-top导致父元素移动的问题
今天在修改页面样式的时候,遇到子元素设置margin-top 但是并没有使得子元素与父元素之间产生间隔,而是作用在了其父元素上,导致父元素产生了一个margin-top 的效果。
Daotin
2021/01/30
2.7K0
父元素opacity属性对子元素的影响(子元素设置opacity无效)
这段时间做了一个项目优化,对于原有的内容进行了重新设计实现,其中一项就是对于label标签添加hover层进行解释说明,最常用的办法及时label的容器设置relative,然后hover层作为它的子元素设置absolute,然后在使用label的hover伪类来控制hover层的显示和隐藏,这其中一个要求及时hover层必定要求能够遮住页面中其他的元素,所以最常用的办法是设置它的背景颜色,然后让它的z-index处于合理的位置,一切都是这样设计的,但是最终的效果却出现了hover层设置bg为#fff的时候,hover层显示时还是会把底部内容给透出来,第一反应就是opacity设置为1,但是还是没有效果(因为背景为白色,所以有点坑)
全栈程序员站长
2022/09/01
3.1K0
父元素opacity属性对子元素的影响(子元素设置opacity无效)
【CSS】定位 ⑤ ( 子元素绝对定位 父元素相对定位 | 代码示例 )
此时就要求父容器必须稳定 , 如果父容器使用了 绝对布局 , 父容器就不会保留位置 ,
韩曙亮
2023/04/16
1.9K0
【CSS】定位 ⑤ ( 子元素绝对定位 父元素相对定位 | 代码示例 )
Vue 在父(子)组件引用其子(父)组件方法和属性
<button @click="callChildMethod()">父组件调用子组件方法</button>
授客
2020/06/23
1.8K0
CSS中如何解决子元素继承父元素的opacity属性?
这里有两个方案,使用rgba()间接的设定opacity的值,这个属性不会向下继承,或者既然opacity会被子级元素继承,那就把opacity属性放到同级元素实现,下面通过示例具体说说这两种方式:
全栈程序员站长
2022/09/01
4.5K0
js/jquery获取父窗口元素
做WEB前端开发的过程中,经常会有这样的需求,用户点击【编辑】按钮,弹出一个对话框,在里边修改相应的值,然后把修改后的值显示在原页面,最后点击保存。用window.parent.document.getElementById().setAttribute("value","")可以很好的解决这个问题。
Jensen_97
2023/07/19
7300
vue父组件调用子组件属性_vue子组件获取父组件实例
但是在vue3中,很显然使用this.$emit() 已经开始报错了,为什么会报错呢?
全栈程序员站长
2022/11/10
2.1K0
vue 父组件调用子组件_react父组件向子组件传值
1.直接在子组件中通过“this.$parent.event”来调用父组件的方法。
全栈程序员站长
2022/11/15
1.9K0
vue子组件调用父组件函数_vue子组件修改父组件值
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
1.7K0
vue父组件引入子组件_vue子组件传递方法给父组件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1K0
vue 父组件调用子组件的方法_vue子组件修改父组件值
我们都知道通过$ref可以获取到某个DOM,但是它也可以用来获取子组件的实例,调用子组件的方法
全栈程序员站长
2022/11/09
2K0
子组件传对象给父组件_react子组件改变父组件的状态
sendData = () => { let data = ‘1234’; this.props.getData(data); //这个this,props.xxx 后面的xxx是是在父组件那使用的名字; }, 然后可以在render函数后使用这个方法或者另外定义一个事件去触发该方法进行传值,
全栈程序员站长
2022/10/04
2.8K0
vue 父组件调用子组件的函数_vue子组件触发父组件方法
项目里将element-ui的el-upload写成公共组件方便调用,官方的before-upload方法用于处理上传前要做的事,如:比较文件大小,限制文件类型等,通过返回true 或 false 控制是否上传。 当该组件调用父组件方法,并且要能获取到父组件方法的返回值,如何实现?
全栈程序员站长
2022/11/10
3K0
设置父元素透明度不影响子元素透明度 原
最近做一个加载的loading动画,有一个灰色的遮罩层,当设置opacity透明度的时候,发现里面的子元素也继承了父元素的透明度,即使子元素透明度设置为1也是在父元素的基础上设置的。有什么办法子元素的透明度不影响子元素的透明度呢?
tianyawhl
2019/04/04
1.9K0
设置父元素透明度不影响子元素透明度
                                                                            原
点击加载更多

相似问题

防止实体框架在父插入时插入子对象

27

为什么实体框架在更新父程序时插入子元素?

13

Web实体-框架在子元素中嵌套父元素

14

实体框架将现有的子元素添加到多个关系上的新父级

21

使用实体框架在更新父对象时插入多个子对象

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文