【问题标题】:Entity Framework: Add-Migration is removing the nullable:false (allowing null)实体框架:Add-Migration 正在删除 nullable:false(允许为空)
【发布时间】:2021-12-17 16:21:24
【问题描述】:

迁移认为电子邮件现在应该可以为空,我看不出它是从哪里提出这个想法的。迁移前的数据库不为空。运行Add-Migration 会产生下面的代码更改,其中电子邮件现在标记为可为空;但是,字符串上存在 [Required] 属性,并且此代码已经有一段时间没有改变了。还有哪些其他可能导致这种行为的副作用? (目标是 SQL 服务器)

(1) 模型不变:

[Table("UserProfile")]
public class UserProfile
{
   // .. snip...

   [JsonProperty("email"), Required, Display(Name = "Email")]
   public string Email { get; set; }
}

(2) Add-Migration ExampleMigration

(3) 输出迁移:

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

比较 resx 迁移架构显示相同的结果,其中最新迁移删除了 Nullable="false"

之前

<Property Name="Email" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" Nullable="false" />

之后

<Property Name="Email" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />

【问题讨论】:

  • 您的项目是否引用了任何 .NET Standard 库,或者引用了 System.ComponentModel.DataAnnotations NuGet 包?如果是这样,它可能与this issue有关。

标签: entity-framework


【解决方案1】:

为了解决这个问题,我运行了迁移,从 up/down 中删除了不正确的行,将文件与 resx 中先前和当前迁移解压缩的“目标”值进行了比较,进行了我想要的更改,然后重新压缩结果并将其卡在 resx 中。

不理想。不推荐。

【讨论】:

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