运行linq命令时无法识别属性“name”错误

时间:2014-07-31 18:35:05

标签: c# asp.net linq entity-framework web-config

我在我的APS.NET 4.5 Web应用程序中使用Entity Framework 6。

运行以下命令时:

using (var db = new booksEnteties())
{
    var books = from b in db.books
    select b;
} 

我收到以下错误:

  

类型' System.Configuration.ConfigurationErrorsException'的异常发生在System.Configuration.dll中但未在用户代码中处理

详情:

  

无法识别的属性'名称'。

它指向web.config第111行:

 <remove name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" />

当我删除此行并尝试再次运行时,我收到以下错误:

  

为system.data创建配置节处理程序时出错:Column&#39; InvariantName&#39;被限制为独特的。价值&#39; MySql.Data.MySqlClient&#39;已经存在。

我认为这与web.config中的Entity Framework 6配置有关。

3 个答案:

答案 0 :(得分:4)

正如Tim Tang所说,如果您使用的是Entity Framework 6,则需要使用Connector / NET 6.8.x. 您还应该为项目添加对MySql.Data.Entity.EF6的引用。

enter image description here

然后为您的Web.config文件,如下所示:

 <entityFramework>
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" 
                type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient"></remove>
      <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>

请查看this了解更多详情。

答案 1 :(得分:2)

只需添加版本摘要

  • 对于EF4,请使用Connector / NET 6.6.x(当前GA为6.6.6)
  • 对于EF5,请使用Connector / NET 6.7.x(当前GA为6.7.4)或 Connector / NET 6.8.x(当前GA为6.8.3)。
  • 对于EF6,请使用Connector / NET 6.8.x(当前GA为6.8.3)。

在EF5或更低,一切都好。在EF6中,你需要使用mysql连接器6.8.x,并将DbConfigurationTypeAttribute添加到你的DbContext:

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DemoContext : DbContext{}

其中MySqlEFConfiguration位于6.8.x中的MySql.Data.Entity.EF6.dll中。试一试!

答案 2 :(得分:1)

错误非常具体......它抱怨属性'Name' 你的问题就在这一行:

<remove name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" />

这里的名称无效,只需删除它就应该是这样的:

<remove invariant="MySql.Data.MySqlClient" />