Разница в NHibernate между Query <T>, Get <T> и Load <T>
Я хотел бы найти разницу в использовании этих трех способов получения данных из базы данных при выполнении чего-то вроде:
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;
}
}
}
}
или же
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;
}
}
}
}
или даже так:
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;
}
}
}
}
И добавив еще один вопрос к этому, какQuery()
отличается отQueryOver()
?
Я прочитал некоторые ответы здесь в stackoverflow, но, поскольку большинство из них касалось начала использования Linq и NHibernate 3, я хотел бы знать, каков сценарий сегодня.