Hi,
Allthough we did not issue an ApplyChanges() ourselves, a commit is underway? And it fails. Any ideas?
Regards
Paul Sinnema
Diartis AG
Exception:
Der Transaktionsvorgang kann nicht ausgeführt werden, weil es ausstehende Anforderungen im Rahmen dieser Transaktion gibt.
Translation:
The Transaktion cannot be executed, because it has pending requests in this transaction.
StackTrace:
System.Data.dll!System.Data.SqlClient.SqlInternalTransaction.Commit() + 0x167 bytes
System.Data.dll!System.Data.SqlClient.SqlTransaction.Commit() + 0x144 bytes
> Xtensive.Sql.dll!Xtensive.Sql.SqlConnection.Commit() Line 143 + 0x34 bytes C#
Xtensive.Storage.Providers.Sql.dll!Xtensive.Storage.Providers.Sql.Driver.CommitTransaction(Xtensive.Storage.Session session, Xtensive.Sql.SqlConnection connection) Line 78 + 0x12 bytes C#
Xtensive.Storage.Providers.Sql.dll!Xtensive.Storage.Providers.Sql.SessionHandler.CommitTransaction() Line 127 + 0x35 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Disconnected.DisconnectedSessionHandler.CommitTransaction() Line 65 + 0x22 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Session.CommitTransaction(Xtensive.Storage.Transaction transaction) Line 135 + 0x23 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Transaction.Commit() Line 172 + 0x21 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.TransactionScope.Dispose() Line 61 + 0x1d bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Persistent.LeaveCtorTransactionScope(bool successfully) Line 813 + 0x10 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Entity.Entity(Xtensive.Storage.EntityState state) Line 746 + 0xd bytes C#
KLIBDatabase.dll!Diartis.KLIB.Model.AbstractEntity.AbstractEntity(Xtensive.Storage.EntityState arg0) + 0x35 bytes
KLIBDatabase.dll!Diartis.KLIB.Model.DelictAgeType.DelictAgeType(Xtensive.Storage.EntityState arg0) + 0x35 bytes
KLIBDatabase.dll!Diartis.KLIB.Model.DelictAgeType.~Xtensive.Core.Aspects.FactoryMethod(Xtensive.Storage.EntityState arg0) + 0x4a bytes
Xtensive.Storage.dll!Xtensive.Storage.Internals.Activator.CreateEntity(System.Type type, Xtensive.Storage.EntityState state) Line 39 + 0x19 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.EntityState.Entity.get() Line 97 + 0x3b bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Linq.Materialization.ItemMaterializationContext.Materialize(int entityIndex, int typeIdIndex, Xtensive.Storage.Model.TypeInfo type, Xtensive.Core.Pair<int>[] entityColumns, Xtensive.Core.Tuples.Tuple tuple) Line 57 + 0x12 bytes C#
[Lightweight Function]
Xtensive.Core.dll!Xtensive.Core.DelegateBindExtensions.Bind<object[],Xtensive.Core.Tuples.Tuple,Xtensive.Storage.Linq.Materialization.ItemMaterializationContext,Diartis.KLIB.Model.DelictAgeType>.AnonymousMethod__9(Xtensive.Core.Tuples.Tuple arg2, Xtensive.Storage.Linq.Materialization.ItemMaterializationContext arg3) Line 46 + 0x32 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Linq.Materialization.MaterializationHelper.Materialize<Diartis.KLIB.Model.DelictAgeType>.AnonymousMethod__3(Xtensive.Core.Tuples.Tuple tuple) Line 117 + 0x70 bytes C#
System.Core.dll!System.Linq.Enumerable.WhereSelectEnumerableIterator<Xtensive.Core.Tuples.Tuple,Diartis.KLIB.Model.DelictAgeType>.MoveNext() + 0xee bytes
Xtensive.Core.dll!Xtensive.Core.EnumerableExtensions.Batch<Diartis.KLIB.Model.DelictAgeType>(System.Collections.Generic.IEnumerable<Diartis.KLIB.Model.DelictAgeType> source, int firstFastCount, int initialBatchSize, int maximalBatchSize) Line 498 + 0x1a3 bytes C#
Xtensive.Core.dll!Xtensive.Core.EnumerableExtensions.ApplyBeforeAndAfter<Diartis.KLIB.Model.DelictAgeType>(System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable<Diartis.KLIB.Model.DelictAgeType>> source, System.Action beforeAction, System.Action afterAction) Line 594 + 0x2f bytes C#
Xtensive.Storage.dll!Xtensive.Storage.TransactionalExtensions.ToTransactional<System.Collections.Generic.IEnumerable<Diartis.KLIB.Model.DelictAgeType>>.MoveNext() Line 327 + 0x1e2 bytes C#
System.Core.dll!System.Linq.Enumerable.SelectManyIterator<System.Collections.Generic.IEnumerable<Diartis.KLIB.Model.DelictAgeType>,Diartis.KLIB.Model.DelictAgeType>.MoveNext() + 0x242 bytes
mscorlib.dll!System.Collections.Generic.List<Diartis.KLIB.Model.DelictAgeType>.List(System.Collections.Generic.IEnumerable<Diartis.KLIB.Model.DelictAgeType> collection) + 0x1d8 bytes
System.Core.dll!System.Linq.Enumerable.ToList<Diartis.KLIB.Model.DelictAgeType>(System.Collections.Generic.IEnumerable<Diartis.KLIB.Model.DelictAgeType> source) + 0x50 bytes
KLIBDatabase.dll!Diartis.KLIB.Model.DelictAgeType.GetDefaultDelictAgeType(bool mandatory) Line 130 + 0x11 bytes C#
KLIBDatabase.dll!Diartis.KLIB.Model.DelictAgeType.DefaultOrNull.get() Line 115 + 0x7 bytes C#
KLIBDatabase.dll!Diartis.KLIB.Model.Dossier.InitializeMembers(Diartis.KLIB.Model.DossierCreateArguments createArgumentsIn) Line 1060 + 0x13 bytes C#
KLIBDatabase.dll!Diartis.KLIB.Model.Dossier.OnInitialize() Line 1036 + 0x16 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Entity.SystemInitialize(bool materialize) Line 478 + 0x1a bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Persistent.Initialize(System.Type ctorType) Line 747 + 0x14 bytes C#
KLIBDatabase.dll!Diartis.KLIB.Model.Dossier.Dossier() Line 1023 + 0x20 bytes C#
KLIBViewModel.dll!Diartis.KLIB.KLIBViewModel.VMDossier.CreateDossier() Line 1748 + 0x25 bytes C#
Updated at 22.07.2010 7:44:32
Hi,
There's definitly something going wrong with transaction handling. This exception is thrown after creating a new Relation for an Organization.
This time we did issue an ApplyChanges().
Regards
Paul Sinnema
Diartis AG
Exception:
A transaction is running, but there should be no active transaction.
StackTrace:
> Xtensive.Storage.dll!Xtensive.Storage.DisconnectedState.EnsureNoTransaction() Line 511 C#
Xtensive.Storage.dll!Xtensive.Storage.DisconnectedState.ApplyChanges(Xtensive.Storage.Session targetSession) Line 195 + 0xc bytes C#
Xtensive.Storage.dll!Xtensive.Storage.DisconnectedState.ApplyChanges() Line 184 + 0x28 bytes C#
KLIBDatabase.dll!Diartis.KLIB.Model.ModelContext.SaveChanges() Line 363 + 0x30 bytes C#
KLIBViewModel.dll!Diartis.KLIB.KLIBViewModel.VMContext.SaveChanges() Line 84 + 0x1c bytes C#
KLIBBase.dll!Diartis.KLIB.KLIBContext.SaveChanges() Line 289 + 0x21 bytes C#
KLIBBase.dll!Diartis.KLIB.KLIBContext.OnSave(object target, System.Windows.Input.ExecutedRoutedEventArgs e) Line 101 + 0x1c bytes C#
PresentationCore.dll!System.Windows.Input.CommandBinding.OnExecuted(object sender, System.Windows.Input.ExecutedRoutedEventArgs e) + 0xe2 bytes
PresentationCore.dll!System.Windows.Input.CommandManager.ExecuteCommandBinding(object sender, System.Windows.Input.ExecutedRoutedEventArgs e, System.Windows.Input.CommandBinding commandBinding) + 0xd2 bytes
PresentationCore.dll!System.Windows.Input.CommandManager.FindCommandBinding(System.Windows.Input.CommandBindingCollection commandBindings, object sender, System.Windows.RoutedEventArgs e, System.Windows.Input.ICommand command, bool execute) + 0x100 bytes
PresentationCore.dll!System.Windows.Input.CommandManager.FindCommandBinding(object sender, System.Windows.RoutedEventArgs e, System.Windows.Input.ICommand command, bool execute) + 0x234 bytes
PresentationCore.dll!System.Windows.Input.CommandManager.OnExecuted(object sender, System.Windows.Input.ExecutedRoutedEventArgs e) + 0x3a bytes
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x53 bytes
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source, System.Windows.RoutedEventArgs args, bool reRaised) + 0x271 bytes
PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender, System.Windows.RoutedEventArgs args) + 0x14e bytes
PresentationCore.dll!System.Windows.Input.RoutedCommand.ExecuteImpl(object parameter, System.Windows.IInputElement target, bool userInitiated) + 0x17f bytes
KLIBControlLibrary.dll!Diartis.KLIB.KLIBControlLibrary.StandardControls.KLIBOverviewControl.ViewItemSelecting(object sender, DevExpress.Xpf.NavBar.NavBarItemSelectingEventArgs e) Line 90 + 0x42 bytes C#
[Native to Managed Transition]
mscorlib.dll!System.Delegate.DynamicInvokeImpl(object[] args) + 0x6f bytes
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0xc3 bytes
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x53 bytes
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source, System.Windows.RoutedEventArgs args, bool reRaised) + 0x271 bytes
PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender, System.Windows.RoutedEventArgs args) + 0x14e bytes
DevExpress.Xpf.NavBar.v10.1.dll!DevExpress.Xpf.NavBar.NavBarGroup.CoerceSelectedItemCore(DevExpress.Xpf.NavBar.NavBarItem newItem, DevExpress.Xpf.NavBar.NavBarItem oldItem) + 0x239 bytes
DevExpress.Xpf.NavBar.v10.1.dll!DevExpress.Xpf.NavBar.NavBarGroup.CoerceSelectedItem(DevExpress.Xpf.NavBar.NavBarItem newItem) + 0x5a bytes
DevExpress.Xpf.NavBar.v10.1.dll!DevExpress.Xpf.NavBar.NavBarGroup.CoerceSelectedItem(System.Windows.DependencyObject d, object value) + 0x5f bytes
WindowsBase.dll!System.Windows.DependencyObject.ProcessCoerceValue(System.Windows.DependencyProperty dp, System.Windows.PropertyMetadata metadata, ref System.Windows.EntryIndex entryIndex, ref int targetIndex, ref System.Windows.EffectiveValueEntry newEntry, ref System.Windows.EffectiveValueEntry oldEntry, ref object oldValue, object baseValue, object controlValue, System.Windows.CoerceValueCallback coerceValueCallback, bool coerceWithDeferredReference, bool coerceWithCurrentValue, bool skipBaseValueChecks) + 0x109 bytes
WindowsBase.dll!System.Windows.DependencyObject.UpdateEffectiveValue(System.Windows.EntryIndex entryIndex, System.Windows.DependencyProperty dp, System.Windows.PropertyMetadata metadata, System.Windows.EffectiveValueEntry oldEntry, ref System.Windows.EffectiveValueEntry newEntry, bool coerceWithDeferredReference, bool coerceWithCurrentValue, System.Windows.OperationType operationType) + 0x93e bytes
WindowsBase.dll!System.Windows.DependencyObject.SetValueCommon(System.Windows.DependencyProperty dp, object value, System.Windows.PropertyMetadata metadata, bool coerceWithDeferredReference, bool coerceWithCurrentValue, System.Windows.OperationType operationType, bool isInternal) + 0x31e bytes
WindowsBase.dll!System.Windows.DependencyObject.SetValue(System.Windows.DependencyProperty dp, object value) + 0xa1 bytes
DevExpress.Xpf.NavBar.v10.1.dll!DevExpress.Xpf.NavBar.NavBarGroup.SelectedItem.set(DevExpress.Xpf.NavBar.NavBarItem value) + 0x3f bytes
KLIBControlLibrary.dll!Diartis.KLIB.KLIBControlLibrary.StandardControls.KLIBNavBarControl.SelectItem(Diartis.KLIB.KLIBControlLibrary.StandardControls.KLIBNavBarItem item) Line 22 + 0x17 bytes C#
KLIBControlLibrary.dll!Diartis.KLIB.KLIBControlLibrary.StandardControls.KLIBNavBarControl.SelectItem(object item) Line 36 + 0xf bytes C#
KLIBControlLibrary.dll!Diartis.KLIB.KLIBControlLibrary.StandardControls.KLIBOverviewControl.AddItem(object sender, Diartis.KLIB.KLIBLibrary.ObservableListChangedEventArgs e) Line 369 + 0x26 bytes C#
KLIBControlLibrary.dll!Diartis.KLIB.KLIBControlLibrary.StandardControls.KLIBOverviewControl.OnListChangedObservable(object sender, Diartis.KLIB.KLIBLibrary.ObservableListChangedEventArgs e) Line 321 + 0x11 bytes C#
KLIBLibrary.dll!Diartis.KLIB.KLIBLibrary.KLIBEvent<Diartis.KLIB.KLIBLibrary.ObservableListChangedEventArgs>.Call(object sender, Diartis.KLIB.KLIBLibrary.ObservableListChangedEventArgs args) Line 90 + 0x29 bytes C#
KLIBLibrary.dll!Diartis.KLIB.KLIBLibrary.ObservableList<Diartis.KLIB.KLIBViewModel.VMContactRelationRole>.OnListChanged(object sender, Diartis.KLIB.KLIBLibrary.ObservableListChangedEventArgs e) Line 322 + 0x3c bytes C#
KLIBLibrary.dll!Diartis.KLIB.KLIBLibrary.RelatedList<Diartis.KLIB.KLIBViewModel.VMContactRelationRole,Diartis.KLIB.Model.ContactRelationRole>.OnListChanged(object sender, Diartis.KLIB.KLIBLibrary.ObservableListChangedEventArgs e) Line 306 + 0x1a bytes C#
KLIBLibrary.dll!Diartis.KLIB.KLIBLibrary.ObservableList<Diartis.KLIB.KLIBViewModel.VMContactRelationRole>.Insert(int index, Diartis.KLIB.KLIBViewModel.VMContactRelationRole item) Line 595 + 0x78 bytes C#
KLIBLibrary.dll!Diartis.KLIB.KLIBLibrary.RelatedList<Diartis.KLIB.KLIBViewModel.VMContactRelationRole,Diartis.KLIB.Model.ContactRelationRole>.AddItems(System.Collections.IList trackedItems, int startIndex) Line 240 + 0xf5 bytes C#
KLIBLibrary.dll!Diartis.KLIB.KLIBLibrary.RelatedList<Diartis.KLIB.KLIBViewModel.VMContactRelationRole,Diartis.KLIB.Model.ContactRelationRole>.TrackedListListChanged(object sender, Diartis.KLIB.KLIBLibrary.ObservableListChangedEventArgs e) Line 150 + 0x4f bytes C#
KLIBViewModel.dll!Diartis.KLIB.KLIBViewModel.VMRelatedEntityList<Diartis.KLIB.KLIBViewModel.VMContactRelationRole,Diartis.KLIB.Model.ContactRelationRole>.TrackedListListChanged(object sender, Diartis.KLIB.KLIBLibrary.ObservableListChangedEventArgs e) Line 92 + 0x11 bytes C#
KLIBLibrary.dll!Diartis.KLIB.KLIBLibrary.KLIBEvent<Diartis.KLIB.KLIBLibrary.ObservableListChangedEventArgs>.Call(object sender, Diartis.KLIB.KLIBLibrary.ObservableListChangedEventArgs args) Line 90 + 0x29 bytes C#
KLIBLibrary.dll!Diartis.KLIB.KLIBLibrary.ObservableList<Diartis.KLIB.Model.ContactRelationRole>.OnListChanged(object sender, Diartis.KLIB.KLIBLibrary.ObservableListChangedEventArgs e) Line 322 + 0x3c bytes C#
KLIBLibrary.dll!Diartis.KLIB.KLIBLibrary.ObservableList<Diartis.KLIB.Model.ContactRelationRole>.Add(Diartis.KLIB.Model.ContactRelationRole item) Line 1070 + 0x93 bytes C#
KLIBDatabase.dll!Diartis.KLIB.Model.ObservableEntityList<Diartis.KLIB.Model.ContactRelationRole>.EntitySetCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) Line 400 + 0x1c bytes C#
Xtensive.Storage.dll!Xtensive.Storage.EntitySetBase.NotifyCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedAction action, Xtensive.Storage.Entity item) Line 332 + 0x84 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.EntitySetBase.SystemAdd(Xtensive.Storage.Entity item) Line 207 + 0x17 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.EntitySetBase.Add(Xtensive.Storage.Entity item, Xtensive.Storage.PairIntegrity.SyncContext syncContext) Line 442 + 0x14 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.EntitySetBase.Add(Xtensive.Storage.Entity item) Line 400 + 0x10 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.EntitySetBase.Add(Xtensive.Storage.IEntity item) Line 513 + 0x28 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.EntitySet<Diartis.KLIB.Model.ContactRelationRole>.Add(Diartis.KLIB.Model.ContactRelationRole item) Line 100 + 0x19 bytes C#
KLIBDatabase.dll!Diartis.KLIB.Model.Contact.AddContactRelationRole(Diartis.KLIB.Model.ContactRelationRoleCreateArguments createArguments) Line 809 + 0x21 bytes C#
KLIBDatabase.dll!Diartis.KLIB.Model.Contact.AddContactRelationRole() Line 800 + 0xb bytes C#
KLIBViewModel.dll!Diartis.KLIB.KLIBViewModel.VMContact.AddNewContactRelationRole() Line 1104 + 0x23 bytes C#
KLIBViewModel.dll!Diartis.KLIB.KLIBViewModel.VMContact.VMContactContactRelationRoleFactory.Create() Line 1114 + 0x20 bytes C#
KLIBMasksContact.dll!Diartis.KLIB.Masks.Organization.KLIBOrganizationMainPanel.OnNewContactRelationRole(object target, System.Windows.Input.ExecutedRoutedEventArgs e) Line 50 + 0x14 bytes C#
Updated at 22.07.2010 8:44:15
The second case is not a bug: ApplyChanges call is "induced" by your event chain, but it can be executed only when all transactions (all = nested + outermost) created after attachment are closed.
So here you should simply ensure it isn't called in this case - i.e. you must postpone this operation until all transactions are closed.
Thinking about the first case...
I'm not so shure. We don't open Transactions ourselves.
During our AddContactRelationRole() it seems that a Transaction is opened. Possibly by PostSharp injected code. Below you see the stack at the moment the TransAction is opened in DO's Xtensive.Transaction.Begin(...) method. In the code snippet below you can see what Reflector discovers in our method. We realy don't want to open a Transaction when Adding an Entity to a list.
Regards
Paul Sinnema
Diartis AG
Xtensive.Storage.dll!Xtensive.Storage.Transaction.Begin() Line 157 C#
Xtensive.Storage.dll!Xtensive.Storage.Session.OpenTransactionScope(Xtensive.Storage.Transaction transaction) Line 254 + 0x18 bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Session.CreateOutermostTransaction(System.Transactions.IsolationLevel isolationLevel) Line 239 + 0xf bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Session.OpenTransaction(Xtensive.Storage.TransactionOpenMode mode, System.Transactions.IsolationLevel isolationLevel) Line 73 + 0x4b bytes C#
Xtensive.Storage.dll!Xtensive.Storage.Transaction.Open(Xtensive.Storage.Session session, Xtensive.Storage.TransactionOpenMode mode) Line 119 + 0x1c bytes C#
Xtensive.Storage.dll!Xtensive.Storage.TransactionalAttribute.OnEntry(PostSharp.Aspects.MethodExecutionArgs args) Line 165 + 0x35 bytes C#
> KLIBDatabase.dll!Diartis.KLIB.Model.Contact.AddContactRelationRole() Line 799 + 0x47 bytes C#
KLIBViewModel.dll!Diartis.KLIB.KLIBViewModel.VMContact.AddNewContactRelationRole() Line 1104 + 0x23 bytes C#
KLIBViewModel.dll!Diartis.KLIB.KLIBViewModel.VMContact.VMContactContactRelationRoleFactory.Create() Line 1114 + 0x20 bytes C#
KLIBMasksContact.dll!Diartis.KLIB.Masks.Person.KLIBPersonMainPanel.OnNewContactRelationRole(object target, System.Windows.Input.ExecutedRoutedEventArgs e) Line 51 + 0x14 bytes C#
public ContactRelationRole AddContactRelationRole()
{
ContactRelationRole CS$1$1__returnValue;
MethodExecutionArgs CS$0$2__aspectArgs = new MethodExecutionArgs(this, null);
<>z__Aspects.a3607.OnEntry(CS$0$2__aspectArgs);
try
{
ContactRelationRole CS$1$0000 = this.AddContactRelationRole(null);
CS$1$1__returnValue = CS$1$0000;
<>z__Aspects.a3607.OnSuccess(CS$0$2__aspectArgs);
}
finally
{
<>z__Aspects.a3607.OnExit(CS$0$2__aspectArgs);
}
return CS$1$1__returnValue;
}
Updated at 22.07.2010 11:34:07
Ok, That's a concept we've not yet seen.
You're right. We call the SaveChanges() (ApplyChanges()) from the View at the moment a new Entity is added to the NavBar control. This happens during the Add() to the List. The EntitySet probably raises an event the moment the list changes and that causes the chain to become active.
This thread was imported from our support forum. The original discussion may contain more detailed answer.