簡體   English   中英

當DateTime列可為空時,實體框架種子方法DateTime錯誤

[英]Entity Framework Seed Method DateTime Error When DateTime Column Is Nullable

我有以下POCO:

public class Specialty
{
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime? CreatedDate { get; set; }
    public string Description { get; set; }
    public string Id { get; set; }
    public string Name { get; set; }
}

在Configuration.cs的種子方法中,我有:

public override void Seed(MyContext context)
{
      context.Specialties.AddOrUpdate(p => p.Name,
                new Specialty { Id = Guid.NewGuid().ToString(), 
                                Description = "Allergy and Immunology", 
                                Name = "Allergy and Immunology" },
                new Specialty { Id = Guid.NewGuid().ToString(), 
                                Description = "Anaesthesiology",
                                Name = "Anaesthesiology" });
}

此表的遷移“命令”:

CreateTable("dbo.Specialty",
            c => new
                {
                    Id = c.String(nullable: false, maxLength: 128),
                    CreatedDate = c.DateTime(defaultValueSql: "GETDATE()"),
                    Description = c.String(),
                    Name = c.String(),
                })
            .PrimaryKey(t => t.Id);

因此,在Seed函數中,我故意遺漏了CreatedDate,因為我認為SQL會在插入時填充它,因為我的注釋(數據庫生成,計算)和遷移設置defaultValueSql: "GETDATE()"

我收到該錯誤“將datetime2數據類型轉換為日期時間數據類型導致超出范圍的值。” 當我運行Update-Database時。 據我所知,未在Seeding方法中指定CreatedDate將嘗試將null CreatedDate保存到數據庫中,這將被允許。 看起來EF在我背后做了什么 - 什么?

我的猜測是EF強制DateTime.Now.Min或SQL日期時間數據類型超出范圍的東西......但是因為我已經指定了數據庫生成,所以不應該阻止EF創建一個out-of - 插入的范圍值?

我相信這回答了你的問題。 datetime2不允許DateTime.Min,但DateTime不允許。 DateTime.min值是0001:00年1月1日00:00:00.0000000。

鏈接詳細信息。

將datetime2數據類型轉換為日期時間數據類型會導致超出范圍的值

以上,發布實際上有效。 但是,如果出現以下情況我們會收到此錯

  1. 我們可能已經錯過了CreatedDate之外的非可空DateTime屬性,並且沒有在Seed方法中指定。
  2. 非常容易忘記:如果您使用自定義屬性創建自定義AspNet.Identity實體,您可能在其中放置了一個不可為空的DateTime屬性,就像我的情況一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM