使用Entity Framework创建实体的实体

时间:2010-01-18 16:50:36

标签: c# entity-framework ado.net

当实体需要在其中一种方法中创建其他实体时,您如何处理这种情况?我的问题是,由于每个单独的实体都没有访问ObjectContext对象,那个具有AddToBlahs()方法的对象,它无法做到。

例如,拥有一个具有UpdateLinks()方法的Site模型,该方法应该创建属于该站点的Link对象。 UpdateLinks()方法没有ObjectContext。你是做什么?你把它传递给它,就像这样:

public void UpdateLinks(ProjectEntities db) {
    foreach (var link in FetchLinks()) {
        db.AddToLinks(link);
    }
}

还是使用其他模式?

2 个答案:

答案 0 :(得分:2)

您不需要上下文。

由于Site.UpdateLinks正在创建属于该实例的Link个对象该实例将与新的Site建立关联。自动将Link添加到Site.Links 会使LinkSite相同的上下文(如果有)成为新的Site部分。同样,当您保存Link时,{{1}}将与其一起保存。

答案 1 :(得分:1)

不确定Craig Stuntz的答案......链接应附加到上下文,但添加链接到Site.Links不会自动附加它。无论如何,你需要做db.AddToLinks(链接)。

但回答你的问题,ObjectContext管理的最佳模式之一可能就是UnitOfWork模式。通过使用它,您可以使实体“自我意识到它们当前所属的范围”。 查看此article以获取详细说明和实施示例。 您仍然可以将ObjectContext作为参数传递给方法,就像您在示例中所做的那样(作为一个更简单的实现)。