当我创建我的DbContext时,我希望我的数据库中的所有表都启用了delete-cascade。有可能吗?
我有两张FK表。这些课程是
public class Child
{
public int ChildID { get; set; }
public string Name { get; set; }
public virtual Parent parent { get; set; }
}
public class Parent
{
public int ParentID { get; set; }
public string Name {get;set;}
}
public class iMyContext : DbContext
{
public iMyContext(string connectionString)
: base(connectionString)
{
}
public virtual DbSet<Child> Children { get; set; }
public virtual DbSet<Parent> Parents { get; set; }
}
On creating my context, I get tables as
Parents with columns
ParentID PK
Name
Children with columns
ChildID PK
Name
Parent FK
现在我添加
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Child>()
.HasOptional(r => r.Parent)
.WithRequired(ad => ad.) // problem here
.WillCascadeOnDelete();
}
WithRequired子句没有Child。我该如何解决?
答案 0 :(得分:1)
可以使用OnModelCreating方法中的FluentAPI设置级联删除:
modelBuilder.Entity<Root>()
.HasMany(r => r.Nodes)
.WithRequired(n => n.Root)
.WillCascadeOnDelete();
<强> UPD:强> 让我们假设您有两个实体Root和Node,它们使用DataAnnotations属性与一对多关系连接:
public class Root
{
[Key]
public int RootId { get; set; }
public string RootName { get; set; }
[InverseProperty("Root")]
public ICollection<Node> Nodes { get; set; }
}
public class Node
{
[Key]
public int NodeId { get; set; }
public string NodeName { get; set; }
[ForeignKey("Root")]
public int RootId { get; set; }
public Root Root { get; set; }
}
现在,如果要在删除所依赖的Root的同时删除所有节点,则需要使用上面介绍的UPD之前的代码,在上下文配置类的OnModelCreating方法中使用FluenAPI进行配置。