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对应的物料组显示时才会触发(滚动条拉过去)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值