在EF 6 Code First中保存一次列表

时间:2014-05-01 14:20:21

标签: c# entity-framework ef-code-first

在着名的Blog/Post example中,我们看到了Blog实体的保存方式。

public class Blog 
{ 
     public int BlogId { get; set; } 
     public string Name { get; set; } 

     public virtual List<Post> Posts { get; set; } 
} 

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

     public int BlogId { get; set; } 
     public virtual Blog Blog { get; set; } 
}

保存博客很简单:

        var blog = new Blog { Name = name }; 
        db.Blogs.Add(blog); 
        db.SaveChanges(); 

但我不确定如何保存Post,因为它是一个List。

我做的是:

            foreach (var item in Posts)
            {
                Post p = new Post();
                p.Title = item.Title;
                p.Content = item.Content;
                SaveChanges();
            }

它当然是有效的,但如果Posts包含许多项目,那么我们必须保存很多次。这是低效的,我们怎么能只保存一次呢?

1 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点,可以通过添加到blog.Posts并让Entity Framework自动设置外键:

Blog blog = new Blog 
{ 
    Name = name,
    Posts = new List<Post>()
}; 

foreach (var item in posts)
{
    Post p = new Post();
    p.Title = item.Title;
    p.Content = item.Content;

    blog.Posts.Add(p);
}

db.Blogs.Add(blog); 
db.SaveChanges(); 

或直接添加到帖子表:

// assuming you have a reference to the blog id in blogId

foreach (var item in posts)
{
    Post p = new Post();
    p.BlogId = blogId;
    p.Title = item.Title;
    p.Content = item.Content;

   db.Posts.Add(p);
}

db.SaveChanges();

您可以根据需要添加任意数量的项目,但随后调用SaveChanges()一次,它只会进行一次数据库访问。