【发布时间】:2012-08-22 14:52:59
【问题描述】:
删除多对多关系中的记录时,关系表有孤立记录。我在 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");
});
}
My Owner 模型具有虚拟属性 Cars:
public virtual ICollection<Car> Cars { get; set; }
我的汽车模型有虚拟财产 Owners:
public virtual ICollection<Owner> Owners { get; set; }
我删除一个 Car 如下(db 是我的 DbContext,car 是 Car 模型)。
db.Cars.Remove(car);
db.SaveChanges()
当我删除汽车时,我希望表 CarOwners 中具有该 CarId 的所有记录也会被删除,但事实并非如此。有什么建议吗?
【问题讨论】:
-
也许this question 会有所帮助
-
链接表和Car表的关系没有强制FK约束吗?数据库不应该允许在链接表中有 CarId = 1 的记录,并且没有 Id = 1 的汽车。您是否使用 EF 创建了数据库?还是手动?
-
@Slauma - 我手动设置了数据库。我没有 FK 约束,我懒惰地认为 Entity 会自动处理它。我的回答有意义吗?
-
ef 只负责它,如果它还创建数据库。如果您手动设置它, ef 实际上根本不会关心任何约束。您的数据库缺少删除级联。
-
是的,我认为它会随着您答案的变化而起作用。 (EF 不启用级联 UPDATE 虽然当它创建数据库时,我不知道如果你手动启用它是否会出现意外的惊喜。我会从你的 ALTER TABLE 中删除 ON UPDATE CASCADE声明。)
标签: c# entity-framework-4 ef-code-first entity-framework-4.3