更新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));
            ...
            }

一如既往地感谢您的帮助!

更新LINQ记录时出现StackOverFlowException

似乎这一行可能是问题所在:

return (TaskTemplateRecord ?? new ProjectTask()).UnitTypeId;

我猜你展示的代码在哪个类中。如果UnitTypeIdProjectTask类的属性,那么如果TaskTemplateRecord为空,则在这里创建一个新的ProjectTask,并且它将继续创建新类,最终导致StackOverflowException .

也许这个方法会起作用:

if (TaskTemplateRecord != null)
    return TaskTemplateRecord.UnitTypeId;
else
   return 0; // some default value rather than creating the class again
相关文章:
  • 没有找到相关文章