3

私は次のエンティティモデルを持っています:

エンティティ モデル

一連のタスクを追加し、これらのタスクの処理を開始します。各タスクの完了後、それに関する情報をログに記録したいと考えています。

私は次のコードでそうします:

TASK scheduledTask = entities.TASKs.First(x => x.TASK_NAME == e.ClassName);
scheduledTask.NEXT_RUN = e.NextRun;
entities.SaveChanges();

TASK_LOG logMsg = new TASK_LOG()
{
    TASK = scheduledTask,
    MESSAGE = e.TaskResult.Message,
    STATUS = e.TaskResult.Status ? "Successful" : "Failure",
    TIMESTAMP = e.CompletedTime
};
entities.TASK_LOG.AddObject(logMsg);
entities.SaveChanges();

ただし、TASK_LOG オブジェクトの ID プロパティを変更できないという例外が発生します。logMsgコードでオブジェクト ID プロパティを変更する方法がわかりません。

注: 両方のエンティティの ID プロパティはデータベースによって生成され、StoreGeneratedPatternID に設定されます。

編集:

2 回目の実行 - 最初の呼び出しで接続が開いている/利用可能であるというエラーが表示されSaveChangesます。

3 回目の実行 - エラー Store update、insert、または delete ステートメントを取得すると、予期しない行数 (0) に影響しました。最後のSaveChanges電話で。

このエラーの不一致により、修正が困難になっています。

4

1 に答える 1

0

AddObject を介してコンテキストにアタッチされる前に logMsg.TASK プロパティを設定しているため、問題が発生している可能性があります。外部キーにアクセスできるので、TASK ナビゲーション プロパティの代わりに TASK_ID プロパティを使用して参照を作成することをお勧めします。logMsg を次のコードに置き換えてみてください:

TASK_LOG logMsg = new TASK_LOG()
{
    TASK_ID = scheduledTask.ID,
    MESSAGE = e.TaskResult.Message,
    STATUS = e.TaskResult.Status ? "Successful" : "Failure",
    TIMESTAMP = e.CompletedTime
};
于 2012-08-02T04:36:20.380 に答える