EF7 / Coreが重複レコードを挿入するのはなぜですか?

c# entity-framework entity-framework-core

質問

私のドメインモデルで私は持っている

class School
{
    public ICollection<Student> Students { get; set; }
}

class Student
{
    public ICollection<Course> Courses { get; set; }
}

class Teacher
{
    public ICollection<Course> Courses { get; set; }
}

class Course
{
    public Student Student { get; set; }

    public Teacher Teacher { get; set; }
}

私はすでに私のデータベースに生徒と先生がいます

学生ID = {C26A6D90-6D36-4CE9-9FF0-5C5BAB6994CC}

教師ID = {26ECCCC6-4A24-4FB2-A406-5021B693EE5E}

そして、私は新しいコースを作りたい

Course c = new Course(student, teacher);
repo.Add(c);
repo.Save();
  1. 同じIDの学校を再作成できないというエラーが表示されます
  2. 同じIDの生徒を再作成できないというエラーが表示されます

基本的には、データベース( StudentTeacher )からレコードを取得し、それらを使用して新しいリレーショナルエンティティ( Course )を作成しようとしています。

{System.Data.SqlClient.SqlException:PRIMARY KEY制約 'PK_Schools'の違反。オブジェクト 'dbo.Schools'に重複キーを挿入できません。重複キーの値は(78434ef7-20db-42c8-448e-08d401d04461)です。ステートメントは終了されました。

これはEF7の問題だと思われます...まだ十分に成熟していないのですか?それが気に入らないからです!

受け入れられた回答

CodeNotFoundに多くのおかげでトロフィーに値する人がいます...

同じDbContextを使用していることを確認する

だからAddTransient<,>AddSingleton<,>に変更しAddTransient<,> AddSingleton<,> 、私のサービスの設定とちょっとプレスト!できます!

この便利なスニペットのD Stanleyにも感謝します。

DIを使用していない人にとって公平であるためには、コースを保存する前に、生徒と教師のオブジェクトをコンテキストに添付することもできます。 Attachは、オブジェクトがデータベースにすでに存在しているため、再度追加しないことをEFに指示します。

あなたがこれを見つけたら、あなたの前に行った人々のために考えを惜しまない!



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ