2017-08-14 17 views
0

この問題の記事は複数見つかりましたが、問題は少し異なり、私のシナリオ。エンティティフレームワーク:同じタイプの別のエンティティが既に同じプライマリキー値を持っているため、タイプ「MODELNAME」のエンティティをアタッチできませんでした

  1. 私はデータベースによって2つの異なるスキーマを持っています。例えばPreSchool.Students & School.Students。また、私たちの要件によっては、Studentsテーブルでは、プライマリキーを含めて安心です。私ははっきりエンティティごとにtableName & SchemaNameを設定

    var wouldBeUpdatedStudent = await context.Students 
          .FindAsync(student.StudentIdentity).ConfigureAwait(false); 
    wouldBeUpdatedStudent = student; //updated student object 
    context.Entry(wouldBeUpdatedStudent).State = EntityState.Modified; // This line throws error 
    var result = await context.SaveChangesAsync().ConfigureAwait(false); 
    
  2. OnModelCreatingの下:私のコードで今すぐ

  3. 、私は 'PreSchool.Students' を使用して、次のコードの記録を更新しています。これにより、エンティティ/モデルの状態を変更するたびに、OnModelCreatingの設定に従って正しいテーブルをキャッチする必要があります。しかし、これは起こっておらず、例外をスローします。

私は学生エンティティにカスケード接続する場合、これが働かないcontext.Students.AsNoTracking()を使用してみました。ただし、同じDDLであるカスケード/子エンティティがあります。例えばcontext.Student.Exams

+0

私は数年前に非常によく似た質問をしました。当時の回答は「Entity FrameworkはSql Serverの異なるスキーマで同じ名前のテーブルをサポートしていません」 –

+0

@SamAxe、幸いにも、私は[この回答](https://stackoverflow.com/a/31771363/659538)を試してくれました。 – Kenz

答えて

0

論理的には、このエラーに対して適切な説明を与える回答は得られませんでした。しかしThis answerが私の問題を解決しました。もう1つは、新しいオブジェクトがエンティティの基盤データベースとまったく同じ値を持っている場合、それがテーブルを更新しないという解決策であると私は考えます。

私は他のスキーマ全体で同じエンティティを入れ子にしているので、私はAsNoTracking()を使用することはできません

context.Set<Student>().AddOrUpdate(wouldBeUpdatedStudent); 
result = await context.SaveChangesAsync().ConfigureAwait(false); 

理由。だから最上位レベルのエンティティでAsNoTracking()を使用しても、子レベルで同じエラーが発生します。 私の質問で述べたのと同じです。

関連する問題