カスタム/非データベースプロパティを含むレコードを更新すると、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));
...
}
いつもあなたの助けに感謝します!