我的SQL表设置为允许该列为NULL,但是当我运行它时,它说它不能为NULL.什么/为什么/如何

本文关键字:NULL 什么 如何 为什么 运行 不能 设置 SQL 许该列 我的 | 更新日期: 2023-09-27 18:08:28

所以我在这里有相当奇怪的困境。我的SQL表设置为允许ZipCode列为空,如下所示:

CREATE TABLE [dbo].[Companies]
(
    [CompanyId] BIGINT IDENTITY(1,1) NOT NULL PRIMARY KEY, 
    [Name] NVARCHAR(100) NOT NULL, 
    [Address]     NVARCHAR (100) NULL,
    [City]        NVARCHAR (50)  NOT NULL,
    [State]       NVARCHAR (2)   NOT NULL,
    [ZipCode]     INT   NULL,
    [PhoneNum]    BIGINT  NULL,
    [CreatedDate] DATETIME2 NOT NULL DEFAULT GetDate()
)

这应该让我有ZipCode的值为NULL,对吧?显然不是....

我一直得到这个错误:

System.Data类型的异常。ConstraintException'发生在但是在用户代码中没有处理信息:"公司"上的"ZipCode"属性不能设置为a"零"的价值。必须将此属性设置为类型的非空值"System.Int32"。

有谁能想到为什么它会这样做吗?我反复检查了我的数据库项目和本地数据库,它们都是匹配的。我所有的单元测试都通过了,所以我有点不知所措。

任何帮助将不胜感激!

我的SQL表设置为允许该列为NULL,但是当我运行它时,它说它不能为NULL.什么/为什么/如何

你在c#实体框架中的属性显然是:

public int ZipCode;

你必须把它改成

public Nullable<int> ZipCode;

您也可以在实体框架的edmx文件的可视化编辑器中的属性窗口中执行此操作。

更新:

将ZipCode的类型更改为string也是可取的(如果可能的话)。它不仅可以解决当前的"可空"问题,还可以很好地适应需求的任何变化!!

可以使用as

public int? ZipCode;

表示可为空