EntityFramework 6.1无法连接

时间:2014-04-21 15:29:21

标签: entity-framework entity-framework-6

我有一个我已经使用了一年多的课程库,最近在升级到EF 6.1后停止了工作。

我已经尝试过将连接字符串传递给我的Context类构造函数的各种方法,但是它似乎正确地传递了我总是收到的字符串:

'((System.Data.Entity.DbContext)(context))。Database.Connection).ServerVersion'抛出类型'System.InvalidOperationException'的异常

并且连接状态保持关闭状态。

这是我的AppConfig:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>

    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
  <connectionStrings>
    <add name="MyContext" connectionString="Data Source=Server;Initial Catalog=DBName;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

我的测试班:

using System.Data.Entity;

namespace SVMIC.IMS.Entity.IMSClaim
{
    public class Context:DbContext
    {
        static Context()
        {
            Database.SetInitializer<Context>(null);
        }

        public Context():base("MyContext")
        {
        }
    }
}

和我的测试应用:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SVMIC.IMS.Entity.IMSClaim;

namespace TestApp
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();

      Context context = new Context();

    }
  }
}

数据库服务器是SQL Server 2008 R2。

我认为它在6.1中有一些简单的变化而我只是错过了它,但我完全被难倒了。

4 个答案:

答案 0 :(得分:4)

好的,我已经解决了这个问题。

由于无法解决6.1的问题,我所做的一切都没有对结果产生任何影响,甚至构建和单步执行EF源也没什么用,所以我回滚到EF 5.0并重建了我的代码。 / p>

EF 5立即返回一条错误消息,指出架构定义中存在问题,另一位开发人员添加的视图引用了系统视图,这使我的模板混乱,我修复了问题,并在几分钟内恢复工作。

这里学到的教训是,EF 6需要对其错误处理进行一些认真的工作,因为只返回一个通用的异常错误让我在各个方向上追逐,而来自EF 5的错误消息直接指向了我。< / p>

答案 1 :(得分:0)

基于评论,似乎发生的事情是:

  • 原始EF升级无法正常运行,因此您仍在旧EF上运行
  • 当您更改代码时,重建会触发您使用New EF
  • 但是新的EF dll不可用,所以你得到了错误。

检查配置:EF版本是6.0而不是6.1,公钥标记也与.net 2.0相同。

答案 2 :(得分:0)

仅提供有关此错误的信息

我正在使用EF 6.1配置存储库和工作单元设计模式,其中包含一个名为&#34; School&#34;

的简单测试数据库

它有以下3个表

BookMaster

图书馆和

学生

我创建了各自的Entity类,Configurations类,Repository类,还在Entities类中创建了数据库集。

几天之后,我又创建了一个表,其中没有创建上面提到的类和DbSet。

我发现在base()构造函数参数中提供连接字符串名称给了我以下错误

  

&#39;(context.Database.Connection).ServerVersion&#39;抛出类型&gt;&#39; System.InvalidOperationException&#39;的异常实体框架6.1

但是,如果我将完整的连接字符串作为参数传递给base()方法,那么它就可以了。

经过一些试验和错误后,我删除了创建的第4个表,它像梦一样工作。因此可能需要利用所有表并创建上述类和DbSets,这可能会解决此问题

答案 3 :(得分:0)

如果您正在使用本地MDF文件,请在App.config / Web.config中更新MDF文件的文件夹路径 否则复制dbmx App.cofig connectionStrings并粘贴到项目App.config / Web.config文件中。