在著名的Blog/Post示例中,我们看到了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,因为它是一个列表。
我所做的是:
foreach (var item in Posts)
{
Post p = new Post();
p.Title = item.Title;
p.Content = item.Content;
SaveChanges();
}
当然,这是可行的,但如果Posts
包含许多项目,那么我们必须保存多次。它效率低下,我们怎么能只保存一次呢?
有两种方法可以做到这一点,要么添加到博客中。张贴并让实体框架自动设置外键:
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();
或者直接添加到Posts表中:
// 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((一次,它只会访问数据库一次。