2016-09-19 27 views
1

我的應用程序中有兩個DbContext,它們使用Fluent API配置了一些模型。我的第一個DbContext的一個模型對我在第二個DbContext中配置的第二個模型有一個外鍵。探索所有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); 
     } 

當我使用UserDataUserDbContext首次,的OnModelCreating我的第二個DbContext不叫,所以不執行BaseUserTreeData映射,並通過實體框架6生成的查詢是錯誤的。我看到我可以在不同的課程中分享EntityConfiguration,但是有沒有辦法告訴EF6撥打我所有的DbContext

+0

爲什麼你在這裏需要2'contexts'? – Sampath

+0

因爲我想使用我的第二個DbContext而沒有第一個DbContext的所有實體 –

+0

那麼你用什麼?哪個問題是你要用這種模式解決的? – Sampath

回答

0

我認爲你在錯誤的path.This是不處理Context推薦的方式。如果有模型之間too strong relationship,你必須集中精力模型內one unique context。否則你將要面對這麼多的問題,未來。所以我的建議是使用EF team下面的建議模式。

這是正路微軟EF團隊曾建議:

當使用Web應用程序的工作,每 要求使用上下文實例。

你可以閱讀更多關於context使用下面的文章操作:

Working with DbContext

Managing DbContext the right way with Entity Framework

+0

我們已經按照這個推薦,每個請求一個上下文實例,但有時我們在一個請求中使用2種上下文。但是你是對的,如果模型之間的關係太密切,我們必須將模型集中在一個獨特的環境中。 –

+0

是的,這是真的。我已更新我的帖子以反映您的評論。 – Sampath