Linux学习日记-使用EF6 Code First(四)
一、在linux上使用EF
开发环境 VS2013+mono 3.10.0 +EF 6.1.0
先检测一下EF是不是6的 如果不是 请参阅 Linux学习日记-EF6的安装升级(三)
由于我的数据库已经建好了 所以我直接是 ”从数据库生成Code First“ 如下图
接下来就是下一步了。。。你懂的
现在我们可以放到linux 上愉快的玩耍啦! 结果。。。如下图
根据他的异常信息提示,连接字符串有问题 好吧。。我这个是自动生成的在本地可以啊
我就开始改吧!我直接放到里面
还是那个异常 我就都GG吧(度娘这货不靠谱 搜不到)
下面贴出来解决方法:
创建一个新类 ManifestTokenResolver 并将其保存为 ManifestTokenResolver.cs 在您的项目。 现在从下面复制和发布以下代码:
using System;
using System.Data.Entity.Infrastructure;
using System.Globalization;
using System.Data;
using System.Data.Common;
namespace ConsoleEFTest
{
public class ManifestTokenResolver : IManifestTokenResolver
{
public string ResolveManifestToken(DbConnection connection)
{
// The simplest thing is just to return hardcoded value
// return "2012";
try
{
connection.Open();
var majorVersion =
Int32.Parse(connection.ServerVersion.Substring(0, 2), CultureInfo.InvariantCulture);
if (majorVersion == 9)
{
return "2005";
}
if (majorVersion == 10)
{
return "2008";
}
return "2012";
}
finally
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
}
}
}
现在创建另一个新类 配置 并将其保存为 Configuration.cs 文件在您的项目。 现在下面复制下面的代码粘贴到类:
using System;
using System.Data.Entity;
namespace ConsoleEFTest
{
public class Configuration : DbConfiguration
{
public Configuration()
{
SetManifestTokenResolver(new ManifestTokenResolver());
}
}
}
这 个类将注册ManifestTokenResolver类将覆盖默认的一个,所以现在我们只是以字符串返回一个特定版本,现在你的异常应该消失。
如果您使用的是SQL 2014不要试图改变ManifestTokenResolver类中的代码返回“2014”字符串,因为我发现自己,它不会工作。 所以坚持是现在的代码。
以沫浅夏----奔跑的孩子
个人博客地址:http://www.blog.liyang.love
个人博客地址:http://www.blog.liyang.love