zoukankan      html  css  js  c++  java
  • EF 中不同会话上下文的对象,不能互设为对方的导航属性值

    比方有会话CtxA中的A对象以及CxtB中的B对象,

    new 一个A对象,设置A.B=B,那么当将A添加到CtxA中时(代码:CtxA.A.AddObject(A))如果CtxA中不包括B对象那么将报错误:

    只有在 EntityKey 属性的当前值为 null 时才能设置该属性。

    如果CtxA中存在B对象那么将报错误:

    ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象

    解决办法:

    View Code
            private void tbtnAddNewItem_Click(object sender, EventArgs e)
            {
                var item = bindingSource1.Current as KB_BOMTable;
                if (item != null && treeView1.SelectedNode != null)
                {
                    //bGroup来自DBCtx以外的会话
                    var bGroup = treeView1.SelectedNode.Tag as KB_BOMGroup;
    
                    if (bGroup != null)
                    {
                        item.KB_BOMGroup = DBCtx.GetObjectByKey(bGroup.EntityKey) as KB_BOMGroup;
                       // item.GroupId = bGroup.GroupId; //只设置值属性,导航属性在改对象Attach到会话时自动加载
    
                    }
    
    
                }
            }

     另外注意设置GroupId=2 后,如果该datagridview列没显示--指有很多列该列需要拉动滚动条才可见,
     则不执行数据库查询加载编号是2的MGroup,而是当datagridview对应的物料组显示时才会触发(滚动条拉过去)

     

  • 相关阅读:
    centos 给终端设快捷键
    centos 给鼠标右击添加 “打开终端” 菜单项
    centos 6.X 安装输入法
    centos U盘安装
    js的构造函数
    onresize的定义方式
    两个时间对比
    AMD和CMD的区别
    spring加载配置文件
    cglib代理
  • 原文地址:https://www.cnblogs.com/wdfrog/p/2554429.html
Copyright © 2011-2022 走看看