【问题标题】:EF 4.1 Code First - model updated with [Required] attributesEF 4.1 Code First - 使用 [必需] 属性更新模型
【发布时间】:2012-02-10 08:42:14
【问题描述】:

我的模型以前没有任何 DataNotations,但我最近更改了它,将 [Required] 应用于某些属性。发生这种情况时,我的迁移代码开始抛出异常,例如:

无法应用挂起的更改,因为自动迁移是 禁用。要启用自动迁移,请确保 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true。

我认为必须执行一些明确的迁移操作。请澄清。

编辑:AutomaticMigrationsEnabled = true 不适合我,我很感兴趣如何使用一些迁移脚本来实现。

【问题讨论】:

    标签: .net entity-framework ef-code-first


    【解决方案1】:

    添加一个扩展 DbMigrationsConfiguration 的配置类并将 AutomaticMigrationsEnabled 设置为 true,示例类如下所示

    namespace yournamespace
    {
        using System;
        using System.Data.Entity;
        using System.Data.Entity.Migrations;
        using System.Linq;
    
            internal sealed class Configuration : DbMigrationsConfiguration<YourDbContext>
            {
                public Configuration()
                {
                    AutomaticMigrationsEnabled = true;
                    AutomaticMigrationDataLossAllowed = true;
                }
    
    
            }
        }
    

    然后将配置类添加到 DbMigrator 实例中,如下所示

    namespace yournamespace
    {
        public class YourDataMigrator
        {
            public void MigrateData()
            {
                DbMigrationsConfiguration configuration=new Configuration();
                DbMigrator dbMigrator = new DbMigrator(configuration);
    
                try
                {
                    dbMigrator.Update();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
    
            }
        }
    
    }
    

    我想这会解决你的问题

    【讨论】:

    • 如何在没有 AutomaticMigrationsEnabled = true 选项的情况下做同样的事情?
    【解决方案2】:

    您可以通过执行以下脚本通过包管理器控制台创建迁移脚本:

    PM> Enable-Migrations 
    

    紧随其后

    PM> Add-Migration Initial
    

    紧随其后

    PM>  Update-Database
    

    最初在这里找到:http://www.snippetsource.net/Snippet/146/enable-automatic-migrations-in-ef-codefirst-c

    【讨论】:

      【解决方案3】:

      不确定我是否完全在同一页面上,但我认为这就是您要问的。我已将 AutomaticMigrations 设置为 false:

      public Configuration()
      {
              AutomaticMigrationsEnabled = false;
      }
      

      我有一个像这样设置的 Post 类:

      public class Post
      {
          public int Id { get; set; }
          public string Title { get; set; }
          [Required]
          public DateTime DateCreated { get; set; }
          public string Content { get; set; }
          public string Tags { get; set; }
          public ICollection<Comment> Comments { get; set; }
      }
      

      它已经生成了,但后来我意识到出于某种原因我想要标题。

      public class Post
      {
          public int Id { get; set; }
          [Required]
          public string Title { get; set; }
          [Required]
          public DateTime DateCreated { get; set; }
          public string Content { get; set; }
          public string Tags { get; set; }
          public ICollection<Comment> Comments { get; set; }
      }
      

      我进行更改,快速构建,然后从 PM 控制台输入:

      Add-Migration AddPostAnnotation(名称可以是任何你想要的)

      这会生成这个文件:

      public partial class AddPostAnnotations : DbMigration
      {
          public override void Up()
          {
              AlterColumn("dbo.Posts", "Title", c => c.String(nullable: false));
          }
      
          public override void Down()
          {
              AlterColumn("dbo.Posts", "Title", c => c.String());
          }
      }
      

      在这里,我只需从 PM 控制台运行 Update-Database,然后将更改发送过来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多