gpt4 book ai didi

c# - 删除多对多关系中的实体会在关系表中留下孤儿

转载 作者:太空狗 更新时间:2023-10-29 21:54:56 26 4
gpt4 key购买 nike

删除多对多关系的记录时,关系表中有孤立记录。我在我的 DbContext 中设置了以下多对多关系。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Car>()
.HasMany(u => u.Owners)
.WithMany(l => l.Cars)
.Map(ul =>
{
ul.MapLeftKey("CarId");
ul.MapRightKey("OwnerId");
ul.ToTable("CarOwners");
});
}

我的 Owner 模型有虚拟属性(property) Cars:

public virtual ICollection<Car> Cars { get; set; } 

我的汽车模型有虚拟属性(property)所有者:

public virtual ICollection<Owner> Owners { get; set; } 

我删除了一个 Car 如下(db 是我的 DbContext,car 是一个 Car 模型)。

db.Cars.Remove(car);
db.SaveChanges()

当我删除一辆汽车时,我希望表 CarOwners 中具有该 CarId 的所有记录也被删除,但事实并非如此。有什么建议吗?

最佳答案

解决方案是:

ALTER TABLE [dbo].[CarOwners]  WITH CHECK ADD  CONSTRAINT [FK_Car_Owners] FOREIGN KEY([CarId])
REFERENCES [dbo].[Car] ([Id])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[CarOwners] WITH CHECK ADD CONSTRAINT [FK_Owner_Cars] FOREIGN KEY([OwnerId])
REFERENCES [dbo].[Owner] ([Id])
ON DELETE CASCADE
GO

注意:如果您要向包含数据的现有表添加约束,则必须确保首先删除孤立记录...否则 ADD CONSTRAINT 将失败。

关于c# - 删除多对多关系中的实体会在关系表中留下孤儿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12075853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com