Entity Framework Core将0自动替换为Null的问题解决求助
各位好,我最近在使用Entity Framework Core时遇到了一个特别棘手的问题,折腾了好半天都没找到根因,想请大家帮忙支支招!
情况是这样的:当我给实体类的Uploaded属性传入"0",然后尝试保存到数据库时,总会抛出这个错误:
Cannot insert the value NULL into column 'Uploaded', table 'ClientDocumentRequest'; column does not allow nulls. INSERT fails.
但奇怪的是,如果我传入的是"1",保存操作就完全正常,一点问题都没有。
先跟大家说下我的配置情况:
我在EF Core的实体配置里是这么设置Uploaded属性的:
builder.Property(c => c.Uploaded).IsRequired().HasDefaultValue(0);
执行迁移的时候,生成的代码里也正确包含了默认值配置:
Uploaded = table.Column<int>(type: "int", nullable: false, defaultValue: 0)
但我后来用SQL查询数据库字段信息的时候,发现了不对劲:
我执行了这段SQL:
SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_DEFAULT, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'ClientDocumentRequest' AND COLUMN_NAME = 'Uploaded'
查询结果里Column_Default居然是null,根本不是我配置的0!看起来我在EF里设置的默认值配置根本没同步到数据库?如果是这个原因导致的问题,那我该怎么确保配置能正确应用到数据库呢?
另外还有个诡异的现象:我直接用SQL语句往ClientDocumentRequest表里插数据,给Uploaded字段传0是能正常保存的,但通过EF Core传0就会被自动换成null?我完全搞不懂怎么才能让EF Core知道,我就是要传入0,别把它替换成null啊!
有没有遇到过类似问题的朋友?或者有大佬能指点一下我该怎么排查和解决这个问题吗?非常感谢大家的帮助!
内容来源于stack exchange

