X icon indicating copy to clipboard operation
X copied to clipboard

XCode 代码生成工具为什么不能生成 Nullable 属性?

Open zhang-junlin opened this issue 1 year ago • 7 comments

我的 Model.xml 配置文件有一个字段是可空的,即 Nullable="True",为什么生成的实体对应的属性不是可空类型的属性呢?

比如: <Column Name="Id" DataType="Int64" Nullable="True" Description="编号" />

我想要的结果 public long? Id { get; set; }

但是实际结果是 public long Id { get; set; }

zhang-junlin avatar May 16 '24 06:05 zhang-junlin

代码生成器xcodetool.exe默认不支持可空类型,你可以通过模型文件的Nullable配置来打开

nnhy avatar May 16 '24 07:05 nnhy

代码生成器xcodetool.exe默认不支持可空类型,你可以通过模型文件的Nullable配置来打开

image

请问一下您说的是 这个配置吗?我打开了还是不行。

zhang-junlin avatar May 16 '24 07:05 zhang-junlin

是这个开关,你的代码生成器xcodetool是最新版吗?可以下载最新版,或者拉取代码自己发布一个

nnhy avatar May 16 '24 07:05 nnhy

是这个开关,你的代码生成器xcodetool是最新版吗?可以下载最新版,或者拉取代码自己发布一个

是的,我的 xcodetool 工具是最新的,我发现问题所在:打开这个开关后,只有引用类型才会生成 Nullable<T>,比如 String? ,值类型不会生成,比如 Int32,不会生成 Int32?

我不知道为什么是这个结果,您也可以在您本地试试。希望团队能修复这个问题,谢谢!

zhang-junlin avatar May 16 '24 07:05 zhang-junlin

如果你的测试正确,那么说明这是一个bug,需要有人来修复。

大部分XCode用户从来不用可空类型,所以大家都没有注意这个问题。

nnhy avatar May 16 '24 08:05 nnhy

如果你的测试正确,那么说明这是一个bug,需要有人来修复。

大部分XCode用户从来不用可空类型,所以大家都没有注意这个问题。

是的,不过我觉得可空类型是必需的,毕竟从数据库角度来讲,0 和 NULL 的意义是完全不同的。比如有时候数据库字段是 NULL 值,但是我们查询返回给前端的结果是 0,这样并不是大家想要的结果。

zhang-junlin avatar May 16 '24 08:05 zhang-junlin

想法是美好的! 但是20多年的团队协作经验表明,从来就没有一个团队,它的所有人能够在是否让数据库NULL具有业务意义这一点上统一意见。

NewLife团队的理念是:不强求! 也就意味着,数据库可能是NULL,可能是0。 因此,我们的项目清一色不用可空类型,数据库数字型字段默认都不允许为空! 不许为空,还优化了索引性能。

nnhy avatar May 16 '24 08:05 nnhy