如何使用EF4 Code-First一次创建两个关联实体

时间:2011-02-18 00:54:49

标签: c# entity-framework entity-framework-4 entity-relationship code-first

所以说我有2个实体,PostPostHistory。每当我创建或编辑帖子时,我都想创建一个完整的帖子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);

这将失败,因为posthistory都是新实体,Post.PostHistory由于尚未初始化而为空。我能看到这样做的唯一方法是先将post提交给db,然后将history提交到数据库,但我不明白为什么要为此执行2个单独的插入操作。

如果我有一个将ICollection初始化为List<T>的构造函数,一切正常,但强制执行到List<T>会导致其他问题,几乎没有代码优先的教程会这样做强迫启动。

那么处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

您可以在客户端代码中初始化列表:

Post post = new Post 
{ 
    Text = "Blah" 
    PostHistory = new List() 
    { 
        new PostHistory { Text = "Blah" }
    }
};        
context.Posts.Add(post);
context.SaveChanges();

但是,在构造函数中初始化集合没有任何问题,实际上建议使用它,因为它使您不必在所有客户端代码中初始化它。