如何仅为dbContext的实例更改关系的配置?

时间:2017-04-30 14:46:58

标签: c# entity-framework entity-framework-core

我正在使用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
}

有可能吗?如果有可能,我该怎么做?

1 个答案:

答案 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。