Entity Framework (EF) を使用して、データベースからオブジェクトを読み込み、変更して保存したいと考えています。ただし、読み込みと保存は異なるコンテキストで発生するため、別のオブジェクトをオブジェクトのコレクション プロパティに追加して変更します。
MSDNの有名なブログ/投稿の例に基づいて、次のコードを検討してください。
Blog blog;
using (BloggingContext db = new BloggingContext())
{
blog = db.Blogs.Include("Posts").Single();
}
// No one else knows the `post` object directly.
{
Post post = new Post {Blog = blog, Title = "Title", Content = "Content"};
blog.Posts.Add(post);
}
using (BloggingContext db = new BloggingContext())
{
// No idea what I have to do before saving...
// Can't do anything with `post` here, since this part will not know this
// object directly.
//db.Blogs.Attach(blog); // throws an InvalidOperationException
db.SaveChanges();
}
私のデータベースにはBlog
、100 個のオブジェクトが 1 つありますPost
。ご覧のとおり、Post
これに新しい を追加したいと思いBlog
ます。残念ながら、保存する前に次のことわざdb.Blogs.Attach(blog);
をスローします。InvalidOperationException
EF がこのブログを更新できるようにするには、どうすればよいですか?
アップデート:
私が達成しようとしていたこと (エンティティのデータベース更新を変更とそれに関連する子エンティティから分離すること) は不可能だと思います。代わりに、現在は反対の方向がより実現可能であると考えています。つまり、子エンティティの更新/作成を親エンティティから分離します。これは、次の方法で行うことができます。
Blog blog;
using (BloggingContext db = new BloggingContext())
{
blog = db.Blogs.Single();
}
Post post = new Post {BlogId = blog.BlogId, Title = "Title", Content = "..."};
using (BloggingContext db = new BloggingContext())
{
db.Posts.Add(post);
db.SaveChanges();
}