So I get this strange stack overflow exception which is really driving me nuts... I noticed a few related bugs (e.g. http://community.codesmithtools.com/forums/p/6006/23350.aspx#23350) but it doesn't seem like the same problem.
The Problem:
When loading a list of Accessory Entities I get a stack overflow exception, but only when related data is loaded.
The code:
private void DisplayAccessoryOptions(MarketAccessoriesGroup datasource)
{
//The call below causes a stack overflow only if ProcessSelection(...) has been called first.
TList<Accessory> accessories = DataRepository.AccessoryProvider.GetByMarketAccessoriesGroupIdMarketId(datasource.Id, datasource.MarketId);
}
private List<MarketProduct> ProcessSelection(SelectionContext orderSpecification)
{
List<MarketProduct> result = new List<MarketProduct>(orderSpecification.SelectedAccessories.Values.Count);
foreach (Accessory selectedAccessory in orderSpecification.SelectedAccessories.Values)
{
MarketProduct resultItem = selectedAccessory.EanMarketIdSource;
if (resultItem == null)
{
resultItem = DataRepository.MarketProductProvider.GetByEanMarketId(selectedAccessory.Ean, selectedAccessory.MarketId);
//If the line below is omitted, no stack overflow occurs.
selectedAccessory.EanMarketIdSource = resultItem;
}
resultItem.Accessory = selectedAccessory;
result.Add(resultItem);
}
return result;
}
The callstack:
> MyNamespace.Entities.DLL!MyNamespace.Entities.EntityHelper.GetBindableProperties(System.Type type = {Name = Cannot evaluate expression because the current thread is in a stack overflow state. FullName = Cannot evaluate expression because the current thread is in a stack overflow state.}) Line 391 + 0x9 bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.ListBase<MyNamespace.Entities.Market>.InitializeList() Line 62 + 0x3c bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.ListBase<MyNamespace.Entities.Market>.ListBase() Line 53 + 0x8 bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.TList<MyNamespace.Entities.Market>.TList() Line 25 + 0x8 bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.TList<MyNamespace.Entities.Market>.Copy() Line 121 + 0x3f bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.TList<MyNamespace.Entities.Market>.Clone() Line 112 + 0xa bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.MarketProductBase.MakeCopyOf(object x = Count = Cannot evaluate expression because the current thread is in a stack overflow state.) Line 820 + 0x14 bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.MarketProductBase.Copy() Line 785 + 0x16 bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.MarketProductBase.Clone() Line 806 + 0xa bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.AccessoryBase.MakeCopyOf(object x = {MyNamespace.Entities.MarketProduct}) Line 537 + 0x14 bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.AccessoryBase.Copy() Line 509 + 0x17 bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.AccessoryBase.Clone() Line 523 + 0xa bytes C#
[Loop Begin]
MyNamespace.Entities.DLL!MyNamespace.Entities.MarketProductBase.MakeCopyOf(object x = {MyNamespace.Entities.Accessory}) Line 820 + 0x14 bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.MarketProductBase.Copy() Line 789 + 0x16 bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.MarketProductBase.Clone() Line 806 + 0xa bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.AccessoryBase.MakeCopyOf(object x = {MyNamespace.Entities.MarketProduct}) Line 537 + 0x14 bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.AccessoryBase.Copy() Line 509 + 0x17 bytes C#
MyNamespace.Entities.DLL!MyNamespace.Entities.AccessoryBase.Clone() Line 523 + 0xa bytes C#
[Loop End]
[Lather, rinse, repeat...]
The database model:
