环境: EntityFrameWork CodeFirst+MySql
今天在提交一个外键字段的修改时报“Parameter ‘@columnType‘ must be defined.”
google了一下
解决方法在链接字符串中加入这样一句话“;Allow User Variables=True”就可以了。
<add name="AccountDB" connectionString="server=localhost;user id=root;password=root;port=3306;database=Account;Allow User Variables=True" providerName="MySql.Data.MySqlClient" />
后记
事件简单重现一下。
有三个表。一个流水,一个类型表和用户表,主键用的是GUID。
流水表实体一开始我是直接引用“类型表”和“用户表”的实体。EF自动给我在数据库的“流水表”中键了。“类型_ID”和“用户_ID”这样的字段。
在实际使用时才发现添加流水表记录时系统会自动往“类型表”和“用户表”中添加一条记录(我给流水表中的类型和用户字段赋了值)。因为添加的记录的ID是已经存在的。会报主键重复的错误。所以决定改用手动字义外键字段的方式。
在流水表实体中添加了“类型表ID”和“用户表ID”。然后提交修改。结果报错了。说外键不存在。我在数据库管理工具中看了下发现索引和外键都不存在。于是就把迁移的代码中的删除外键和索引都注释了如:
再提交"update-database -verbose"。结果还是报错了。这次报的就是“Parameter ‘@columnType‘ must be defined.”了。
EntityFrameWork Parameter '@columnType' must be defined.