gpt4 book ai didi

entity-framework - Entity Framework Code First 创建的列中字符串与其他数据类型的可为空性

转载 作者:行者123 更新时间:2023-12-03 07:40:18 25 4
gpt4 key购买 nike

使用 Code First 在类中定义字符串时,生成的数据库中的列默认允许空值。

    public string MyString { get; set; }

创建此列:

MyString (nvarchar(max), null)

我可以使用 [Required] 属性或使用 Fluent API 中的 .IsRequired() 方法将其更改为“not null”。

其他数据类型默认不允许为空。

    public int MyInt { get; set; }
public DateTime MyDateTime { get; set; }
public float MyFloat { get; set; }
public decimal MyDecimal { get; set; }
public bool MyBool { get; set; }

创建这些列:

MyInt(int,不为空)

MyDateTime(日期时间,不为空)

MyFloat(实数,非空)

MyDecimal(十进制(18,2),不为空)

MyBool(位,不为空)

我可以使用 Fluent API 中的 .IsOptional() 方法更改这些以允许 null。是否有一个属性可以做同样的事情?

我还可以更改类定义中的数据类型以允许空值(int?、DateTime?等),这会导致数据库中允许空值的列。

默认情况下允许字符串为空但其他数据类型不允许为空的理由是什么?

最佳答案

你自己已经回答了这个问题。您不能对列出的任何其他数据类型有空引用。因此,如果代码无法处理 null,那么它将确保数据库也强制执行该操作。

只是为了完全清楚这一点,因为您特别关注字符串而不是其他值类型。 Here is the MDSN article on strings ,如果你搜索 null,你会看到这一行:

By contrast, a null string does not refer to an instance of a System.String object and any attempt to call a method on a null string causes a NullReferenceException

但是,除非 int 可为空,否则它永远不会抛出 NullReferenceException,因为它必须始终具有默认值。

关于entity-framework - Entity Framework Code First 创建的列中字符串与其他数据类型的可为空性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9771130/

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