Get <T>和Load <T>之间的区别

use*_*655 31 nhibernate

Get<T>(object id)和之间有什么区别Load<T>(object id)?文档几乎都是一样的.此外,如果重要,在什么情况下我应该使用一个而不是另一个?

Lor*_*zCK 41

Brian提供参考文献非常清楚地解释了它.但是,主要区别在于Load 没有命中数据库来检查和加载您需要的实体,因为它假定您知道实体存在.返回的对象Load是某种代理,在需要时懒惰地获取实际数据,或者如果找不到实体则抛出异常.

概括:

  • Load当您确定存在具有特定ID的实体时,应使用此选项.该调用不会导致数据库命中(因此在某些情况下可以通过NHibernate进行优化).请注意,如果DB中不存在实体实例,则在访问对象时可能引发异常.

  • Get命中数据库或会话高速缓存以检索实体数据.如果实体存在则返回,否则null将返回.这是确定具有特定ID的实体是否存在的最安全的方法.如果您不确定要使用什么,请使用Get.

  • 很好的答案.在某些情况下,有一些细节可能很重要:如果关闭特定实体的延迟加载,AFAIK,`Load`确实会命中数据库.如果缓存中的实体不是代理,则"Load"不返回代理(如果在缓存中找到代理,则"Get"返回代理). (2认同)

Bri*_*den 10

http://ayende.com/Blog/archive/2009/04/30/nhibernate-ndash-the-difference-between-get-load-and-querying-by.aspx

如果请求的对象不存在,则Get将返回null.如果请求的对象不存在,Load将抛出异常.否则,就我所知,它们的功能完全相同.

  • 可能更清楚的是声明它(Load())将返回一个代理(如果没有找到),如果你尝试对它做任何事情,它将抛出一个异常(可能是一个空引用). (7认同)