我有一个我已经使用了一年多的课程库,最近在升级到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中有一些简单的变化而我只是错过了它,但我完全被难倒了。
答案 0 :(得分:4)
好的,我已经解决了这个问题。
由于无法解决6.1的问题,我所做的一切都没有对结果产生任何影响,甚至构建和单步执行EF源也没什么用,所以我回滚到EF 5.0并重建了我的代码。 / p>
EF 5立即返回一条错误消息,指出架构定义中存在问题,另一位开发人员添加的视图引用了系统视图,这使我的模板混乱,我修复了问题,并在几分钟内恢复工作。
这里学到的教训是,EF 6需要对其错误处理进行一些认真的工作,因为只返回一个通用的异常错误让我在各个方向上追逐,而来自EF 5的错误消息直接指向了我。< / p>
答案 1 :(得分:0)
基于评论,似乎发生的事情是:
检查配置: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文件中。