当我更新其中包含自定义/非数据库属性的记录时,出现 StackOverflowException。这些属性查看数据库属性,最重要的是关联记录中的值。
相关记录是问题所在 - TaskTemplateRecord 的集合会被遗忘。
如果我在这里返回 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
为 null,则 ProjectTask
会继续创建新类,最终导致 StackOverflowException
。
也许这种方法会起作用:
if (TaskTemplateRecord != null)
return TaskTemplateRecord.UnitTypeId;
else
return 0; // some default value rather than creating the class again
关于c# - 使用自引用表更新 LINQ 记录时出现 StackOverFlowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13980749/