好吧,我有一对多的相关模型:
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public string ChildName { get; set; }
}
我要做的是清除Parent.Children
并从数据库中删除相关的子实体。我已经尝试过:
数据库上下文类:
modelBuilder.Entity<Parent>()
.HasMany(p => p.Children)
.WithOptional()
.WillCascadeOnDelete(true);
这可以正常工作,但是Parent_Id = null
当我这样做时,数据库中仍然有带有字段的冗余记录
parent.Children.Clear();
repository.InsertOrUpdate(parent);
在我的存储库类中。当我这样做时,也是相同的行为:
modelBuilder.Entity<Parent>()
.HasMany(pr => pr.Children)
.WithOptional(ri => ri.Parent)
.WillCascadeOnDelete(true);
Parent
在Child
课堂上有额外的财产
public class Child
{
...
public Parent Parent { get; set; }
...
}
或当我做
modelBuilder.Entity<Child>()
.HasOptional(p => p.Parent)
.WithMany(p => p.Children)
.HasForeignKey(p => p.Parent_Id)
.WillCascadeOnDelete(true);
在Child
类中具有其他Parent_Id属性
public class Child
{
...
public int Parent_Id { get; set; }
...
}
那么,如何正确配置级联删除?还是应该删除这些子实体?我认为这是一项随便的任务,但我只是缺少一些东西。
OnModelCreating()
?当我复制粘贴您的实体并进行第一次映射尝试(并将其设置Id
为两个实体的键属性)时,删除对我来说是正确的级联。