私はリポジトリモデルの方法を持っています:-
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 つしか追跡していないからです?? 誰が何が起こっているかについてアドバイスできますか?