NewLifeX / X

Core basic components: log (file / network), configuration (XML / JSON / HTTP), cache (memory / redis), network (TCP / UDP / HTTP), RPC framework, serialization (binary / XML / JSON), APM performance tracking. 核心基础组件,日志(文件/网络)、配置(XML/Json/Http)、缓存(内存/Redis)、网络(Tcp/Udp/Http)、RPC框架、序列化(Binary/XML/Json)、APM性能追踪。
https://newlifex.com
MIT License
1.76k stars 524 forks source link

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

Open zhang-junlin opened 6 months ago

zhang-junlin commented 6 months ago

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

比如:

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

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

nnhy commented 6 months ago

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

zhang-junlin commented 6 months ago

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

image

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

nnhy commented 6 months ago

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

zhang-junlin commented 6 months ago

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

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

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

nnhy commented 6 months ago

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

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

zhang-junlin commented 6 months ago

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

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

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

nnhy commented 6 months ago

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

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