删除两个实体中的一个时,我的Xamarin.Forms应用程序中多对多关系的连接表似乎没有被正确清除。
我有这些课程:
public class Input
{
// One-to-many
public ObservableCollection<InputResult> InputResults { get; set; }
//...
// Here are many more entities which shouldn't be relevant for this example
//...
}
public class InputResult
{
// One-to-many
public string ParentInputId { get; set;}
// Many-to-many
public ObservableCollection<MyDropdown> MyDropdowns { get; set; }
}
public class MyDropdown
{
// Many-to-many
public ObservableCollection<InputResult> InputResults { get; set; }
}
我在DbContext
类中配置了如下关系:
modelBuilder.Entity<Input>()
.HasMany(b => b.InputResults)
.WithOne()
.HasForeignKey(b => b.ParentInputId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<InputResult>()
.HasMany(b => b.MyDropdowns)
.WithMany(b => b.InputResults);
假设我之前用InputResults
加载了一个Input
,然后我在一个helper类中删除了InputResults
,如下所示:
Context.RemoveRange(Input.InputResults);
InputResults
被正确删除。当我直接查看SQLite数据库时,我仍然看到InputResults
和MyDropdown的连接表中的所有条目。为什么仍然有条目?昨天,我们的一个用户在删除一些数据并尝试再次插入相同的数据后,遇到了唯一约束错误。
我很感激你的帮助。
- 编辑:**
我对夏普回答的评论如下:
配置DbContext时我不能使用OnDelete(DeleteBehavior.Cascade)
。不过EF Core似乎自己做得很好。DatabaseContextModelSnapshot.cs
中的连接表部分如下所示:
modelBuilder.Entity("InputResultMyDropdown", b =>
{
b.HasOne("Inputs.MyDropdown", null)
.WithMany()
.HasForeignKey("MyDropdownId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Inputs.InputResult", null)
.WithMany()
.HasForeignKey("InputResultId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
1条答案
按热度按时间hgb9j2n61#
DbContext中应该有级联删除行为: