我正在使用EF Core,并且在OnModelCreating
方法中配置了关系。我的关系是:
entity.HasOne(d => d.EntityParent)
.WithMany(p => p.EntityCHild)
.HasForeignKey(d => d.IDEntityParent)
.OnDelete(DeleteBehavior.restrict)
.HasConstraintName("FK_Name");
当我想使用EF Core时,我使用以下代码:
using(Context myContext = new Context())
{
//Code to use EF
}
但我想修改特定情况下两个实体之间的关系,所以我想在使用EF时更改内部使用,而不是OnModelCreating
方法,因为如果不是我将修改DbContext
的所有实例。
我想将OnDeleting
的行为从限制更改为级联。
我的想法是:
using(Context myContext = new Context())
{
//Code to modify the behavior from restrict to cascade.
//Code to use EF
}
有可能吗?如果有可能,我该怎么做?
答案 0 :(得分:1)
使用派生上下文......
public class Context: DbContext{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
...
entity.HasOne(d => d.EntityParent)
.WithMany(p => p.EntityCHild)
.HasForeignKey(d => d.IDEntityParent)
.OnDelete(ShouldRestrict)
.HasConstraintName("FK_Name");
...
}
protected virtual DeleteBehavior ShouldRestrict{
get{
return DeleteBehavior.restrict;
}
}
}
public class UnrestrictedContext: Context{
protected override DeleteBehavior ShouldRestrict{
get{
// change...
return DeleteBehavior.....;
}
}
}
因此,在特殊情况下,您可以使用UnrestrictedContext而不是Context。