- Home
- LLBLGen Pro
- LLBLGen Pro Runtime Framework
stack overflow when clearing relation (set fk to null)
Joined: 16-Feb-2006
Greetings,
I'm getting a recursive function call (stack overflow) when I try to set fk to null:
private void btnClearMailbox_Click(object sender, EventArgs e)
{
RoomsEntity room = (RoomsEntity)cm.Current;
if (room==null) return;
if (room.GetCurrentFieldValue((int)RoomsFieldIndex.MailboxId)==DBNull.Value) return;
room.SetNewFieldValue((int)RoomsFieldIndex.MailboxId, null);
room.Save();
UpdateMailboxes();
cm.Refresh();
}
Am I doing this wrong? For context, there are fields mapped on both entities from the relation. The SetNewFieldValue is the crash.
(Self-Servicing, MySQL, Corelabs, LLBLGenPro v1)
Here's an excerpt from the call stack:
[External Code]
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetNewFieldValue(int fieldIndex = 1, object value = null, bool checkForRefetch = false) Line 909 + 0xb bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.DesetupSyncMailboxes(bool signalRelatedEntity = true) Line 1247 + 0x13 bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetupSyncMailboxes(SD.LLBLGen.Pro.ORMSupportClasses.IEntity relatedEntity = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1269 + 0xc bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.set(Abode.Data.EntityClasses.MailboxesEntity value = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1758 + 0xa bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.GetSingleMailboxes(bool forceFetch = false) Line 752 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.get() Line 1741 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.MailboxName.get() Line 1789 + 0xb bytes C#
[External Code]
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetNewFieldValue(int fieldIndex = 1, object value = null, bool checkForRefetch = false) Line 909 + 0xb bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.DesetupSyncMailboxes(bool signalRelatedEntity = true) Line 1247 + 0x13 bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetupSyncMailboxes(SD.LLBLGen.Pro.ORMSupportClasses.IEntity relatedEntity = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1269 + 0xc bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.set(Abode.Data.EntityClasses.MailboxesEntity value = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1758 + 0xa bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.GetSingleMailboxes(bool forceFetch = false) Line 752 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.get() Line 1741 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.MailboxName.get() Line 1789 + 0xb bytes C#
[External Code]
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetNewFieldValue(int fieldIndex = 1, object value = null, bool checkForRefetch = false) Line 909 + 0xb bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.DesetupSyncMailboxes(bool signalRelatedEntity = true) Line 1247 + 0x13 bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetupSyncMailboxes(SD.LLBLGen.Pro.ORMSupportClasses.IEntity relatedEntity = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1269 + 0xc bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.set(Abode.Data.EntityClasses.MailboxesEntity value = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1758 + 0xa bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.GetSingleMailboxes(bool forceFetch = false) Line 752 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.get() Line 1741 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.MailboxName.get() Line 1789 + 0xb bytes C#
[External Code]
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetNewFieldValue(int fieldIndex = 1, object value = null, bool checkForRefetch = false) Line 909 + 0xb bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.DesetupSyncMailboxes(bool signalRelatedEntity = true) Line 1247 + 0x13 bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetupSyncMailboxes(SD.LLBLGen.Pro.ORMSupportClasses.IEntity relatedEntity = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1269 + 0xc bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.set(Abode.Data.EntityClasses.MailboxesEntity value = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1758 + 0xa bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.GetSingleMailboxes(bool forceFetch = false) Line 752 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.get() Line 1741 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.MailboxName.get() Line 1789 + 0xb bytes C#
[External Code]
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetNewFieldValue(int fieldIndex = 1, object value = null, bool checkForRefetch = false) Line 909 + 0xb bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.DesetupSyncMailboxes(bool signalRelatedEntity = true) Line 1247 + 0x13 bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetupSyncMailboxes(SD.LLBLGen.Pro.ORMSupportClasses.IEntity relatedEntity = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1269 + 0xc bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.set(Abode.Data.EntityClasses.MailboxesEntity value = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1758 + 0xa bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.GetSingleMailboxes(bool forceFetch = false) Line 752 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.get() Line 1741 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.MailboxName.get() Line 1789 + 0xb bytes C#
[External Code]
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetNewFieldValue(int fieldIndex = 1, object value = null, bool checkForRefetch = false) Line 909 + 0xb bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.DesetupSyncMailboxes(bool signalRelatedEntity = true) Line 1247 + 0x13 bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetupSyncMailboxes(SD.LLBLGen.Pro.ORMSupportClasses.IEntity relatedEntity = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1269 + 0xc bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.set(Abode.Data.EntityClasses.MailboxesEntity value = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1758 + 0xa bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.GetSingleMailboxes(bool forceFetch = false) Line 752 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.get() Line 1741 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.MailboxName.get() Line 1789 + 0xb bytes C#
[External Code]
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetNewFieldValue(int fieldIndex = 1, object value = null, bool checkForRefetch = false) Line 909 + 0xb bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.DesetupSyncMailboxes(bool signalRelatedEntity = true) Line 1247 + 0x13 bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetupSyncMailboxes(SD.LLBLGen.Pro.ORMSupportClasses.IEntity relatedEntity = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1269 + 0xc bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.set(Abode.Data.EntityClasses.MailboxesEntity value = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1758 + 0xa bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.GetSingleMailboxes(bool forceFetch = false) Line 752 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.get() Line 1741 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.MailboxName.get() Line 1789 + 0xb bytes C#
[External Code]
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetNewFieldValue(int fieldIndex = 1, object value = null, bool checkForRefetch = false) Line 909 + 0xb bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.DesetupSyncMailboxes(bool signalRelatedEntity = true) Line 1247 + 0x13 bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetupSyncMailboxes(SD.LLBLGen.Pro.ORMSupportClasses.IEntity relatedEntity = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1269 + 0xc bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.set(Abode.Data.EntityClasses.MailboxesEntity value = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1758 + 0xa bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.GetSingleMailboxes(bool forceFetch = false) Line 752 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.get() Line 1741 + 0xd bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.MailboxName.get() Line 1789 + 0xb bytes C#
[External Code]
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetNewFieldValue(int fieldIndex = 1, object value = null, bool checkForRefetch = false) Line 909 + 0xb bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.DesetupSyncMailboxes(bool signalRelatedEntity = true) Line 1247 + 0x13 bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.SetupSyncMailboxes(SD.LLBLGen.Pro.ORMSupportClasses.IEntity relatedEntity = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1269 + 0xc bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.Mailboxes.set(Abode.Data.EntityClasses.MailboxesEntity value = {Abode.Data.EntityClasses.MailboxesEntity}) Line 1758 + 0xa bytes C#
Data.dll!Abode.Data.EntityClasses.RoomsEntityBase.GetSingleMailboxes(bool forceFetch = false) Line 752 + 0xd bytes C#
Joined: 17-Aug-2003
Please post the runtime lib build. http://www.llblgen.com/TinyForum/Messages.aspx?ThreadID=7725
Joined: 17-Aug-2003
scotru wrote:
Sorry, it's 1.0.20051.60224
Thanks!
That's not the newest, although I can't find a bugfix which is related to this issue. I pressume it's winforms we're talking about. Is this occuring when you call cm.Refresh? If so, if you comment out that call, what behavior do you miss which is fulfilled with cm.Refresh? Normally you don't need to call the Refresh method of the currencymanager as events already take care of this.
Joined: 17-Aug-2003
I think it's the databinding, though I still find it odd what happens. .NET 1.1 with latest service pack? Or .NET 2.0 ?
The sync/desync doesn't access the property though the stacktrace shows that lazy loading is triggered over and over again.
I can't repro it without databinding:
[Test]
public void DesyncMtoOneTest()
{
OrderEntity o = new OrderEntity(10254);
CustomerEntity c = o.Customers;
Assert.IsNotNull(c);
Assert.IsFalse(c.IsNew);
// reset fk
o.SetNewFieldValue((int)OrderFieldIndex.CustomerId, null);
Assert.IsNull(o.Fields[(int)OrderFieldIndex.CustomerId].CurrentValue);
}
(.NET 1.1, LLBLGen Pro v1.0.2005.1) So without more details about the specific databinding scenario you're using it in (grid/combobox etc.) we can't proceed further.