2017-01-27 11 views
0

Phone19クラスは、Phoneクラスを継承し、追加のフィールドを含みます。ここでの考え方は、TPH(Table per Hierarchy)アプローチを使用して既存のデータベースモデルを拡張することです。 PMコンソール経由で両方のコンテキストの移行を有効にし、正しいコンテキストを使用していますが、「親」への移行を追加すると、Phone19クラスのフィールドが追加されます。 IDbsetを無効にする方法はありますか? 1は、携帯電話のクラスを使用しており、他の1クラスPhone19エンティティ・フレームワークは子コンテキストのdbsetをオーバーライドします

を使用しているこの

public class CallTrackingDBContext : DbContext 
{ 
    public IDbSet<Phone> Phones { get; set; } 


    private void InitContext() 
    { 
     Configuration.LazyLoadingEnabled = false; 
     Configuration.ProxyCreationEnabled = false; 
     Configuration.AutoDetectChangesEnabled = false; 
      ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 100000; 
    } 

    public CallTrackingDBContext(DbConnection dbConnection) : base(dbConnection,false) 
    { 
     InitContext(); 
    } 

    public CallTrackingDBContext() : base("CallTrackingDBContext") 
    { 
     InitContext(); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

    } 
} 

のように見え、継承する別のコンテキストがあるベースコンテキストがありますので、私はそれを仮想作成し、後でそれを上書きすることはできません電話Dbsetをオーバーライドする必要がありますし、前の1:

public class ClientContext19 : CallTrackingDBContext 
{ 
    public new IDbSet<Phone19> Phones { get; set; } 

    public ClientContext19(DbConnection dbConnection) : base(dbConnection) 
    { 
     InitContext(); 
    } 

    public ClientContext19() : base("DBContext19") 
    { 

     InitContext(); 
    } 


    private void InitContext() 
    { 
     Configuration.LazyLoadingEnabled = false; 
     Configuration.ProxyCreationEnabled = false; 
     Configuration.AutoDetectChangesEnabled = false; 
     ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 100000; 
    } 
} 
+0

"...マイグレーションによってPhone19クラスのフィールドが追加されました..."そうではありません。 –

+0

それは親データベースにもフィールドを追加しますが、ClientContext19の対象となるデータベースに追加する必要があります – papadoble151

+1

問題は、コードファーストの規約(および移行)がPhone19の追加を拡張として扱うことです元のモデルと同じように調整します。あなたはそれを新しい文脈で 'Phone'のサブクラスとして扱う必要がありますか?そのモデルのすべての" p​​hone "は' Phone19'ですか? –

答えて

0

NotMappedAttributeを使用して規則ベースのモデルのうち、Phone19を残します。新しいモデルでは、流暢な構成を使用して織り直します。

public class ClientContext19 : CallTrackingDbContext 
{ 
    ... 

    public override void OnModelCreating(DbModelBuilder dmb) 
    { 
    dmb.Entity<Phone>() 
     .Map<Phone19>(m => m.Requires("discriminator").HasValue("Phone19")); 
    } 
} 

あなたは、識別子列の名前と値をカスタマイズし、あるいは単にPhone19上の特性の一つは、Phone19なくPhoneとして行をマークする値を持つことを要求することができます。

関連する問題