按https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db的提示转换,发现数据库中字段Status(非空的bool,默认值为1),转为Models时,被转为 public bool? Status { get; set; };可为空的字段CreateBy(可为空的varchar(50)),在Model 中转换为 public string CreateBy { get; set; }
这个是什么原因使数据库字段和Model属性不一致;这种不一致对程序有啥影响?
not null的字段怎么可能转换为bool? 你自己先核实一下Status到底是否为not null,如果只有有默认值1,并不是你说的表列结构定义not null,就会出现bool?
引用类型本身就是可null类型,当然就不用再加?
bool、int、datetime这些是值类型,如果要赋值为null就必需加?运算符标识。
CreateBy字段:
Status字段:
@泰德:
CreateBy 那个是 string 类型,string 本身就是引用类型,可以赋值为null(默认也为null)
Status 那个应该是一个bug 换个版本试下看看,可以手动把bool后面的?去掉,免得引起歧义
@Adming:
用的使.Core2.2,不至于有Bug吧
@泰德: 这个可不一定,和.net core2.2没直接关系,这个属于EF Core的范围,EF Core推荐的方式是代码优先,不是数据库优先,出bug也不是什么稀奇事。像没有主键的表用EF Core生成代码时直接被忽略,连实体都不会生成。
数据库是不是设置 Status 可为空了,不然怎么会转成 bool?;
bool? 有三个值,true,false,null;
在调用的时候,不能直接用 Status ,需要加一个(bool) Status 转换,否则编译会报错;
如果查出来 Status 为空,运行也会报错,要先赋值。
CreateBy字段:
Status字段: