2016-04-28 76 views
0

我需要使用我的自定義遷移基地CustomMigration從套件管理器控制檯搭建add-migration進行腳手架遷移,這是從DbMigration派生的。具有自定義遷移基地的實體框架添加遷移腳手架

public partial class NewMigration: CustomMigration 
{ 
    public override void Up() 
    { 
    } 

    public override void Down() 
    { 
    } 
} 

如果需要,我可以使用不同的命令。我沒有任何PowerShell腳本技能。我怎樣才能做到這一點?

回答

2

我創建了一個生成我的遷移的新類:

public class AuditMigrationCodeGenerator : CSharpMigrationCodeGenerator 
{ 
    protected override void WriteClassStart(string @namespace, string className, IndentedTextWriter writer, string @base, bool designer = false, IEnumerable<string> namespaces = null) 
    { 
     @base = @base == "DbMigration" ? "AuditMigration" : @base; 
     var changedNamespaces = namespaces?.ToList() ?? new List<string>(); 
     changedNamespaces.Add("Your.Custom.Namespace"); 
     base.WriteClassStart(@namespace, className, writer, @base, designer, changedNamespaces); 
    } 
} 

在Configuration.cs:

internal sealed class Configuration : DbMigrationsConfiguration<EfDataAccess> 
{ 
    public Configuration() 
    { 
     this.AutomaticMigrationsEnabled = false; 
     CodeGenerator = new AuditMigrationCodeGenerator(); 
    } 
} 

它會使用自定義的代碼生成器,它產生與我期望的自定義​​遷移基地的遷移。

欲瞭解更多信息:https://romiller.com/2012/11/30/code-first-migrations-customizing-scaffolded-code/

0
  1. 運行命令add-migration NewMigration。它將添加名爲「NewMigration」的新遷移。如果在模型中沒有變化,遷移將是空的:

    public partial class NewMigration : DbMigration 
    { 
        public override void Up() 
        { 
        } 
    
        public override void Down() 
        { 
        } 
    } 
    
  2. 更改基類NewMigration來CustomMigration:

    public partial class NewMigration : CustomMigration 
    { 
        public override void Up() 
        { 
        } 
    
        public override void Down() 
        { 
        } 
    } 
    
  3. 修改NewMigration如你所願
  4. 運行update-database申請移民
+0

感謝的答案,但是這就是我們現在做的,這是麻煩的,因爲我們做每天約10遷移新項目。我們需要在每次遷移時進行自定義初始化和邏輯處理,例如審計。所以這對我們來說不是可以接受的選擇,並且希望沒有定製遷移的腳手架來防止初始化錯誤。 –