当我更新其中包含自定义/非数据库属性的记录时,我收到了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));
...
}
一如既往地感谢您的帮助!
答案 0 :(得分:2)
似乎这一行可能是问题所在:
return (TaskTemplateRecord ?? new ProjectTask()).UnitTypeId;
我猜测你所展示的代码属于哪个类。如果UnitTypeId
是ProjectTask
类的属性,那么你在这里创建一个新的ProjectTask
如果TaskTemplateRecord
为null,它将继续创建新类,最终导致StackOverflowException
。
也许这种方法可行:
if (TaskTemplateRecord != null)
return TaskTemplateRecord.UnitTypeId;
else
return 0; // some default value rather than creating the class again