2017-03-02 8 views

答えて

1

私は最近このようなことをしました。通常のDbContextには分離されたメソッドがないので、私はそれを追加しました。

public void Detach<T>(T entity) 
    where T : class 
{ 
    Entry(entity).State = EntityState.Detached; 
} 

次は、エンティティを切り離してリセットする方法を作成しました。私は1つのエンティティに対して特別に作成しましたが、コンセプトはこれに似ています。

public void DetachAndResetKeys(Car entity) 
{ 
    // Load references if needed 

    // Detach 
    _dbContext.Detach(entity); 
    // Reset Key. 0 equals not set for int key 
    entity.Id = 0; 

    entity.CarType = null; 
} 

更新:切断時にキーをリセットするには:キーのタイプが異なる場合は、そのタイプのキーも処理する必要があります。ここでのみint

public void Detach<T>(T entity) 
    where T : class 
{ 
    Entry(entity).State = EntityState.Detached; 
    foreach(var prop in Entry(entity).Properties) { 
     if (prop.Metadata.IsKey()) { 
      prop.CurrentValue = 0; 
     } 
    } 
} 
+0

デタッチが自動ですべてのIDをクリアできるかどうかは疑問でした。オブジェクト内のすべてのIDを自動的にクリアする必要があるためです。 – Ellbar

+0

@Ellbarはキーをリセットするデタッチバージョンを追加しました。私はそれをテストしなかったが、それは動作するはずです。同じ方法であなたの参照などをリセットすることができます – Mats391

関連する問題