所以说我有2个实体,Post
和PostHistory
。每当我创建或编辑帖子时,我都想创建一个完整的帖子PostHistory
来记录对帖子所做的所有更改。假设post实体具有以下定义:
public class Post
{
public int Id { get; set; }
public string Text { get; set; }
public virtual ICollection<PostHistory> PostHistory{ get; set; }
}
当我创建第一个Post
时出现问题。例如,如果我试试这个:
Post post = new Post { Text = "Blah" };
context.Posts.Add(post);
PostHistory history = new PostHistory { Text = "Blah"};
context.PostHistory.Add(history);
post.PostHistory.Add(history);
这将失败,因为post
和history
都是新实体,Post.PostHistory
由于尚未初始化而为空。我能看到这样做的唯一方法是先将post
提交给db,然后将history
提交到数据库,但我不明白为什么要为此执行2个单独的插入操作。
如果我有一个将ICollection
初始化为List<T>
的构造函数,一切正常,但强制执行到List<T>
会导致其他问题,几乎没有代码优先的教程会这样做强迫启动。
那么处理这种情况的最佳方法是什么?
答案 0 :(得分:4)
您可以在客户端代码中初始化列表:
Post post = new Post
{
Text = "Blah"
PostHistory = new List()
{
new PostHistory { Text = "Blah" }
}
};
context.Posts.Add(post);
context.SaveChanges();
但是,在构造函数中初始化集合没有任何问题,实际上建议使用它,因为它使您不必在所有客户端代码中初始化它。