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

mas*_*oes 3 c# sql entity-framework constraintexception nullable

所以我在这里有一个奇怪的困境.我的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()
)
Run Code Online (Sandbox Code Playgroud)

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

我一直收到这个错误:

EntityFramework.dll中出现"System.Data.ConstraintException"类型的异常但未在用户代码中处理附加信息:"Company"上的"ZipCode"属性无法设置为"null"值.您必须将此属性设置为类型为"System.Int32"的非null值.

任何人都可以想到为什么会这样做?我检查并仔细检查了我的数据库项目和我的本地数据库,它们都匹配.我的所有单元测试都通过了,所以我在这里几乎不知所措.

任何帮助,将不胜感激!

Sat*_*rny 5

您在C#Entity Framework中的属性显然是:

public int ZipCode;
Run Code Online (Sandbox Code Playgroud)

你必须改变它

public Nullable<int> ZipCode;
Run Code Online (Sandbox Code Playgroud)

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

更新:

建议(如果可能)将ZipCode的类型更改为字符串.它不仅会处理当前"可以为空"的问题,而且还会随着需求的进一步变化而很好地扩展!

  • 我的偏好是这个"字符串".10位邮政编码中有短划线,这里没有数学,国际邮政编码有时包含字母. (2认同)