ASP.NETCore和EntityFrameworkCore中ICollection(多对多关系)的更改未保存
创始人
2024-09-17 21:00:48
0

这个问题通常是由于标识实体框架(Core)的默认行为引起的。默认情况下,当从数据库中加载实体后,标识实体框架(Core)将跟踪该实体所引用的所有导航属性。这意味着如果我们加载一个 Product 实体,并且该实体具有一串 Category 实体,则标识实体框架(Core)将跟踪 Product.Categories 实体,并在保存时自动保存更新。

但是,对于多对多关系,我们必须自己更新中间表。在这种情况下,我们需要指定将被忽略的导航属性。我们可以在 OnModelCreating 方法中配置此设置:

modelBuilder.Entity().HasMany(p => p.Categories).WithMany(c => c.Products).UsingEntity(j => j.ToTable("ProductCategories"));

在这里,我们设定了 Product.Categories 和 Category.Products 属性将被忽略,而 UsingEntity 方法会指定中间表的名称。

以下代码示例演示如何使用此方法更新 Product 实体和其关联的 Category 实体:

private readonly ApplicationDbContext _dbContext;

public ProductService(ApplicationDbContext dbContext)
{
    _dbContext = dbContext;
}

public async Task UpdateProductCategoriesAsync(Product product, IEnumerable selectedCategories)
{
    _dbContext.Entry(product).State = EntityState.Modified;
    product.Categories = selectedCategories.ToList();
    await _dbContext.SaveChangesAsync();
}

现在,调用 UpdateProductCategoriesAsync 方法将保存 Product 实体和其关联的 Category 实体,而不会导致未保存的更改。

相关内容

热门资讯

透视真的(德州之星有外挂)微扑... 透视真的(德州之星有外挂)微扑克的辅助工具(详细辅助黑科技教程)原先是有挂您好,德州之星有外挂,确实...
wepoke有辅助挂!poke... wepoke有辅助挂!pokernow怎么开挂,(德州之星)从前是有挂(详细辅助第三方教程);致您一...
透视好友房(WEPoke)外挂... 透视好友房(WEPoke)外挂透明挂辅助神器(wepoke真的有挂)起初存在有挂(详细透视总结教程)...
透视能赢(wpk德州透视辅助)... 透视能赢(wpk德州透视辅助)推扑克辅助器(详细辅助扑克教程)总是真的有挂;小薇(透视辅助)致您一封...
wepoke辅助技巧!fish... wepoke辅助技巧!fishpoker下载,(wEpoKe)原先真的是有挂(详细透视AA德州教程)...
透视有挂(wePOKE)透明挂... 透视有挂(wePOKE)透明挂辅助工具(wepoke是真的有挂)从前是真的有挂(详细透视可靠教程)1...
透视教程(wepoke辅助)w... 透视教程(wepoke辅助)wpk微扑克系统发牌规律(详细辅助力荐教程)本然真的有挂是一款可以让一直...
WePoKe透明挂!gg扑克发... WePoKe透明挂!gg扑克发牌好假,(wpK)果然存在有挂(详细透视我来教教你);亲真的是有正版授...
透视免费(wepOke)外挂透... 透视免费(wepOke)外挂透明挂辅助技巧(WePoKe透视挂)本然有挂(详细透视技巧教程);最新版...
透视美元局(智星德州菠萝辅助器... 透视美元局(智星德州菠萝辅助器)德州专用扑克高科技(详细辅助德州论坛)都是是有挂,您好,智星德州菠萝...