添加ContextDb对象时出现Entity Framework 6错误

时间:2016-03-27 15:21:43

标签: entity-framework

我刚刚在我的应用程序中添加了一个WPF项目,当我尝试使用我的DataAcccess类与Entity DB进行交互时,我收到错误:

  

类型' System.InvalidOperationException'的例外情况发生在   mscorlib.dll但未在用户代码中处理

     

其他信息:实体框架提供程序类型   ' System.Data.Entity.SqlServer.SqlProviderServices,   EntityFramework.SqlServer'在应用程序配置文件中注册   对于具有不变名称的System.Data.SqlClient'的ADO.NET提供程序   无法加载

这个错误才开始发生,因为我添加了这个项目,我无法弄明白。我将App.Config复制到了新项目,现在是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

当我尝试构建一个对象列表时,我的一个类中发生了错误

  

使用(var context = new DataAccess())

namespace MarketAnalyser.LogicLayer
{
    public class Instrument
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Expiry { get; set; }
        public double TickSize { get; set; }
        public double TickValue { get; set; }
        public double OpenTime { get; set; }
        public double CloseTime { get; set; }

        public Instrument(string name, string expiry, double tickSize, double tickValue, double openTime, double closeTime)
        {
            this.Name = name;
            this.Expiry = expiry;
            this.TickSize = tickSize;
            this.TickValue = TickValue;
            this.OpenTime = openTime;
            this.CloseTime = closeTime;
        }

        public static List<Instrument> GetAllInstruments()
        {
            List<Instrument> InstrumentList = new List<Instrument>();

            using (var context = new DataAccess())
            {
                foreach (var instrument in context.Instrument)
                {
                    InstrumentList.Add(instrument);
                }
            }

            return InstrumentList;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您能否仔细检查包含ADO.NET提供程序(System.Data.Entity.SqlServer.SqlProviderServices)的程序集(EntityFramework.SqlServer)是否已部署到输出文件夹(bin \ debug) 看起来装配解析机制无法找到它 要查看有关装配分辨率错误的更多详细信息,您可以使用Fuslogvw

默认情况下,当您安装最新版本的&#39; EntityFramework 6.1.3&#39;作为NuGet包,您可以从项目中获取两个程序集

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

仔细检查您是否有这些引用(并且它们将copyLocal属性设置为true),如果没有 - 重新安装包

答案 1 :(得分:0)

尝试在connectionString

之后添加</configSections>
<connectionStrings>
    <add name="Your_EntityName" connectionString="Data Source=your_server_name;Initial Catalog=Your_database_name;Integrated Security=True;" providerName="System.Data.SqlClient" />
  </connectionStrings>