Diferencia de NHibernate entre Consulta <T>, Obtener <T> y Cargar <T>
Me gustaría encontrar la diferencia en el uso de estas tres formas de obtener datos de la base de datos al hacer algo como:
public T GetById(int id) {
using (var db = Database.Session) {
using (var t = db.BeginTransaction()) {
try {
return db.Get<T>(id);
}
catch (Exception) {
if (!t.WasCommitted) {
t.Rollback();
}
throw;
}
}
}
}
o
public T GetById(int id) {
using (var db = Database.Session) {
using (var t = db.BeginTransaction()) {
try {
return Query<T>().First(x=>x.Id == id);
//or something like
//return Query<T>().Where(x=>x.Id == id).FirstOrDefault();
//or
//return QueryOver<T>().Where(x=>x.Id == id).FirstOrDefault;
}
catch (Exception) {
if (!t.WasCommitted) {
t.Rollback();
}
throw;
}
}
}
}
o incluso de esta manera:
public T GetById(int id) {
using (var db = Database.Session) {
using (var t = db.BeginTransaction()) {
try {
return db.Load<T>(id);
}
catch (Exception) {
if (!t.WasCommitted) {
t.Rollback();
}
throw;
}
}
}
}
Y agregando otra pregunta a esta, ¿cómoQuery()
difiere deQueryOver()
?
He leído algunas respuestas aquí en stackoverflow, pero dado que la mayoría de ellas se referían al comienzo de usar Linq y NHibernate 3, me gustaría saber cómo es el escenario hoy.