ef core 关于 guid(外键)可空类型
c# 里 给类型后面加个? 问号 代表 他是 可空的(nullable<T>)
通常 ef core 里面 关联外键的时候 用 guid 或者 long ,这些都是有默认值的 guid 的默认值是 (00000000-0000-0000-0000-000000000000) long 默认值是 0 ,
但是如果 给 guid? 或者 long? 那么 在 数据库里面 他们也表示 为 null 了 ,就不会有默认值
默认值 会 影响 数据 的写入
如果 不给 guid 加问号 ,你不传这个guid ,他最后 写入数据库的时候 就会 给默认值 00000000-0000-0000-0000-000000000000 从而 会 报
MessageText: 插入或更新表 "Sn_ConstructionBase_SubItemContent" 违反外键约束 "ForeignKey_SubItem_SubItemContent" Detail: 键值对(SubItemId)=(00000000-0000-0000-0000-000000000000)没有在表"Sn_ConstructionBase_SubItem"中出现.
就是因为 数据库里面 外键表 的数据 没有 00000000-0000-0000-0000-000000000000 这个数据
解决方法 就是 在 entity 里面定义 外键guid 的时候 写 guid? 加个问号
同样 在 createDto 或者 UpdateDto 里面 传入插入的外键的时候 也要给 guid?
并且在 dto 展示的时候 有guid 类型 的话 给 guid?
这样 插入 更新 的时候 就不会报 违反外键约束 的错啦 ~