2016-09-19 1 views
1

Fluent APIでいくつかのモデルを構成する私のアプリケーションに2つのDbContextがあります。私の最初のDbContextの1つのモデルは、2番目のDbContextで設定された2番目のモデルへの外部キーを持っています。すべてのDbContextを発見

public class UserData 
    { 
     public double Id { get; set; } 
     public string LastName { get; set; } 
     public string FirstName { get; set; } 

     public string FullName { 
      get { 
       return $"{this.FirstName} {this.LastName}"; 
      } 
     } 

     public string Adress1 { get; set; } 

     public virtual BaseUserTreeData BaseUserTree { get; set; } 
     public double? BaseUserTreeId { get; set; } 

     public virtual List<DeviceData> Devices { get; set; } 
    } 

モデルBaseUserTreeDataは私の第二DbContextで構成された私の外国人の財産です。

 protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      base.OnModelCreating(modelBuilder); 

      modelBuilder.Entity<BaseUserTreeData>().ToTable("sw_data_baseusertree"); 

      modelBuilder.Entity<BaseUserTreeData>().Property(baseusertree => baseusertree.Id).HasColumnName("baseusertree_ID"); 
      modelBuilder.Entity<BaseUserTreeData>().Property(baseusertree => baseusertree.Label).HasColumnName("label"); 
      modelBuilder.Entity<BaseUserTreeData>().Property(baseusertree => baseusertree.ParentTreeId).HasColumnName("baseUserTree_ID_parent"); 
      modelBuilder.Entity<BaseUserTreeData>().HasKey(baseusertree => baseusertree.Id); 

      modelBuilder.Entity<BaseUserTreeData>() 
       .HasOptional(tree => tree.ParentTree) 
       .WithMany(tree => tree.ChildTrees) 
       .HasForeignKey(tree => tree.ParentTreeId); 
     } 

私が初めての私UserDbContextUserDataを使用すると、私の第二DbContextOnModelCreatingが呼び出されていないので、BaseUserTreeDataマッピングが実行され、Entity Frameworkの6によって生成されたクエリが間違っていません。私は別のクラスでEntityConfigurationを共有することができますが、OnModelCreatingのすべてを私のDbContextと呼ぶようにEF6に伝える方法はありますか?私はあなたが間違っpath.Thisでいると思う

+0

なぜあなたはここ2 'contexts'が必要なのですか? – Sampath

+0

最初のDbContext –

+0

のすべてのエンティティを除いて、2番目のDbContextを使用したいので、それを何のために使用しますか?あなたはそのパターンを使って解決しようとしていますか? – Sampath

答えて

0

はモデル間too strong relationshipがあるContext .IFを扱うの推奨方法ではありませんが、あなたはone unique context .Otherwise内のモデルを集中する必要がありますが中に非常に多くの問題に直面する必要があります未来。私の助言は、EF teamが提案したパターンを使用することです。

Webアプリケーションでの作業、 要求ごとにコンテキスト・インスタンスを使用します。

この

マイクロソフトEFチームを示唆している方法です。

あなたはcontextは、記事の下に使用して取り扱いについてもっと読むことができます:

Working with DbContext

Managing DbContext the right way with Entity Framework

+0

リクエストごとに1つのコンテキストインスタンスがこの推奨に従っていますが、1つのリクエストで2種類のコンテキストを使用することがあります。しかし、そうですね、モデル間に強い関係がある場合は、モデルを1つの固有のコンテキストに集中させなければなりません。 –

+0

はい、それは真です。あなたのコメントも反映するように自分の投稿を更新しました。 – Sampath

関連する問題