Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的SQL表被设置为允许此列为NULL,但当我运行它时,它说它不能为NULL。什么/为什么/如何?_C#_Sql_Entity Framework_Nullable_Constraintexception - Fatal编程技术网

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

C# 我的SQL表被设置为允许此列为NULL,但当我运行它时,它说它不能为NULL。什么/为什么/如何?,c#,sql,entity-framework,nullable,constraintexception,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

所以我有一个很奇怪的困境。我的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'

有人能想出为什么会这样做的原因吗??我已经检查并再次检查了我的数据库项目和本地数据库,它们都匹配。我所有的单元测试都通过了,所以我在这里几乎不知所措

任何帮助都将不胜感激

您在C#实体框架中的属性显然是:

public int ZipCode;
你必须把它改成

public Nullable<int> ZipCode;
公共可空ZipCode;
也可以在实体框架的edmx文件的可视化编辑器的“属性”窗口中执行此操作

更新:

还建议(如果可能的话)将ZipCode的类型更改为string。它不仅可以解决当前的“可为空”问题,而且还可以很好地扩展到需求的任何变化

您可以使用

public int? ZipCode;

这意味着可以为空

您是否阅读了错误消息?它表示您正试图将
null
分配给
Int32
。如果数据库
ZipCode
字段中存在
NULL
指定,EF实体中的相应字段必须是可为NULL的int才能工作。您是否检查了创建的SQL表是否具有可为NULL的字段,以及实体模型是否知道这是可为NULL的?您是如何生成YRU EF代码的?数据库优先还是代码/模型优先?为什么ZipCode是int?你是想让它们成倍增长还是什么?+4代码和外来代码如何?使用VarChar。是的,我同意@DourHighArch。还请记住,int将丢失任何前导零,我确实读取了它,但我假设它是这样说的,因为数据类型需要是Int32。我没有意识到我需要做什么特殊的事情才能使值为null。我怎样才能像你说的那样使它成为一个可为null的int呢?对于这个,我的首选是
字符串。10位邮政编码中有一个破折号,这里没有数学,国际邮政编码有时包含字母。@RobertHarvey绝对,最好将邮政编码和电话号码作为字符串。通过这种方式,它可以让您适应仪表板(-),当您将其存储在国际级别(国际邮政编码、邮政编码和电话号码)时,仪表板(-)运行良好。很高兴知道,谢谢@satwikandkarny!老实说,我没有想到要把邮政编码(或电话号码)变成一个字符串,但在阅读了每个人的评论之后,这肯定是有意义的。谢谢大家的帮助!