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? 

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

posted @ 2021-06-02 11:10  ifnk  阅读(846)  评论(0编辑  收藏  举报