SQLite组合主键设置外键以及出现外键匹配出错System.Data.SQLite.SQLiteException (0x80004005) SQL logic error or missing d

SQLite组合主键设置外键以及出现外键匹配出错System.Data.SQLite.SQLiteException (0x80004005) SQL logic error ormissing databaseforeign key mismatch - EntityCommodityProperty referencingCommodityPropertytemplate解决方案

转载请注明出处:http://blog.csdn.net/aaa123524457/article/details/47950907

问题描述:

有一个父表,使用了组合主键(如下图):


有一个子表,需要用到上面的父表的模版信息,于是想在子表里建立外键(如下图);


结果在程序运行的时候插入数据,出现了下面的错误提示:

2015-8-24 14:19:43

----------------------------------------

System.Data.SQLite.SQLiteException (0x80004005): SQL logic error or missing database

foreign key mismatch - "EntityCommodityProperty" referencing "CommodityPropertytemplate"

   at System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQLiteStatement previous, UInt32 timeoutMS, String& strRemain)

   at System.Data.SQLite.SQLiteCommand.BuildNextCommand()

   at System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index)

   at System.Data.SQLite.SQLiteDataReader.NextResult()

   at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)

   at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)

   at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(CommandBehavior behavior)

   at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()

   at PowFundManager.SQLiteWrapper.Execute(String sqlQuery, SQLiteParameter[] parameter)

 

 转载请注明出处:http://blog.csdn.net/aaa123524457/article/details/47950907

问题分析:

由错误信息可以看出:总是提示外键不匹配!!!

其实出现问题的地方也挺简单,就是因为自己的粗心造成的。当然,截图里看到的生成之后的表,我的数据库表都是在程序里用代码直接生成的。说明这个问题有截图就够了,就不贴完整的源码了。

我的子表里新建外键的时候是这样写的:

FOREIGN KEY (CommodityProTemID) REFERENCES CommodityPropertytemplate(CommodityProTemID) ON DELETE CASCADE,

但是父表里面的主键却是这样的:

PRIMARY KEY (CommodityProTemID,CommodityID)

这下知道问题所在了吧,父表里的主键是组合主键,由两个属性构成的。但是子表里面却只写了一个,而且这个属性的值是有重复的!

这样就肯定会出现外键不匹配的情况(foreign key mismatch)!

 

问题解决:

其实解决很简单,只需要设置组合外键就可以了,看代码:

父表不用改,子表代码修改如下:

FOREIGN KEY (CommodityProTemID,CommodityID) REFERENCES CommodityPropertytemplate(CommodityProTemID,CommodityID) ON DELETE CASCADE,

当然,子表里要先建立CommodityProTemID,CommodityID两个属性列。

 

 转载请注明出处:http://blog.csdn.net/aaa123524457/article/details/47950907

这样,组合主键的外键设置方法、以及由组合主键引起的外键不匹配的问题就解决了!

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值