我正在使用 .NET 6 版本和 EF Core 7。 我定义了两个实体:
public class Country
{
public int Id { get; set; }
public string Name { get; set; }
public List<Language> Languages { get; set; }
}
// One language -> Many Countries
public class Language
{
public int Id { get; set; }
public string Name { get; set; }
public List<Country> Countries { get; set; }
}
我的数据库上下文有多对多关系定义:
modelBuilder.Entity<Country>
.HasMany(_ => _.Languages)
.WithMany(_ => _.Countries);
在底层,EF Core 创建链接表 CountryLanguage。 例如,我有一个 ID = 1 的国家/地区和 ID 为:1, 2,3 的语言,并且可以说 ID 为 1 的国家/地区当前链接到 ID 为 1 的语言。这意味着表 CountryLanguage 有一行 CountryId = 1 且 LanguageId = 1.
现在我想更改它,ID = 1 的国家/地区将链接到 ID 为:2 和 3 的语言。 但是当我尝试使用 DbSet for Country 的 Update 方法时,它会添加新链接,但上一个链接不会被删除,结果 我得到 ID=1 的国家/地区,它链接到 ID 为:1、2 和 3 的语言。 这意味着表 CountryLanguage 现在有三行,其中 CountryId = 1 和 LanguageId =1、CountryId = 1 和 LanguageId =2 以及 CountryId = 1 且 LanguageId =3。
期望的行为是获取 ID=1 的国家/地区,该国家/地区仅链接到 ID 为 2 和 3 的语言。 请帮我弄清楚该怎么做。 谢谢你。
您可以与我们分享您的代码吗?
看起来您只是将新项目添加到
Country.Languages
。要删除现有关系,您需要手动执行此操作。例如:_dbContext.Languages.Remove(languageItemToRemove);
最后,别忘了使用
_dbContext.SaveChanges();
。