更新n:n关系中的外键 - 实体框架代码优先迁移

时间:2016-01-04 14:58:22

标签: c# .net entity-framework ef-code-first

我首先使用Entity Framework代码进行迁移。 ProfileLanguages之间存在n:n关系(A Profile可以有很多Languages)。我想知道如果我有语言ID(外键),我如何更新配置文件的语言列表。对于1:1的关系(即,如果Profile只能有1种语言),我可以更新LanguageID但是对于n:n我没有要更新的LanguageID列表,这意味着我必须额外旅行到数据库检索语言并初始化配置文件对象的Language属性。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

既然你标题了这次迁移我会假设你想做某种播种吗?我将从这个答案开始,所以我们有一些代码要讨论:

protected override void Seed(ApplicationContext context)
{
    var languageIds = new List<int> {1,2,3,4};  // FK to language. Are you assigning same list to all profiles?

    var profiles = context.Profiles.Include(p => p.Languages).ToList();
    foreach (var profile in profiles)
    {
        // Since you mention updating, you may need to remove old languages
        if (profiles.Languages.Any())
        { delete children... }

        // add new languages. You could add a test so you only seed when no languages are present
        foreach (var languageId in LanguageIds)
        {
            profile.Add(new Language {LanguageId = languageId};
        }
    }

    context.SaveChanges();
}