using (Session sess = BVVGlobal.oXpo.Get_Session())
{
set_User o_u = BVVGlobal.oXpo.Get_Session().GetObjectByKey<set_User>(us.Oid);
List<set_Org> orgList = new List<set_Org>(); // Список организаций
orgList.Clear();
foreach (set_Org element in listBox2.Items)
{
orgList.Add(element);
}
while (o_u.Orgs.Count != 0)
{
int iy = o_u.Orgs.Count;
o_u.Orgs.Remove(o_u.Orgs[iy - 1]);
}
for (int i = 0; i < orgList.Count; i++)
{
o_u.Orgs.Add(orgList[i]);
}
o_u.Save();
}
发誓o_u.Orgs.Add(orgList[i]):说*.set_Org'该对象属于另一个会话。怎么修?
错误的原因是代码在两个不同的会话中加载对象,然后将一个会话中加载的对象添加到另一个会话中加载的对象集合中。这是被禁止的,因为会话必须监视对象的状态并能够随时回答问题,例如哪些对象已更改。因此,当尝试将外来对象(在另一个会话中加载)添加到集合中时,它们会被拒绝。
异常指向它在代码中发生的地方,错误消息指出它的原因。为了修复该错误,您需要找到加载操作涉及的对象的代码并更改它,以便在一个会话中加载所有操作涉及的对象。
如果由于某些重要原因无法控制对象的加载并确保它们在一个会话中加载,那么为了将在另一个会话中加载的对象添加到集合中,您必须使用以下命令获取在所需会话中加载的对象Session.GetObjectByKey方法。使用这种方法,尚未保存的更改将不会应用于另一个会话中加载的对象。因此,这种方法并不总是适用,最好只使用一个会话来下载当前操作所需的对象。