c# - 我的 SQL 表设置为允许此列为 NULL,但是当我运行它时,它说它不能为 NULL。什么/为什么/如何?

标签 c# sql entity-framework nullable constraintexception

所以我在这里遇到了很奇怪的困境。我的 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,对吗?好吧,显然不是....

我一直收到这个错误:

An exception of type 'System.Data.ConstraintException' occurred in EntityFramework.dll but was not handled in user code Additional information: The 'ZipCode' property on 'Company' could not be set to a 'null' value. You must set this property to a non-null value of type 'System.Int32'.

谁能想出这样做的任何原因?我检查并仔细检查了我的数据库项目和本地数据库,它们都匹配。我所有的单元测试都通过了,所以我在这里几乎不知所措。

如有任何帮助,我们将不胜感激!

最佳答案

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

public int ZipCode;

你必须把它改成

public Nullable<int> ZipCode;

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

更新:

还建议(如果可能)将 ZipCode 的类型更改为字符串。它不仅可以解决当前的“可空”问题,而且还可以很好地适应 future 需求的任何变化!

关于c# - 我的 SQL 表设置为允许此列为 NULL,但是当我运行它时,它说它不能为 NULL。什么/为什么/如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24192830/

相关文章:

C# 重新挂载 USB 设备

c# - 获取整个表 - MySQL 错误

SQL - 加入者和离开者 - 行到列

entity-framework - 如何首先将新表添加到现有数据库代码中

java - 使用 Java 加载 .NET 4.5 可执行文件

c# - 如何使用 DI 通过 IValidatableObject 接口(interface)向实体提供验证器?

c# - 在 C# 中自动实例化 Automatic 属性的字段

sql - 组上的 Amazon Redshift Sum 窗口函数

c# - Linq 查询和 Foreach 对来自 SQL 数据库的大量记录

c# - 可以使用 EF 迁移更新生产数据库吗?