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? 

这样 插入 更新 的时候 就不会报 违反外键约束 的错啦 ~


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM