Im接続されていない(コンテキストから)モードでEntity Framework POCOを使用したいです。私のシナリオでは、新しいParentオブジェクトを作成していて、それに既存の子オブジェクトをアタッチして、それをdbに保存します。
以下のコードは、新しい生徒記録を保存するときに、新しい生徒記録にリンクされている既存の生徒記録を残したいときに、新しい生徒記録を挿入することが望ましくありません。Entity Framework:新しい親POCOに既存の子POCOを追加し、DB内に新しい子を作成します。
私はオブジェクトが文脈から切り離すことができます...
- 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;
}
}
2番目のオプションはほとんど機能しますが、「オブジェクトコンテキストに既に存在するため、オブジェクトを追加できません」というメッセージが表示されます。 "ctx.Students.AddObject(stud);"のエラーライン。私はまだ「スタッド。コース。追加(コース)」をやっている間、これをやれないと思います。その前に 。スタッドオブジェクトでコースコレクションを引き続き使用したいと思います。 – MakkyNZ
さて、私はそれをテストするのに便利なソリューションはありませんが、まずそれを添付して、それを学生に追加しようとします。うまくいけば、それはEFによって「追加された」とマークされません。 –
これは本当に理想的ではありません。私はそれがまだdbに保存する準備ができていない可能性がありますので、最初にオブジェクトレベルで親子関係が起こってほしいです。 EFが生成し、手動でこれを自分自身で制御するエンティティ間の関係をすべて削除する必要があるかもしれません。 – MakkyNZ