Если 2-я форма является дочерней формой - например, модальной формой для редактирования деталей - тогда она участвует в том же самом UOW, что и родительский, и UOW должен быть передан от родительского к дочернему, обычно вконструктор.
Я не фанат подхода в статье Габриэля Шенкера;Я думаю, что лучше использовать ISession напрямую как реализацию UOW.
Статья Айенде, на которую ссылается ответ Джеймса, хороша, но мы делаем это немного по-другому.Для форм верхнего уровня, которые управляют собственным UOW, у нас есть статический метод в Program.cs для создания ISession, который вызывается в конструкторе формы:
private readonly ISession _session;
public frmPlayerViewer()
{
InitializeComponent();
// bail out if we're in the designer
if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)
{
return;
}
_session = Program.OpenEvtSession(FlushMode.Commit);
}
Чтобы убедиться, что ISession правильно расположенпереопределить OnFormClosing:
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if (!e.Cancel && _session != null)
{
if (_session.Transaction.IsActive)
{
const string msg = "OnFormClosing with active transaction.";
log.Error(msg);
throw new Exception(msg);
}
_session.Dispose();
}
}
Этот код находится в базовой форме, которую расширяют формы верхнего уровня.