这个在我花了大力气的情况下终于搞通了,日了狗。。
直接说正事。
此处达到的目的是能够通过Nuget的命令行直接在mysql中创建数据库的表。
1.先行条件,需要创建好对应的model。(此处需要以后再来补)
2.通过Nuget安装好各个工程。
那么下面正式开始
1.创建一个.NET的库的工程。(为什么要单独一个工程呢,因为此处主要是与数据库相关的操作,为了解耦将其分开)
2.然后在Mysql官网的里面,找到了安装的前置条件。
https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html
这个集合包整合了所有的东西,因此只安装这个就够了。
3.此时可能会出来一个APP.CONFIG文件,当然先不用去管
4.创建一个
建议空的codefirst的模型
5.创建完成之后,就开始要关注各种东西了,首先,你的APP.CONFIG中会多出些东西来。
你需要将其中几个关键的东西改正。这里是最关键的一环,因为我在这里整了半天!!!!!
6.那么在刚刚的ADO.NET连接数据库的东西我们可以写入
7.打开Nuget命令行工具,将该工程设为启动项,然后命令行对象调整为该工程
输入指令
PM> Enable-Migrations
然后输入
PM> Add-Migration AddDatabase
生成了
再输入
PM> Update-Database -Verbose
此时数据库中就多出来创建好的表格了。
注意:有几个可能出错的地方。
1.切勿多次用Nuget安装一个个的包。entities的那个包已经是对应好的组合包了,直接安装那一个,别的都别动。否则会出一些很奇怪的错误。可能是各个版本的问题。
2.The connection string 'MyContext' in the application's configuration file does not contain the required providerName attribute."
这个错误的原因是,在connectstring中的那个providerName="MySql.Data.MySqlClient"没有添加,Nuget不会带有这个的,在前面的说明中有提到
3.No MigrationSqlGenerator found for provider 'MySql.Data.MySqlClient'. Use the SetSqlGenerator method in the target migrations configuration class to register additional SQL generators.
这个错误的原因是,在你的ADO.NET那个cs文件中没有加上[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
4.No connection string named 'MyContext' could be found in the application config file.
需要将对应的工程改为启动项,此处config文件在多个工程联动的情况下会出现问题,有兴趣的可以研究下。
5.若是一切都正常了,你发现丫的半天没有表出来,哈哈,记得最后一句代码。
PM> Update-Database -Verbose
如果数据库里面没有这个表会导致后续的数据库更新失败。
7.存储过程在添加字段或者删除字段的时候有可能会影响,所以MapToStoredProcedures 干脆就不要写在modelcreating的方法下面了。记得把configuration中的false改为这两个。
8.Parameter '@columnType' must be defined
哦了。后续的补充我会在研究过后再贴上,伤不起啊,不过个人觉得研究中你会学到很多。不是指学到了怎么安装,而是怎么去解决这些问题。我能找到Mysql上的对这个的介绍,也能找到stackoverflow上的一些些东西。还有最关键的一点,如果你搜的问题丫的哪里都找不到,果断重建一个工程,因为很有可能像我之前一样,工程添加多次,config文件中一大推,对的也不对了。