dar*_*key 16 c# entity-framework foreign-keys cascading-deletes ef-code-first
假设我有这两个非常基本的实体:
public class ParentEntity
{
public int Id;
public virtual ICollection<ChildEntity> Childrens;
}
public class ChildEntity
{
public int Id;
public int ParentEntityId; // Foreign Key
public virtual ParentEntity parent; // [NOTWANTED]
}
Run Code Online (Sandbox Code Playgroud)
出于某些原因,我不希望ChildEntity将引用保留回其父级.我只是希望它保留ParentEntity id,但仅此而已.到目前为止,没问题,我只是删除[NOTWANTED]行,一切都按预期工作.
我的问题是:如何在特定情况下禁用级联删除?
如果我仍然拥有父导航属性,那将很容易:
modelBuilder.Entity<ChildEntity>()
.HasRequired(c => c.parent)
.WithMany(p => p.Childrens)
.WillCascadeOndelete(false)
Run Code Online (Sandbox Code Playgroud)
但是如果没有导航属性,我不知道如何在删除时禁用级联(当然不是全局禁用它,也不是每个表都禁用它,而只是为了关系).
我现在所做的是将外键设置为可以为空的int,以便在删除时禁用级联,但这并不漂亮:
public int? ParentEntityId; // Foreign Key - nullable just to disable cascade on delete
Run Code Online (Sandbox Code Playgroud)
如何才能使用流畅的API?认为它应该是可能的.
Sla*_*uma 18
您必须从关联的另一端配置它:
modelBuilder.Entity<ParentEntity>()
.HasMany(p => p.Children)
.WithRequired()
.HasForeignKey(c => c.ParentEntityId)
.WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)