【发布时间】:2013-05-15 07:47:11
【问题描述】:
嗯,我有一对多的相关模型:
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);
在Child 类中有额外的Parent 属性
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设置为两个实体的关键属性)时,删除对我来说是正确的级联。
标签: c# entity-framework code-first