私のコードがクラッシュしていた理由を理解しようとするのに少し苦労しました。オブジェクトを再接続しようとすると、InvalidOperationExceptionが発生するのはなぜですか?
あなたは、元のメソッドと作業1の両方を見てみると、1つのラインの配置が異なっている
ctx.Inventories.Attach(this);
元のメソッドが動作しないとき、私は困惑だが、もう一つはありません。 誰かが洞察力を提供することはできますか?
私は例外があります。
System.InvalidOperationException:同じキーを持つオブジェクトが既にObjectStateManagerに存在しています。 ObjectStateManagerは、同じキーを持つ複数のオブジェクトを追跡できません。
これは私の元のメソッドここで
public void RemoveDependency(int depId)
{
bool returnValue = false;
if (this.Id != 0 && depId > 0)
{
using (ApsEntities ctx = new ApsEntities())
{
var query2 = from d in ctx.Dependencies
where d.Id == depId
select d;
Dependency found = query2.FirstOrDefault();
if (found != null)
{
**ctx.Inventories.Attach(this);**
ctx.ObjectStateManager.ChangeObjectState(this, EntityState.Modified);
this.Dependencies.Remove(found);
ctx.SaveChanges();
}
}
}
return returnValue;
}
public void RemoveDependency(int depId)
{
bool returnValue = false;
if (this.Id != 0 && depId > 0)
{
using (ApsEntities ctx = new ApsEntities())
{
**ctx.Inventories.Attach(this);**
var query2 = from d in ctx.Dependencies
where d.Id == depId
select d;
Dependency found = query2.FirstOrDefault();
if (found != null)
{
ctx.ObjectStateManager.ChangeObjectState(this, EntityState.Modified);
this.Dependencies.Remove(found);
ctx.SaveChanges();
}
}
}
return returnValue;
}
一般的な控え:定義は「機能しません」。それが例外の場合は、例外を投稿してください。望ましくない動作である場合は、望ましい動作と実際の結果を投稿してください。 –
申し訳ありません、クリス、私はそれを付けました。それは私の心を崩した。 – Lareau