奕玖科技 > 新闻中心 > 技术文章

c# efcode 解决数据库约束冲突 外键冲突的办法

来源: 奕玖科技 Fly | 2025/8/10 10:36:08

我在做数据库模型导航属性时,碰到这样一个问题。比如我有2个表 HkGoods 和 MallGoods 它们都有一个导航属性 public List<Parameter> Parameter { get; set; } = new List<Parameter>(); 导航属性里设置的外键是通过Sid指向商品的Id。在DbContextOptions里的OnModelCreating如下设置

  modelBuilder.Entity<MallGoods>().HasMany(e => e.Parameter).WithOne().HasForeignKey(p => p.Sid).OnDeLete(DeleteBehavior.NoAction).IsRequired(false); 
  modelBuilder.Entity<HkGoods>().HasMany(e => e.Parameter).WithOne().HasForeignKey(p => p.Sid).OnDelete(DeleteBehavior.NoAction).IsRequired(false);

奇怪的是我在一台电脑上使用这个导航属性能正常的更新与添加数据。在另外一台电脑上就会显示外键冲突的错误具体表现为INSERT 语句与 FOREIGN KEY 约束"FK_Parameter_HkGoods_Hid"冲突。该冲突发生于数据库"Housekeeping",表"dbo.HkGoods", column 'Id' 。然后我经过研究发现出现此问题的根本原因是 比如上面的语句 当我准备更新或则MallGoods 的导航属性时,数据库会检测HkGoods是否有相应的数据。很明显,我上面的设计都是指向Id,所以为MallGoods添加Parameter时HkGoods 必然会没有对应的数据,就会产生报错。(但奇怪的是我在另外一台电脑上不会出现这样的问题,数据库还都是sql server 2016,所以我想可能也跟数据库有关系)。

明天了问题的所在那么就可以进行解决了,其实方法就很简单。

一:直接删除掉数据库里的外键约束

但这样做,会影响EfCode里的数据迁移。因为直接删除掉外键约束,那么肯定就跟我们的efcode数据模型不一致了。

二:在数据库里做设置

根据我上图里的标注,我们将 在创建或重新启用时检查现有 选择否 然后在 强制外键约束也选择否 然后保存修改。(特别注意保存修改是在设计里保存,就是我们为表添加字段的那个设计的地方保存),这样数据库就不会做检测基表的Id。导航属性就可以正常的添加数据了。


栏目导航
相关文章
文章标签
关于我们
公司简介
企业文化
资质荣誉
服务项目
高端网站定制
微信小程序开发
SEO排名推广
新闻动态
行业新闻
技术学院
常见问题
联系我们
联系我们
人才招聘
联系方式
Q Q:24722
微信:24722
电话:13207941926
地址:江西省抚州市赣东大道融旺国际3栋
Copyright©2008-2022 抚州市奕玖科技有限公司 备案号:赣ICP备2022010182号-1