gpt4 book ai didi

c# - Entity Framework 迁移中必填字段的默认值?

转载 作者:IT王子 更新时间:2023-10-29 03:37:51 25 4
gpt4 key购买 nike

我已将 [Required] 数据注释添加到我的一个模型中 ASP.NET MVC application .创建迁移后,运行 Update-Database 命令会导致以下错误:

Cannot insert the value NULL into column 'Director', table 'MOVIES_cf7bad808fa94f89afa2e5dae1161e78.dbo.Movies'; column does not allow nulls. UPDATE fails. The statement has been terminated.

这是由于某些记录的 Director 列中有 NULL。我如何自动将这些值更改为某些默认值(例如“John Doe”)导演?

这是我的模型:

  public class Movie
{
public int ID { get; set; }
[Required]
public string Title { get; set; }

[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }

[Required]
public string Genre { get; set; }

[Range(1,100)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }

[StringLength(5)]
public string Rating { get; set; }

[Required] /// <--- NEW
public string Director { get; set; }
}

这是我最新的迁移:

public partial class AddDataAnnotationsMig : DbMigration
{
public override void Up()
{
AlterColumn("dbo.Movies", "Title", c => c.String(nullable: false));
AlterColumn("dbo.Movies", "Genre", c => c.String(nullable: false));
AlterColumn("dbo.Movies", "Rating", c => c.String(maxLength: 5));
AlterColumn("dbo.Movies", "Director", c => c.String(nullable: false));
}

public override void Down()
{
AlterColumn("dbo.Movies", "Director", c => c.String());
AlterColumn("dbo.Movies", "Rating", c => c.String());
AlterColumn("dbo.Movies", "Genre", c => c.String());
AlterColumn("dbo.Movies", "Title", c => c.String());
}
}

最佳答案

除了@webdeveloper 和@Pushpendra 的回答之外,您还需要手动向迁移添加更新以更新现有行。例如:

public override void Up()
{
Sql("UPDATE [dbo].[Movies] SET Title = 'No Title' WHERE Title IS NULL");
AlterColumn("dbo.Movies", "Title", c => c.String(nullable: false,defaultValue:"MyTitle"));
}

这是因为 AlterColumn 生成 DDL 以将列的默认值设置为表规范中的某个特定值。 DDL 不会影响数据库中的现有行。

您实际上是在同时进行两项更改(设置默认值并使该列为 NOT NULL)并且每一项都单独有效,但是由于您同时进行了两项更改,因此您可以预期系统能够“智能地”实现您的意图并将所有 NULL 值设置为默认值,但这并不是我们一直期望的结果。

假设您只为该列设置默认值,而不是使其为 NOT NULL。您显然不希望所有 NULL 记录都使用您提供的默认值进行更新。

因此,在我看来,这不是错误,我不希望 EF 以我未明确指示的方式更新我的数据。开发人员负责指示系统如何处理数据。

关于c# - Entity Framework 迁移中必填字段的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12462100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com