C# 将对象附加到会话

C# 将对象附加到会话,c#,session,nhibernate,C#,Session,Nhibernate,我正试图修复一些遗留代码中的一个bug。代码试图从数据库中删除一个对象(一行)。但是,会话有时不包含对象,并引发异常。我添加了测试,以查看会话是否包含对象,然后尝试各种方法将对象放入会话,但迄今为止没有成功。你能建议我还可以试试什么吗 该代码实现nHibernate会话非常糟糕,因为它没有遵循工作道德单元。应用程序在启动时创建一个会话,并在应用程序的整个生命周期中使用该会话。对此我无能为力(除了完全重写,在这种情况下我无论如何都会放弃nHibernate) 为什么不先从会话中获取对象 using

我正试图修复一些遗留代码中的一个bug。代码试图从数据库中删除一个对象(一行)。但是,会话有时不包含对象,并引发异常。我添加了测试,以查看会话是否包含对象,然后尝试各种方法将对象放入会话,但迄今为止没有成功。你能建议我还可以试试什么吗

该代码实现nHibernate会话非常糟糕,因为它没有遵循工作道德单元。应用程序在启动时创建一个会话,并在应用程序的整个生命周期中使用该会话。对此我无能为力(除了完全重写,在这种情况下我无论如何都会放弃nHibernate)


为什么不先从会话中获取对象

using (ITransaction transaction = Session.BeginTransaction())
{
    var persisted = Session.Get<SomeType>(object.Id); //object will be loaded if not already in the session
    Session.Delete(persisted);
    transaction.Commit();
}
使用(ITransaction transaction=Session.BeginTransaction())
{
var persisted=Session.Get(object.Id);//如果对象不在会话中,则将加载该对象
删除(保留);
Commit();
}

为什么不先从会话中获取对象

using (ITransaction transaction = Session.BeginTransaction())
{
    var persisted = Session.Get<SomeType>(object.Id); //object will be loaded if not already in the session
    Session.Delete(persisted);
    transaction.Commit();
}
使用(ITransaction transaction=Session.BeginTransaction())
{
var persisted=Session.Get(object.Id);//如果对象不在会话中,则将加载该对象
删除(保留);
Commit();
}

您可以尝试以另一种方式删除:谢谢您的建议。这似乎是一种进步。它删除该行并引发异常。但是你不知道,我的代码中有一些特殊的东西。你可以尝试用另一种方式删除:谢谢你的建议。这似乎是一种进步。它删除该行并引发异常。但是,你不知道,我的代码中有什么特殊的东西。
Get
点击数据库或会话缓存来检索实体数据。如果实体存在,将返回该实体。否则将返回
null
Get
点击数据库或会话缓存以检索实体数据。如果实体存在,将返回该实体。否则将返回
null