Я новичок в NHibernate (и ORMS) и пытаюсь справиться с множеством различных вариантов, которые он представляет. Для справки я использую Fluent NHibernate с отдельными бизнес-объектами, которые, в свою очередь, используют DTO исключительно для доступа к данным. Моя архитектура приложений должна поддерживать как окна, так и веб-интерфейсы.Лучший подход для построения NHibernate DTO's
Мое quandry является одним из общих подходов, поскольку, похоже, существует так много вариантов. Мой DTO выглядит примерно так, как показано ниже. Каждый DTO имеет ссылку на ISession, который передается им из BO. Они несут ответственность за их собственную нагрузку и сохранить:
public class EmployeeDTO...
// Data Properties to be persisted to the database
public virtual int Id { get; private set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual ISession Session { get; set; }
// Save logic
public virtual void Save()
{
var transaction = Session.BeginTransaction();
Session.SaveOrUpdate(this);
transaction.Commit();
}
// Load logic
public virtual void Load(int id)...
Прежде всего: Является ли это правильный подход принять - если DTO имеет возможность сохранять и загружать себя?
Во-вторых: Независимо от того, где сохранить/код нагрузки лежит, вы должны использовать один и тот же ISession для жизни или объекта, или они должны иметь реф к ISessionFactory и открыть новый сеанс все взаимодействия с базой данных времени необходимо?
// Open a new session every time I interact with the repository
var session = FluentSupport.SessionFactory.OpenSession();
var transaction = Session.BeginTransaction();
Session.SaveOrUpdate(this);
transaction.Commit();
session.Close();
// Close the session when I'm done
Конечно всегда есть вариант 3, ни один из выше :)
Когда объект знает, как сохранить себя, называется DAO, это не имеет никакого отношения к DTO –