2016-05-30 33 views
0

下面我曾嘗試:如何重新建立一個遷移腳本

  1. 刪除所有涉及到的Migrations文件夾模型生成的腳本。

  2. 刪除了所有與__MigrationHistory表中模型相關的條目。

但它創造這樣的,當我運行:

PM> Add-Migration "Added_Investors_Table" 

生成遷移腳本

public partial class Added_Investors_Table : DbMigration 
    { 
     public override void Up() 
     { 

     } 

     public override void Down() 
     { 

     } 
    } 

型號

[Table("Investors")] 
    public class Investor : FullAuditedEntity 
    { 

     public virtual int AmountCommitted { get; set; } 

     public virtual decimal PercentageOfDeal { get; set; } 

     public virtual decimal AmountSpentToDate { get; set; } 
} 

DbContext.cs

public class IpDbContext : AbpZeroDbContext<Tenant, Role, User> 
    { 
     /* Define an IDbSet for each entity of the application */ 

     public virtual IDbSet<Investor> Investors { get; set; } 

     public IpDbContext() : base("Default") 
     { 

     } 
    } 

你知道爲什麼它不會重新創建一個遷移腳本像往常一樣?除了上述2個地方以外,其他地方還有其他地方嗎?

注:上面提到的表是一種新型one.I成功創建腳本第一時間。但由於一些變化和等。我需要重新創建它again.But不work.But如果我改變現有的模型,然後它給改變設置腳本。很奇怪沒有?我不知道哪來的問題..

+0

你能顯示更多的代碼嗎?像你的DbContext類? – tmg

+0

@tmg做完了,請看看。 – Sampath

+0

我在過去碰到過類似的東西,通過用'-IgnoreChanges'創建一個初始遷移來解決它。看看[我的答案在這裏](http://stackoverflow.com/questions/36916150/table-not-mapped-using-ef-code-first-approach/36916941#36916941)的步驟。可能會爲你工作。 – Tone

回答

2

我假設你不介意重新創建Investor實體和相應的表,但你不想修改別的。如果是這樣,我覺得你可以,仔細,請嘗試以下操作:

  1. 備份數據庫(使用PROD副本,還是要開發數據庫)
  2. 還原以前遷移腳本返回到您的Migrations文件夾
  3. 恢復__MigrationHistoryTable
  4. 保持遷移腳本類,但除去關係到Investor實體(DDL代碼例如如果你有移民加Investorupdown甲基ods應該爲空遷移)
  5. DbContext中刪除Investor實體及其配置,並使用-IgnoreChanges開關生成新的遷移。假設這種遷移被稱爲RemoveInvestorMigration。這其中也應該有空updown方法由於-IgnoreChanges開關
  6. 通過Update-Database應用RemoveInvestorMigration遷移到您的(發展)的數據庫。現在EF相信你刪除Investor實體(和你做了,不知何故)
  7. 恢復Investor實體,其配置爲DbContext再次
  8. 生成一個新的遷移。我們稱之爲RestoreInvestorMigration。這應該生成創建Investor實體的適當的updown方法。你必須在這裏有一些CreateTable代碼,否則什麼是錯的
  9. 應用RestoreInvestorMigration和你做

訣竅是化妝EF相信,但你必須要小心,因爲它會相信

順便說一句,只要你需要它,你可以用-Script開關運行Update-Database,使EF會告訴你爲了應用migra後更新數據庫生成的SQL代碼灰。這不適用於遷移(即不會執行SQL代碼)。這樣,你可以看到EF會做什麼,如果你選擇應用遷移

+0

我給了我的客戶暫時的解決方案。我會看看你的解決方案,並會給你我的反饋。謝謝。 – Sampath