切断された (コンテキストからの) モードで Entity Framework POCO を使用したいと考えています。私のシナリオでは、新しい親オブジェクトを作成していて、既存の子オブジェクトをそれにアタッチしてからデータベースに保存したいと考えています。
以下のコードは、既存の Course レコードを新しい Student レコードにリンクしたいのに、新しい Student レコードを保存するときに、望ましくない新しい Course レコードを挿入します。
Entity Frameworkでこれを行うにはどうすればよいですか...
- オブジェクトはコンテキストから切り離すことができます。(つまり、あるコンテキストで照会され、別のコンテキストで保存されます)
- DB から子レコードを再クエリする必要がないので、db に保存するときに親にアタッチできます。メモリ内のオブジェクトとして既にデータベースを持っている場合、データベースへの余分な旅行を避けたいと思っています。
このページは、以下のコードがhttp://entityframeworktutorial.net/EF4_EnvSetup.aspx#.UPMZ4m-UN9Yに基づいているデータベース ダイアグラムを示しています。
class Program
{
static void Main(string[] args)
{
//get existing course from db as disconnected object
var course = Program.getCourse();
//create new student
var stud = new Student();
stud.StudentName = "bob";
//assign existing course to the student
stud.Courses.Add(course);
//save student to db
using (SchoolDBEntities ctx = new SchoolDBEntities())
{
ctx.Students.AddObject(stud);
ctx.SaveChanges();
}
}
static Course getCourse()
{
Course returnCourse = null;
using (var ctx = new SchoolDBEntities())
{
ctx.ContextOptions.LazyLoadingEnabled = false;
returnCourse = (from s in ctx.Courses
select s).SingleOrDefault();
}
return returnCourse;
}
}