2017-04-30 8 views
0

私はEFコアを使用しており、関係はOnModelCreatingメソッドで構成されています。私が持っている関係はこれです:dbContextのインスタンスの関係の設定を変更するには?

entity.HasOne(d => d.EntityParent) 
    .WithMany(p => p.EntityCHild) 
    .HasForeignKey(d => d.IDEntityParent) 
    .OnDelete(DeleteBehavior.restrict) 
    .HasConstraintName("FK_Name"); 

そして、私はEFコアを使用したいとき、私はこのコードを使用します

using(Context myContext = new Context()) 
{ 
    //Code to use EF 
} 

をしかし、私は特定のための2つのエンティティ間の関係を変更したいです私は、のすべてのインスタンスを変更しないので、OnModelCreatingメソッドではなく、EFを使用するときに使用する内部を変更したいと考えています。

OnDeletingの動作を制限からカスケードに変更したいと考えています。

using(Context myContext = new Context()) 
{ 
    //Code to modify the behavior from restrict to cascade. 


    //Code to use EF 
} 

それはそれを行うことは可能です:

私の考えでは、このですか?それが可能なら、どうやったらできるの?

+0

削除動作は、(外部キーの)データベース列のプロパティであるため、削除動作を変更するにはデータベース列を変更する必要があります。 – Evk

答えて

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代わりのコンテキストを使用することができます。