NHibernate 및 C#을 사용하여 특성 지연로드로로드 된 개체를 삭제하는 데 문제가 있습니다.세션 및 지연로드 작업
개체입니다.
public class Item
{
public virtual Guid ItemID { get; set; }
public virtual string Name { get; set; }
public virtual decimal Price { get; set; }
public virtual string Image { get; set; }
public virtual Iesi.Collections.Generic.ISet<Tax> Taxes { get; set; }
}
"세금"컬렉션은 여기에서 느린 로딩과 함께로드됩니다. 그래서 저는 세션을 계속 열어 둘 필요가 있습니다. "Item"개체를로드 할 때 다음 쿼리를 사용합니다. FindByID()
에 대한 위의 코드에서
public Item FindByID(Guid itemID)
{
//using(var session = NHibernateHelper.OpenSession())
//using (var tr = session.BeginTransaction())
//{
// return session.Get<Item>(itemID);
//}
var session = NHibernateHelper.OpenSession();
return session.Get<Item>(itemID);
}
는 내가 객체가 DB에서 가져온되면 세션을 닫는 몇 가지 코드를 댓글을 달았 볼 수 있습니다. 왜냐하면 나는
Taxes
객체 컬렉션을 게으른 액세스 할 수 있으므로 세션을 열어야하기 때문입니다. 공개 코드 섹션은 발견 된 객체를 반환 한 후에 세션이 아직 열려 있음을 나타냅니다.
아니요 위의로드 된 개체와 함께 다음 코드를 사용하여 삭제를 실행할 때 아니오. 나는 다음과 같은 오류를 얻고있다
public void RemoveItem(Item item)
{
using(var session = NHibernateHelper.OpenSession())
using (var tr = session.BeginTransaction())
{
try
{
session.Delete(item);
tr.Commit();
}
catch (Exception Ex)
{
throw Ex;
}
}
}
은 ..
이 개 열린 세션
오류가 분명하다로 컬렉션을 연결할
불법 시도, 페치 된 객체는 경우 세션을 열었습니다 같은 개체를 삭제하기 위해 다른 세션을 엽니 다.이 오류가 발생했습니다.
이 오류를 없애기 위해 누군가 안내해주십시오. 감사.
아마도 질문이 무엇인지 지정해야합니다. 오류라고 분명히 말하면됩니다 (직접 말한 것처럼). –
내 질문은 ..이 오류를 해결하는 방법? 나는 그 질문에 따라 그것을 썼다. 하지만 지금은 그것을 볼 수 없습니다. 운영자가 삭제할 수 있습니까 ??? – BlueBird
위의'RemoveItem' 메쏘드가 실제 코드라면'catch (Exception ex) throw Ex;'하지 말고 스택 트레이스를 풀 것입니다 - 대신'catch (Exception ex) throw;'를 실행하십시오. 또한, 만약 당신이 할 일을 모두 던지면 예외를 잡아 내지 말고, 아마도'tr.Rollback()'또는 무엇인가를해야 할 것이다. –