遗忘海岸

江湖程序员 -Feiph(LM战士)

导航

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

 

posted on 2012-06-19 10:27  遗忘海岸  阅读(1313)  评论(0编辑  收藏  举报