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

本文关键字:框架 实体 代码 迁移 关系 更新 | 更新日期: 2023-09-27 18:28:59

我使用的是实体框架代码优先迁移。ProfileLanguages之间存在n:n关系(一个Profile可以有许多Languages)。我想知道如果我有语言ID(外键),如何更新配置文件的语言列表。对于1:1的关系(即,如果配置文件只能有1种语言),我可以只更新LanguageID,但对于n:n,我没有要更新的LanguageIID列表,因此这意味着我必须额外访问数据库以检索语言并初始化配置文件对象的Language属性。有什么办法绕过它吗?

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

既然你给这次迁移命名了,我想你想做一些种子化?我将从这个答案开始,这样我们就可以讨论一些代码:

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();
}