Я изучаю NHibernate и создал несколько юнит-тестов, и все идет хорошо.Мое главное приложение имеет только два слоя:
- Презентация (приложение WPF)
- Домен (имеет бизнес-логику и доступ к данным)
и, конечно, яу меня есть мой модульный тестовый проект (Test).
Мои модульные тесты вызывают мой класс SessionManager
для построения SessionFactory
во время [TestFixtureSetup]
.Каждый [Test]
затем получает Session
для выполнения проверки модуля доступа к данным.Мне интересно, как мне это сделать в моем проекте WPF.
Я создал простое диалоговое окно, чтобы посмотреть, смогу ли я подключить свое приложение WPF к своей базе данных.Мне кажется неправильным иметь ссылку на NHibernate в моем слое презентаций, правильно ли я в этом чувствую?Если так, как мне получить сеанс для хранения объекта, когда пользователь нажимает Add
в моей форме, чтобы что-то сохранить?Вот некоторые из моего кода:
public class SessionManager
{
private ISessionFactory _sessionFactory;
public SessionManager()
{
_sessionFactory = GetSessionFactory();
}
public ISession GetSession()
{
return _sessionFactory.OpenSession();
}
private ISessionFactory GetSessionFactory()
{
return (new Configuration()).Configure().BuildSessionFactory();
}
}
В моем тестовом проекте у меня есть такие вещи:
[TestFixtureSetUp]
public void TestFixtureSetup()
{
log4net.Config.XmlConfigurator.Configure();
DatabaseFixtureSetUp();
_sessionManager = new SessionManager();
}
[SetUp]
public void Setup()
{
DatabaseSetUp();
_session = _sessionManager.GetSession();
}
Я не уверен, как структурировать мой код уровня презентации для храненияобъект.У меня есть это в моей форме:
private void btnAddBroker_Click(object sender, RoutedEventArgs e)
{
var broker = new Broker
{
Name = txtBrokerName.Text,
IsActive = (bool)chkIsActive.IsChecked,
IsDefault = (bool)chkIsDefault.IsChecked
};
// save the broker object to the database
// is it ok to have NHibernate code here? feels wrong
}
Как бы вы это сделали?