【问题标题】:ConfigurationErrorException in trying to run console app with MySQL Entity Framework 6尝试使用 MySQL Entity Framework 6 运行控制台应用程序时出现 ConfigurationErrorException
【发布时间】:2014-07-06 15:54:01
【问题描述】:

我正在尝试学习如何将 Entity Framework 6 与 MySQL 一起使用。因为我已经有一个现有的数据库,所以我遵循模型优先的方法。但是,我总是遇到此错误消息,但它的帮助含糊不清。

Program.cs中这行代码的错误触发:

List<Student> students = dbContext.Students.ToList();

错误信息只是说:

System.Configuration.dll 中出现“System.Configuration.ConfigurationErrorsException”类型的未处理异常附加信息:无法识别的属性“名称”。

我的第一个假设是我的 App.config 文件有问题。但是,我不知道它在谈论 App.config 文件中的哪个 name 属性。我尝试搜索现有答案或可能的解决方案无济于事,所以我决定发布我的问题,希望你们能帮助我。


我正在使用什么:

  • Visual Studio 2013(安装在我的电脑上)
  • MySQL Server 5.6(安装在我的电脑上)
  • Entity Framework 6.1.1(通过 NuGet 包管理器安装在我的项目中)
  • MySql.ConnectorNET.Data 6.8.3.2(通过 NuGet 包管理器安装在我的项目中)
  • MySql.ConnectorNet.Entity 6.8.3.2(通过 NuGet 包管理器安装在我的项目中)

我做了哪些步骤:

  1. 创建了一个新的控制台应用程序
  2. 通过 NuGet 包管理器将实体框架、MySql.ConnectorNET.Data 和 MySql.ConnectorNet.Entity 安装到项目中
  3. 使用我现有的数据库添加了一个名为 DSWS_Model 的 ADO.Net 实体数据模型
  4. 输入了一些简单的代码,用于迭代并将学生列表打印到控制台中
  5. 运行
  6. 然后出现愚蠢的运行时错误

程序.cs

namespace MySQLEntityFramework6
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Start?");
            Console.ReadLine();
            try
            {
                using (dswsEntities dbContext = new dswsEntities())
                {
                    List<Student> students = dbContext.Students.ToList();
                    foreach (Student student in students)
                    {
                        Console.WriteLine(student.name);
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionUtility.LogException(ex);
            }
            Console.ReadLine();
        }
    }
}

DSWS_Model.Context.cs

namespace MySQLEntityFramework6
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class dswsEntities : DbContext
    {
        public dswsEntities()
            : base("name=dswsEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<Administrator> Administrators { get; set; }
        public virtual DbSet<BuildingSetting> BuildingSettings { get; set; }
        public virtual DbSet<Evaluation> Evaluations { get; set; }
        public virtual DbSet<LockerReservation> LockerReservations { get; set; }
        public virtual DbSet<Locker> Lockers { get; set; }
        public virtual DbSet<LoginQueue> LoginQueues { get; set; }
        public virtual DbSet<Student> Students { get; set; }
    }
}

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" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="dswsEntities" connectionString="metadata=res://*/DSWS_Model.csdl|res://*/DSWS_Model.ssdl|res://*/DSWS_Model.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;password=root;persistsecurityinfo=True;database=dsws&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

错误日志

    Exception Type: System.Configuration.ConfigurationErrorsException
Exception: Unrecognized attribute 'name'. (C:\Users\Nico\Documents\Visual Studio 2013\Projects\MVA\Entity Framework\MySQLEntityFramework6\MySQLEntityFramework6\bin\Debug\MySQLEntityFramework6.vshost.exe.Config line 23)
Source: System.Configuration
Stack Trace: 
   at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult)
   at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
   at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName)
   at System.Configuration.ConfigurationManager.GetSection(String sectionName)
   at System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName)
   at System.Data.Common.DbProviderFactories.Initialize()
   at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)
   at System.Data.Entity.Infrastructure.DependencyResolution.DefaultProviderFactoryResolver.GetService(Type type, Object key, Func`3 handleFailedLookup)
   at System.Data.Entity.Infrastructure.DependencyResolution.DefaultProviderFactoryResolver.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.CachingDependencyResolver.<>c__DisplayClass1.<GetService>b__0(Tuple`2 k)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at System.Data.Entity.Infrastructure.DependencyResolution.CachingDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.RootDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.CompositeResolver`2.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.DbDependencyResolverExtensions.GetService[T](IDbDependencyResolver resolver, Object key)
   at System.Data.Entity.Core.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
   at System.Data.Entity.Core.EntityClient.EntityConnection..ctor(String connectionString)
   at System.Data.Entity.Internal.LazyInternalConnection.InitializeFromConnectionStringSetting(ConnectionStringSettings appConfigConnection)
   at System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config)
   at System.Data.Entity.Internal.LazyInternalConnection.Initialize()
   at System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel()
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.InternalContext.Initialize()
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator()
   at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at MySQLEntityFramework6.Program.Main(String[] args) in c:\Users\Nico\Documents\Visual Studio 2013\Projects\MVA\Entity Framework\MySQLEntityFramework6\MySQLEntityFramework6\Program.cs:line 19
Target Site: System.Object EvaluateOne(System.String[], System.Configuration.SectionInput, Boolean, System.Configuration.FactoryRecord, System.Configuration.SectionRecord, System.Object)

提前感谢那些会回复的人。

【问题讨论】:

  • 你能发布异常的完整堆栈跟踪吗?这应该有助于解决配置问题的根本原因。
  • 在错误日志中发布了完整的堆栈跟踪。谢谢。

标签: c# mysql .net entity-framework visual-studio-2013


【解决方案1】:

从您的堆栈跟踪来看,它似乎在抱怨配置文件中 DbProviderFactory 元素之一的“名称”属性。您不需要在 remove 元素上指定名称,只需保持不变即可。尝试删除它,一切都应该开始工作了!

【讨论】:

  • 非常感谢! :) 顺便说一句,有趣的是我从来没有想过检查堆栈跟踪。几乎准确地给出了配置文件中的哪一行有问题。我责怪我的错误消息搜索习惯。 :P
  • 谢谢你,@Dean。我意识到这是一个 app.config 问题,但并不是说 remove 元素不需要 name 元素。如果没有这个答案,我可能已经搜索了很长时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
相关资源
最近更新 更多