我正在尝试坚持一个XPObject。这是我的密码:
Administrateur adm = (Administrateur)GetUserByLogin("admin");
Client clt = (Client)GetUserByLogin("client");
using(var uow = new UnitOfWork())
{
Calendrier cal = new Calendrier(uow)
{
//Some string and int attributes
Administrateur = adm,
Client = clt
};
uow.CommitChanges();
}GetUserByLogin是一个返回Utilisateur对象的方法,其中Administrateur和Client从Utilisateur继承。
我测试了GetUserByLogin,它运行得很好。当我运行上面的代码时,我得到的是:
S
ystem.ObjectDisposedException: Cannot access a disposed object.
Object name: 'ASTDataLayer.POCO.Administrateur(1004)'.
at DevExpress.Xpo.PersistentBase.get_Session()
at DevExpress.Xpo.Session.ThrowIfObjectFromDifferentSession(Object obj)
at DevExpress.Xpo.Metadata.XPMemberInfo.ProcessAssociationRefChange(Session s
ession, Object referenceMemberOwner, Object oldValue, Object newValue, Boolean s
kipNonLoadedCollections)请帮忙,谢谢
发布于 2015-02-17 07:56:39
using (UnitOfWork uow = new UnitOfWork() {
// Do something
}
using (UnitOfWork uow = new UnitOfWork() {
// Do something
return persistentObjectOrCollectionOfPersistentObjects;
}对于何时以及如何释放会话或UnitOfWork存在很大的混淆。上面的代码片段说明了正确和不正确的方法。 如果创建UnitOfWork或会话实例只是为了在当前上下文中执行某些操作,则可以安全地释放UnitOfWork或会话实例。但是,如果将持久对象传递给另一个函数,则不应立即释放会话或UnitOfWork。 在后一种情况下,处理UnitOfWork/Session实例的任务变得很棘手。您必须确保在您释放会话/UnitOfWork之后,您的代码都不会使用由Session/UnitOfWork加载的持久对象。
您发布的代码不包含可能导致收到的异常的错误。我认为这个错误存在于GetUserByLogin方法中。否则,很难想象以后您还会在哪里释放代码中使用的会话实例。
GetUserByLogin方法很可能创建一个新的会话实例。显然,这是必要的,是无法避免的。但是这个方法不能释放会话,因为它返回一个持久对象作为结果。稍后将使用此对象,并且可以为特定目的访问会话。在使用GetUserByLogin方法的代码中正确地释放会话。
然而,还有另一个问题。由于您的应用程序逻辑需要在同一个上下文中多次调用GetUserByLogin方法,所以如果您尝试在一起使用返回的对象,您将混合不同的会话。例如,将它们分配给第三个对象的引用属性。顺便说一句,你就是这么做的。
因此,我的建议是修改GetUserByLogin方法,以便它接受会话作为参数。在这种情况下,您将始终确保使用的是单个会话实例,并且可以在退出上下文之前将其释放。
using(var uow = new UnitOfWork())
{
Administrateur adm = (Administrateur)GetUserByLogin(uow, "admin");
Client clt = (Client)GetUserByLogin(uow, "client");
Calendrier cal = new Calendrier(uow)
{
//Some string and int attributes
Administrateur = adm,
Client = clt
};
uow.CommitChanges();
}https://stackoverflow.com/questions/28547176
复制相似问题