2016-10-01 80 views
0

所以也許這是一個愚蠢的問題,因爲我知道從現有數據庫創建Code-first模型時,Visual Studio將創建一個新的ADO.NET實體數據建模,並將模型添加到新的DbContext中。EF Code-First from existing db add models into existing DbContext

我在我的項目中使用Microsoft Identity,因此已經有一個ApplicationDbContext(IdentityDbContext)。我認爲只需將所有模型放在單個DbContext中就可以更容易處理。我正在從現有數據庫生成我的代碼優先模型。

但是有沒有一種方法,使得生成的模型加起來到現有的DbContext(在這種情況下,IdentityDbContext?)

我都喜歡,許多車型,所以目前我不得不添加的每個的他們手動進入現有的ApplicationDbContext,並從創建的DbContext中移除。

+0

爲什麼你不從ApplicationDbContext繼承? – DevilSuichiro

+0

@DevilSuichiro好主意!但我希望所有模型都在**一個**'DbContext'中:) –

回答

0

據我記得,沒有辦法將生成的模型對象自動添加到現有的DbContext中。您需要手動添加它們。

public partial class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("name=DefaultConnection")    
    { 

    } 

    //Add your Model objects here, You can copy them from automatically generated DbContext 
    public virtual DbSet<ModelObjectName> PropertyName { get; set; } 


    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //Copy the modelBuilder configuration here from automatically generated DbContext here 

     base.OnModelCreating(modelBuilder); 
    } 
} 
0

下面是起作用的選擇:

  1. 標記您的ApplicationDbContext類爲部分:

    public partial class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
    { 
        public ApplicationDbContext() : base("DefaultConnection") 
        { 
         //unchanged 
        } 
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder) 
        { 
         //unchanged 
        } 
    } 
    
  2. 請與您的自定義數據模型類相同,並從繼承DbContext。另外,刪除它的構造函數並將OnModelCreating更改爲具有不同名稱的常規私有方法。保持其餘的不變。

    public partial class MyDataModels 
    { 
    
         //unchanged 
    
        private void OnModelCreating2(DbModelBuilder modelBuilder) 
        { 
         //unchanged 
        } 
    } 
    
  3. 重構(按Ctrl + R + R:默認快捷)你的數據模型類的名字,並將其更改爲ApplicationDbContext。 Visual Studio可能在重構期間給你一個衝突警告,忽略它並重構。最後,請致電OnModelCreating2()OnModelCreating()方法ApplicationDbContext類。

    public partial class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
    { 
        public ApplicationDbContext() : base("DefaultConnection") 
        { 
         //unchanged 
        } 
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder) 
        { 
         //unchanged 
    
         OnModelCreating2(modelBuilder); 
        } 
    } 
    

另外一個不錯的方法,通過@DevilSuichiro建議是簡單地從ApplicationDbContext繼承你的數據模型類。

乾杯!