私はエンティティフレームワークを新しくしているので、ここでは簡単なものを見落としている可能性があります。エンティティフレームワーク:エンティティAを既存のエンティティBにリンクする
私のコントローラクラスでは、新しいカテゴリエンティティをデータベースに追加しています。次に、そのエンティティをCourseエンティティのプロパティとして使用しています。 Courseエンティティを保存すると、CategoryはデータベースAGAINに保存されますが、新しいCourseがすでに挿入されているCategoryを参照することを期待していました。
最初のカテゴリーを保存する(簡体字)、コントローラコード:
// Create and save the category
Category category = new Category {Name = "Test category"};
category = context.Categories.Add(category);
context.SaveChanges(); // The category object now has a CategoryId (the pk of the record)
// Create and save the course
Course course = new Course {
FullDescription = "This is a new course",
Name = "My new course",
Category = category // Hoping this will have EF make a link to the just inserted category
};
context.Courses.Add(course);
context.SaveChanges(); // Saves the Course AND creates a **new** Category in the db
問題は、私は二回()でsaveChangesを呼び出すことのようです。 context.saveChanges()への最初の呼び出しを取り除くと動作しますが、これは私の実際のコードではありません。私のアプリケーションでは、リポジトリパターンを使用し、categoryRepository.AddCategory(カテゴリカテゴリ)を呼び出すことによってカテゴリを追加します。 Courseをセーブするには、saveRange.AddCourse(コースコース)を呼び出して、全く同じ方法でsaveChanges()の呼び出しも含まれています。
public Category AddCategory(Category category)
{
category = context.Categories.Add(category);
context.SaveChanges();
return category;
}
は、私はこれらのアトミック操作になりたいので、AddCourse()とAddCategory()に()でsaveChangesへの呼び出しを削除する必要はありません。
カテゴリを返すと、そのカテゴリを新しいコースのプロパティとして使用すると、そのコースがカテゴリにリンクされていても、それは当てはまりません。どのようにコースをデータベースに既に存在するカテゴリにリンクさせるのですか?
リポジトリ内で別々のコンテキストインスタンスを使用していますか?さもなければあなたのコードは実際に動作します。 – Slauma