0

私はリポジトリモデルの方法を持っています:-

public void InsertOrUpdateServer(TMSServer server, string username,long assetid)
{
  var resource = GetResourceDetials(assetid);
  if (server.ServerID == default(int))
  {
    //code goes here>>>>>>>>.......>>>
  }
  else
  {
    // Existing entity
    var auditinfo = IntiateAudit(
                      tms.AuditActions.SingleOrDefault(
                        a => a.Name.ToUpper() == "EDIT").ActionID,
                          tms.TechnologyTypes.SingleOrDefault(
                            a => a.Name.ToUpper() == "Server").AssetTypeID,
                              username, server.ServerID
                     );

    server.IT360SiteID = resource.SITEID.Value;
    tms.Entry(server).State = EntityState.Modified; // this will raise the esception         
    InsertOrUpdateAudit(auditinfo);
  }
}

しかし、このメソッドが呼び出されると、次の例外が発生します:-

tms.Entry(server).State = EntityState.Modified;

同じキーを持つオブジェクトが ObjectStateManager に既に存在します。ObjectStateManager は、同じキーを持つ複数のオブジェクトを追跡できません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.InvalidOperationException: 同じキーを持つオブジェクトが ObjectStateManager に既に存在します。ObjectStateManager は、同じキーを持つ複数のオブジェクトを追跡できません。

ソース エラー: 行 1046: ユーザー名、server.ServerID); 行 1047: server.IT360SiteID = resource.SITEID.Value;///// 行 1048:
tms.Entry(server).State = EntityState.Modified; 1049 行目:
// tms.Entry(technologyIP).State = EntityState.Modified; 行 1050:
InsertOrUpdateAudit(auditinfo);

したがって、この問題の原因を突き止めることはできません。なぜなら、serverv という名前のオブジェクトを 1 つしか追跡していないからです?? 誰が何が起こっているかについてアドバイスできますか?

4

0 に答える 0