如何在EF Code First中将int类型QR字段设置为数据库NULL值?
解决EF Code First中QR字段存入NULL的问题
核心问题分析
你当前的Customer实体类里,QR字段定义的是值类型int,而值类型本身不能为null——这就是你无法赋值null的根本原因:EF会根据实体类型生成不允许NULL的数据库列,同时代码层面也不允许把int?(可空int)赋值给int类型。
具体解决步骤
1. 修改实体类的QR字段类型
把QR字段改成可空整数类型int?,这样EF Code First会自动识别这个字段允许存储NULL值:
public class Customer:BaseEntity { public string Name { get; set; } public string Surname { get; set; } public string Email { get; set; } public string Password { get; set; } public string VerPassword { get; set; } public string SecurityQuestion { get; set; } public string SecurityAnswer { get; set; } public int RolId { get; set; } // 修改为可空int类型 public int? QR { get; set; } }
2. 更新数据库结构
因为你用的是Code First,需要通过迁移同步数据库表结构:
- 打开Visual Studio的Package Manager Console,执行以下命令:
(Add-Migration UpdateQRToNullable Update-DatabaseUpdateQRToNullable是自定义的迁移名称,可按需修改) - 若未启用过迁移,先执行
Enable-Migrations初始化迁移,再执行上述命令。
3. 代码中直接赋值NULL
修改实体类后,直接给model.QR赋值null即可,无需额外转换:
model.QR = null; _customerService.Add(model);
为什么之前的代码失败?
你之前尝试用int? value = null赋值给model.QR,但model.QR是int类型(非可空),值类型与可空值类型之间无法隐式转换,因此编译器报错。只有把实体字段改成int?,才能接受null值。
内容的提问来源于stack exchange,提问作者AlexDeSouza
相关产品推荐
相关产品推荐

