Правильное использование DifferentDatabaseScope, когда оно находится внутри другого SessionScope - PullRequest
1 голос
/ 08 марта 2012

У меня есть следующий код (упрощенно для краткости)

[ActiveRecord(Table = "[Order]"),
Serializable]
public class Order : ActiveRecordLinqBase<Order>, INotifyPropertyChanged
{
            //Other properties omitted for brevity

    private IList<Reading> _readings;
    [HasMany(Inverse = true, Cascade = ManyRelationCascadeEnum.All)]
    public virtual IList<Reading> Readings
    {
        get { return _readings; }
        set
        {
            _readings = value;

            DoPropertyChanged(() => this.Readings);
        }
    }
}



using (new SessionScope(FlushAction.Never) {
    Order o = _repository.GetOrder(OrderId);
    bool result = ShowReadings(this, o);
    if (result) s.Flush();
}


bool ShowReadings(Window owner, Order o) {
    //populate a datagrid with Reading objects from Order
    this.Readings = Order.Readings  //datagrid binds to Readings property of the form

    if (cbxHistoricalChecked) {
        using(new DifferentDatabaseScope(SomeOtherConnectionString)) {
            //bind datagrid to historical readings
            this.Readings = GetHistoricalReadings(Order.OrderId);
        }
    }

    if (SignedOff) {
        using(var t = new TransactionScope()) {
           //update some properties on the Order
           t.VoteCommit();
        }
    }
    return true;
}

Итак, что я делаю, так это открываю SessionScope, когда форма чтения открыта, и очищается, когда она закрывается. Если пользователь хочет просмотреть исторические показания для заказа, я должен открыть другую базу данных для исторических показаний. Все работает хорошо, пока я не открываю DifferentDatabaseScope, но когда я это делаю, создание нового TransactionScope завершается неудачно: Castle.ActiveRecord.Framework.Scopes.ScopeMachineryException {"Попытка отменить регистрацию области, которая не является активной"}

Можно ли сделать то, что я пытаюсь сделать, и если да, то как правильно это сделать?

...