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

时间:2014-06-12 19:48:22

标签: 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,对吧?好吧,显然不是......

我一直收到这个错误:

  

类型' System.Data.ConstraintException'的例外情况发生在   EntityFramework.dll但未在用户代码中处理   信息:' ZipCode'物业公司'无法设置为   '空'值。您必须将此属性设置为类型的非null值   ' System.Int32'

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

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:5)

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

public int ZipCode;

您必须将其更改为

public Nullable<int> ZipCode;

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

<强>更新

将ZipCode的类型更改为字符串也是可取的(如果可能)。它不仅会照顾当前可空的“可空白”。问题,但随着要求的进一步变化,也会很好地扩展!!

答案 1 :(得分:1)

你可以用作

public int? ZipCode;

它意味着Nullable