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”字符串,因为我发现自己,它不会工作。 所以坚持是现在的代码。

 

posted @ 2014-12-24 11:17  以沫浅夏  阅读(714)  评论(0编辑  收藏  举报