簡體   English   中英

Entitiy Framework Core預覽2 - 布爾值的默認值

[英]Entitiy Framework Core preview 2 - default value for boolean

我們使用的是.Net Core 1,我們遷移到預覽2(都是實體)。 在遷移之前,我們曾經在Entity Framework中為boolean值設置默認值,如下所示:

modelBuilder.Entity<Customer>()
  .ToTable("Customer")
  .Property(a => a.Active)
  .HasDefaultValue(true);

遷移后,我們沒有更改任何內容,但現在我們在實體嘗試創建此表時收到錯誤。 看起來它試圖創建一個默認值為字符串,如“True”,而不是像以前一樣。

有誰知道發生了什么變化?

更新數據庫上的錯誤

實體類型“Customer”上的“bool”屬性“Active”配置了數據庫生成的默認值。 當屬性值為'false'時,將始終使用此默認值,因為這是'bool'類型的CLR默認值。 考慮使用可空的'bool?' 鍵入,以便僅在屬性值為“null”時使用默認值。

腳本生成:

CREATE TABLE `Customer` (
    `Id` int NOT NULL,
    `Active` bit NOT NULL DEFAULT 'True'
   )

我遇到了同樣的問題。 但是,在我自己研究這個問題后,我發現了一個相當棘手的解決方法 它似乎

如果你將bool值設置為可以為空,那么使用fluent api設置默認值,你應該沒問題。 它不完美,但它的工作原理:

public class Year
{
        public int Id { get; set; }
        public string label { get; set; }
        public int year { get; set; }
        public bool? active { get; set; }
}

然后,在您的數據上下文中,設置默認值:

            modelBuilder.Entity<Year>()
            .Property("active")
            .HasDefaultValue(true);

將新記錄插入數據庫時​​,不需要在對象聲明中指定boolean屬性。 下面,2017年的默認值為true。

            var newYears = new List<Year>();

            newYears.Add(new Year { label = "2019", year = 2019, active = false });
            newYears.Add(new Year { label = "2018", year = 2018, active = true });
            newYears.Add(new Year { label = "2017", year = 2017});
            _context.Years.AddRange(newYears);
            _context.SaveChanges();

暫無
暫無

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

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