-1

次のコードを実行しようとすると、常にこのエラーが発生します。

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

これが私のコードです

// find assessmentcase that needs to be updated
var CaseToBeUpdated = db.AssessmentCases
                     .Where(c => c.CaseSeq == score.CaseSeq)
                     .FirstOrDefault();

// create new assessmentcase with updated data                    
AssessmentCase assessmentcase = new AssessmentCase
                                {
                                    CaseSeq = CaseToBeUpdated.CaseSeq,
                                    DateClosed = System.DateTime.Now,
                                    SeqClosedBy = SeqClosedBy,
                                    UserIdClosed = User.Identity.Name,
                                };

// save changes to assessment case table
db.Entry(assessmentcase).State = EntityState.Modified;
db.SaveChanges();

基本的に、テーブル内のデータを更新しようとしていassessmentcaseます。私は何を間違っていますか?

4

2 に答える 2

4

最初の行では、エンティティをメモリにロードして、EF がエンティティの追跡を開始するようにします。次に、同じ CaseSeq (主キーだと思います) を持つ別のエンティティを作成し、それを EF にアタッチしようとします。したがって、同じ主キーを持つ 2 つのエンティティがあります。新しいオブジェクトを作成しないでください。メモリからロードしたものを使用します。

// find assessmentcase that needs to be updated
var CaseToBeUpdated = db.AssessmentCases
                     .Where(c => c.CaseSeq == score.CaseSeq)
                     .FirstOrDefault();

CaseToBeUpdated.DateClosed = System.DateTime.Now;
CaseToBeUpdated.SeqClosedBy = SeqClosedBy;
CaseToBeUpdated.UserIdClosed = User.Identity.Name;

// save changes to assessment case table
db.Entry(CaseToBeUpdated).State = EntityState.Modified;
db.SaveChanges();
于 2013-04-19T15:41:06.083 に答える
2

取得したレコードを単純に更新しないのはなぜですか?

var CaseToBeUpdated = db.AssessmentCases
                 .Where(c => c.CaseSeq == score.CaseSeq)
                 .FirstOrDefault();

// create new assessmentcase with updated data                    
CaseToBeUpdated.DateClosed = System.DateTime.Now;
CaseToBeUpdated.SeqClosedBy = SeqClosedBy;
CaseToBeUpdated.UserIdClosed = User.Identity.Name;

// this should not be necessary ...   
db.Entry(CaseToBeUpdated).State = EntityState.Modified;
// save changes to assessment case table
db.SaveChanges();
于 2013-04-19T15:40:18.017 に答える