在着名的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
包含许多项目,那么我们必须保存很多次。这是低效的,我们怎么能只保存一次呢?
答案 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()一次,它只会进行一次数据库访问。