¿Cuál es la diferencia entre Get<T>(object id)
y Load<T>(object id)
? La documentación prácticamente dice lo mismo. Además, si es importante, ¿en qué casos debo usar uno sobre el otro?Diferencia entre Obtener <T> y Cargar <T>
Respuesta
El reference provided by Brian lo explica con bastante claridad. Sin embargo, la diferencia principal es que Load
no hace clic en en la base de datos para verificar y cargar la entidad que necesita, ya que supone que usted sabe que la entidad existe. El objeto devuelto por Load
es algún tipo de proxy que extrae de forma perezosa los datos reales cuando es necesario o lanza una excepción si no se encuentra la entidad.
Resumen:
Load
se debe utilizar cuando se sabe con certeza que existe una entidad con una cierta identificación. La llamada no da como resultado un acierto de la base de datos (y, por lo tanto, puede ser optimizado por NHibernate en ciertos casos). Tenga cuidado con la excepción que puede surgir cuando se accede al objeto si la instancia de la entidad no existe en el DB.Get
llega a la base de datos o al caché de la sesión para recuperar los datos de la entidad. Si la entidad existe, se devuelve; de lo contrario, se devolveránull
. Esta es la forma más segura de determinar si existe o no una entidad con cierto ID. Si no está seguro de qué usar, useGet
.
Get devolverá un valor nulo si el objeto solicitado no existe. Load lanzará una excepción si el objeto solicitado no existe. De lo contrario, funcionan exactamente de la misma manera que yo puedo decir.
Puede ser más claro decir que (Load()) devolverá un proxy (si no se encuentra) que arrojará una excepción (probablemente una referencia nula) si intenta hacer algo con él. – JasonCoder
Obtener devolverá nulo si el objeto no existe mientras Load no devolverá nulo: devuelve un objeto o arroja una excepción.
La carga es la forma optimizada en algunos casos. Pensemos en una relación de Cliente, Pedido y supongamos que tenemos una tabla de Pedidos con ID de Cliente como clave externa.
var order = new Order {OrderDate = Datetime.Now };
order.Customer = session.Get<Customer>(customerId);
session.Save(order);
pesar de que sólo necesitamos la customerId a conservar el objeto orden, por encima de bloque de código se seleccione en primer lugar con el cliente que customerId de la tabla Clientes después haga clic en la base de datos de nuevo para insertar la orden para ese cliente.
Pero si usamos: se ejecutará
order.Customer = session.Load<Customer>(customerId);
únicamente la instrucción de inserción con el que customerId. La carga es la forma adecuada en este caso.
- 1. diferencia entre <%! %> y <% %>
- 2. Diferencia entre <? Php y <?
- 3. ¿Cuál es la diferencia entre ofstream "<<" y Write
- 4. ¿Diferencia entre <asp:table> y <table>?
- 5. Diferencia entre <string> y <string.h>?
- 6. ¿Cuál es la diferencia entre <% %> y <%=%>?
- 7. ¿Cuál es la diferencia entre <%# %> y <%= %>?
- 8. En ASP.Net, ¿cuál es la diferencia entre <% = y <% #
- 9. Ruby - Diferencia entre Array # << y Array # push
- 10. Diferencia entre <acronym> y <abbr>?
- 11. ¿Diferencia entre <=> y == en Ruby?
- 12. Diferencia entre clase y clase <?>
- 13. ¿Cuál es la diferencia entre <%: y <% = y <% # en aspx?
- 14. ¿Cuál es la diferencia entre cout << cout y cout << y cout en C++?
- 15. ¿Cuál es la diferencia entre <% %> y <%= %> en ASP.NET MVC
- 16. Diferencia entre operadores "no iguales" <> y! = En PHP
- 17. Cuál es la diferencia entre mysqlimport y mysql <dbfile.sql
- 18. Diferencia entre DictionaryBase y Dictionary <Tkey,Tvalue>
- 19. cuál es la diferencia entre '! =' Y '<>' en MySQL
- 20. ¿Hay alguna diferencia entre "! =" Y "<>" en Oracle Sql?
- 21. Diferencia entre ByteArray y Array <Byte> en kotlin
- 22. ¿Cuál es la diferencia entre `=` y `<-` en R?
- 23. ¿Cuál es la diferencia entre "<>" y "! ="?
- 24. SortedList <>, SortedDictionary <> y Dictionary <>
- 25. diferencia de rendimiento entre <c: import url = "child.jsp" /> y <jsp: include ...>
- 26. ¿Hay una diferencia entre <winsock.h> y <winsock2.h>?
- 27. ¿Cuál es la diferencia entre <jsp: incluir página = ...> y <% @ incluir archivo = ...>?
- 28. Diferencia entre enumeración <? extiende ZipEntry> y Enumeration <ZipEntry>?
- 29. ¿Cuál es la diferencia entre <system.web> y <system.webServer>?
- 30. ¿Cuál es la diferencia entre <a_element /> y <a_element xsi: nil = "true" />?
Gran respuesta. Hay algunos detalles que pueden ser importantes en algunos casos: AFAIK, 'Load' golpea la base de datos si la carga diferida para la entidad específica está desactivada. 'Load' no devuelve un proxy si la entidad en el caché no es un proxy (mientras que' Get' devuelve un proxy si encontró un proxy en el caché). –