2011-05-06 151 views
1

我有以下方法。处理NHibernate加载失败

public Foo GetById(int id) 
    { 
     ISession session = GetCurrentSession(); 
     try 
     { 
      return session.Load<Foo>(id); 
     } 
     catch(NHibernate.ObjectNotFoundException onfe) 
     { 
      throw(onfe); 
     } 
    } 

不幸的是,永远不会抛出onfe。我想处理这种情况,我只得到 支持代理,因为数据库中没有足够的行。

+0

它在此时抛出任何异常吗? – 2011-05-06 10:07:59

+0

不,现在没有。当我使用session.Get()时,它不会被抛出:( – AGuyCalledGerald 2011-05-06 10:11:02

回答

3

我建议你写你自己的ObjectNotFoundException并重写方法:

public Foo GetById(int id) 
{ 
    Foo foo; 
    ISession session = GetCurrentSession(); 
    foo = session.Get<Foo>(id); 
    if (foo == null) 
    { 
     throw new ObjectNotFoundException(string.Format("Foo with id '{0}' not found.", id)); 
    } 
} 

有两个问题与你的方法写:

  1. 您应该使用Get加载一个实体通过它的关键。
  2. 您的异常处理包装原始异常并无故重新抛出。
+0

你能更接近地解释你的语句2吗? – AGuyCalledGerald 2011-05-06 11:42:32

+1

你的catch块没有处理ObjectNotFoundException,它将它包装在一个新的Exception中并抛出它。最大的问题是调用代码将只能捕获异常,并不知道对象是否加载失败或其他问题。 – 2011-05-06 11:50:16