EF7はオブジェクトグラフを保存しません

entity-framework-core

質問

私はこれに対する答えを見つけ出すと、私はばかげた気分になるだろうと思うが、EF7がEF6で働いていたのと同じ方法でオブジェクトグラフを保存していない理由を理解できない。

私の状況は:

public class BloggingContext : DbContext, IBloggingContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // Make Blog.Url required
        modelBuilder.Entity<Blog>()
            .Property(b => b.Url)
            .Required();

        modelBuilder.Entity<Post>()
            .Reference(p => p.Blog)
            .InverseCollection(b => b.Posts)
            .ForeignKey(p => p.BlogId);
    }
}

public class Blog
{
    private ICollection<Post> _posts;

    public int BlogId { get; set; }
    public string Url { get; set; }

    public virtual ICollection<Post> Posts
    {
        get
        {
            if (_posts == null)
            { _posts = new Collection<Post>(); }
            return _posts;
        }
        protected set
        { _posts = value; }

    }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }

    public Blog Blog { get; set; }
}

私は次のコードを書く:

using (var db = new BloggingContext())
{
    var blog = new Blog() { Url = DateTime.Now.ToString() };
    blog.Posts.Add(new Post() { Title = "Foo", Content = "Foo" });
    blog.Posts.Add(new Post() { Title = "Bar", Content = "Bar" });

    db.Blogs.Add(blog);
    var count = db.SaveChanges();

    Console.WriteLine("{0} records saved to database", count);

    return blog.BlogId;
}

SaveChangesが呼び出された後、 blogオブジェクトはBlogId持ちますが、2つのPostオブジェクトのBlogIdは-1のままで、データベースに何も追加されません。

受け入れられた回答

呼び出し、EF 7ベータ6のとおりDbSet<T>.Add(obj)のみ追加obj 、エンティティのすべてに関連付けられていないobj

あなたの場合、新しい投稿ごとにdb.Posts.Add(post)を呼び出す必要があります。

この動作は、EF 7 RTMの前に変更される可能性があります。 GitHubでこの問題を見て、このAPIの変更に従うことができます: Add()の動作をグラフ#2726で決定する



Related

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