更新LINQ记录时出现StackOverFlowException
本文关键字:StackOverFlowException LINQ 记录 更新 | 更新日期: 2023-09-27 17:49:18
当我更新其中的自定义/非数据库属性记录时,我将获得StackOverflowException。这些属性查看数据库属性,最重要的是查看关联记录中的值。
关联的记录是问题所在- TaskTemplateRecord的set旋转到遗忘。
如果我在这里返回0,一切正常。我认为下面是调用TaskTemplateRecord一遍又一遍。我就是不明白为什么。
如何解决这个问题?是否有一种方法可以告诉LINQ在更新操作期间跳过这样的属性?
if (this == new ProjectTask()) return 0;
是否有一种方法可以轻松地比较上述值?那也可以。
public int UnitTypeId
{
get
{
//return 0;
//If this is a task template return the actual database value
if (IsTaskTemplate)
return UnitTypeIdPrivate;
//If there is a task template override and UnitTypeId has a value return that
else if (IsTemplateOverride && UnitTypeIdPrivate != 0)
return UnitTypeIdPrivate;
//Else return the value in the task template record.
return (TaskTemplateRecord ?? new ProjectTask()).UnitTypeId;
}
set { UnitTypeIdPrivate = value; }
}
这是StackOverFlowException被抛出的地方。
public ProjectTask()
{
...
this._ProjectTasksUsingThisTemplate = new EntitySet<ProjectTask>(new Action<ProjectTask>(this.attach_ProjectTasksUsingThisTemplate), new Action<ProjectTask>(this.detach_ProjectTasksUsingThisTemplate));
...
}
一如既往地感谢您的帮助!
似乎这一行可能是问题所在:
return (TaskTemplateRecord ?? new ProjectTask()).UnitTypeId;
我猜你展示的代码在哪个类中。如果UnitTypeId
是ProjectTask
类的属性,那么如果TaskTemplateRecord
为空,则在这里创建一个新的ProjectTask
,并且它将继续创建新类,最终导致StackOverflowException
.
也许这个方法会起作用:
if (TaskTemplateRecord != null)
return TaskTemplateRecord.UnitTypeId;
else
return 0; // some default value rather than creating the class again