Если Вы работаете главным образом с текстом (как большинство программистов, или другие технические люди делают), или даже документы, то portait режим намного более ценен. На самом деле общая тенденция в дисплеях является всем неправильным направлением: соотношения сторон хлюпают отображения с перспективой к почтовому слоту для лучше установки формату фильмов. Лично, я имею никогда , смотрел кино на моих компьютерах (ноутбук или рабочий стол), и я не собираюсь запуститься теперь - это - то, для чего у меня есть ТВ!
В действительности, вертикальные пиксели являются наиболее ценным активом в вычислениях - делают то, что Вы можете для получения больше из них - Вы не будете сожалеть, что потратили деньги! Я даже не куплю ноутбук меньше чем с 1024-1080 вертикальными пикселями, так как это minumum, требуемый отобразить полную страницу PDF в читаемом разрешении, и (намного) больше лучше. (Так как PDFs составляют значительную часть сегодняшней онлайн-документации / руководства, это - очень большое беспокойство.) Необходимо только думать о ширине после , у Вас есть достаточно вертикальных пикселей.
то, Что я действительно хочу, является 15,4-дюймовым или 16-дюймовым ноутбуком с портрет экран - они должны все еще быть достаточно широкими для упаковки полноразмерной клавиатуры в основу - рука центра FlyBook-стиля была бы хороша, но не требуется.
Я использовал очень похожий подход. В HttpModule я запрашиваю у sessionfactory новый сеанс + привязываю его при поступлении нового запроса. Но я также начинаю транзакцию здесь. Затем, когда запрос заканчивается, я просто отвязываю его и пытаюсь зафиксировать транзакцию.
Также мой базовый репозиторий никоим образом не принимает сеанс - вместо этого он запрашивает текущий сеанс, а затем выполняет некоторую работу с ним. Также я ничего не оборачиваю внутри этого базового класса с транзакцией. Вместо этого весь http-запрос - это единая единица работы.
Это может не подходить для проекта, над которым вы работаете, но я предпочитаю этот подход, потому что каждый запрос будет неудачным или успешным как единая атомарная единица. У меня есть полная запись в блоге здесь с исходным кодом, если вас интересует реальная реализация.
Ниже приведен пример того, как выглядит этот базовый репозиторий:
public abstract class NHibernateRepository<T> where T : class
{
protected readonly ISessionBuilder mSessionBuilder;
public NHibernateRepository()
{
mSessionBuilder = SessionBuilderFactory.CurrentBuilder;
}
public T Retrieve(int id)
{
ISession session = GetSession();
return session.Get<T>(id);
}
public void Save(T entity)
{
ISession session = GetSession();
session.SaveOrUpdate(entity);
}
public void Delete(T entity)
{
ISession session = GetSession();
session.Delete(entity);
}
public IQueryable<T> RetrieveAll()
{
ISession session = GetSession();
var query = from Item in session.Linq<T>() select Item;
return query;
}
protected virtual ISession GetSession()
{
return mSessionBuilder.CurrentSession;
}
}
Спасибо за ответ!
Да, это простой и понятный способ решить эту проблему. Но моя проблема в том, что я хочу убедиться, что существует транзакция, связанная с операцией репозитория, даже если служба приложения, репозиторий и т.д. не вызывается веб-запросом (другие типы клиентов), поэтому я хотел иметь транзакцию, окружающую операцию самый низкий уровень (например, session.Save), а затем используйте TransactionScope для создания более длинной транзакции, если это необходимо. Но ваше решение простое, и оно мне нравится, мэйбай, я воспользуюсь им, а затем проверю, что другие клиенты также используют транзакции.