Well, I have one-to-many related model:
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; }
}
What I want to do is clear Parent.Children
and remove related child entities from database. I've already tried:
Database context class:
modelBuilder.Entity<Parent>()
.HasMany(p => p.Children)
.WithOptional()
.WillCascadeOnDelete(true);
this works fine, but I still have redundant records in database with Parent_Id = null
fields when I do
parent.Children.Clear();
repository.InsertOrUpdate(parent);
in my repository class. Also the same behavior is when I do:
modelBuilder.Entity<Parent>()
.HasMany(pr => pr.Children)
.WithOptional(ri => ri.Parent)
.WillCascadeOnDelete(true);
with additional Parent
property in Child
class
public class Child
{
...
public Parent Parent { get; set; }
...
}
or when I do
modelBuilder.Entity<Child>()
.HasOptional(p => p.Parent)
.WithMany(p => p.Children)
.HasForeignKey(p => p.Parent_Id)
.WillCascadeOnDelete(true);
with additional Parent_Id property in Child
class
public class Child
{
...
public int Parent_Id { get; set; }
...
}
So, how can I configure cascade deleting correctly? Or how should I supposed to remove those child entities? I assume this is casual task but I'm just missing something.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…