具有代码优先连接字符串错误的实体框架5

时间:2013-06-04 16:32:38

标签: entity-framework-5

好吧,我整个上午都用Google搜索过,我真的可以使用一些帮助。我正在跟随Adam Freeman的一本书(Pro ASP.Net MVC 4),我被困在第7章。顺便说一句,我不知道为什么Apress没有像Wrox这样的支持论坛,作者可以帮助人们解决这些问题。他们的书。

无论如何,本书首先使用数据库来EF,在本书之后,我创建了一个localDB,定义了数据库模式并添加了一些示例数据。然后创建了这个DBcontext

    using System.Data.Entity;
    using SportsStore.Domain.Entities;

    namespace SportsStore.Domain.Concrete
   {
       class EFDbContext : DbContext
   {
       public DbSet<Product> Products { get; set; }
   }
   }

然后这是连接字符串

<connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=(localdb)\v11.0;Initial     Catalog=SportsStore;Integrated Security=True" providerName="System.Data.SqlClient"/>
  </connectionStrings>

此外,这里有一些我认为在安装过程中由EF / Nuget自动添加的设置

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

错误消息到处都是,因为我一直在弄乱它,错误消息不断变化,但它们都指向了一些关于Entity Framework的东西。请帮助,非常感谢任何帮助,所以我可以继续我的自学。

当前的错误消息是“ 配置部分'entityFramework'无法读取,因为它缺少部分声明

Config Source:
   96:   </runtime>
   97:   <entityFramework>
   98:     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">

2 个答案:

答案 0 :(得分:3)

要尝试处理错误,可以在构造函数中指定连接字符串名称:

using System.Data.Entity;
using SportsStore.Domain.Entities;

namespace SportsStore.Domain.Concrete
{
    public class EFDbContext : DbContext
    {
        public EFDbContext() : base("EFDbContext") {}
        public DbSet<Product> Products { get; set; }
    }
}

确保为名称传入的字符串与web.config

中的“name”属性相匹配
<connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=(localdb)\v11.0;Initial     Catalog=SportsStore;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>

如果这不起作用,请尝试使用“name =”添加,如下所示(有用reference here)。如果在配置文件中找不到连接字符串,这会强制EF5抛出可用于诊断的错误。:

namespace SportsStore.Domain.Concrete
{
    public class EFDbContext : DbContext
    {
        public EFDbContext() : base("name=EFDbContext") {}
        public DbSet<Product> Products { get; set; }
    }
}

如果这不起作用,那么我们需要您提供一些例外细节。

编辑

“无法读取配置部分'entityFramework',因为它缺少部分声明”

您的entityFramework部分应如下所示,请注意它是元素的直接子元素:

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- other section and sectionGroup declarations -->
  </configSections>
  <!-- other sections -->
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
  <!-- other sections -->
</configuration>

答案 1 :(得分:0)

我使用的是ASP.NET Core 1.0 RC1。对我而言,因为web.config而无法正常工作。问题出在web.config文件中。一开始,我的配置文件看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
  </system.webServer>
  <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>

要解决此问题,有两种方法。首先是添加到web.config行中,正如Andy Brown所示。请注意不同版本的EF。

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
</configuration>

其次是删除整个entityFramework部分。