我使用的是.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; }
}
字符串
我的DB上下文有一个多对多关系定义:
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的更新方法为国家它添加了新的链接,但以前的链接没有删除,结果我得到了ID=1的国家,它链接到ID的语言:1,2和3.这意味着CountryLanguage表现在有三行,CountryId = 1和LanguageId =1,CountryId = 1和LanguageId =2以及CountryId = 1和LanguageId =3。
所需的行为是获取ID=1的Country,该Country链接到具有ID的Languages:仅2和3。拜托,帮我想想怎么做。- 谢谢-谢谢
1条答案
按热度按时间xienkqul1#
你能和我们分享你的代码吗?
看起来您只是在向
Country.Languages
添加新项。要删除现有关系,您需要手动执行此操作。举例来说:_dbContext.Languages.Remove(languageItemToRemove);
个最后,不要忘记使用
_dbContext.SaveChanges();
。