代码优先的EF数据库在启动时不能自动生成

本文关键字:启动 不能 自动生成 数据库 EF 代码 | 更新日期: 2023-09-27 18:03:11

我有一个新的ASP。. NET web应用程序,我称之为"Smartifyer",这是空的开始。我用Nuget添加了EntityFramework,并创建了一个名为WordModel的模型和以下上下文:

public class SmartifyerContext : DbContext
{
    public SmartifyerContext()
        : base("SmartifyerDatabase")
    {
    }
    public DbSet<WordModel> Words { get; set; }
}

在根目录的Web.config中,我有以下配置:

<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>
  <connectionStrings>
    <add name="SmartifyerDatabase"
       connectionString="Data Source=(LocalDB)'v11.0;AttachDbFilename=|DataDirectory|'SmartifyerDb.mdf;Integrated Security=True"
       providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <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>

在上下文上运行测试时,Find方法大约需要30秒,直到超时并出现以下错误:

System.Data.SqlClient。与网络相关的或在建立连接时发生特定于实例的错误SQL服务器。未找到服务器或无法访问服务器。验证实例名是否正确,SQL Server是否配置为允许远程连接。(provider: SQL Network Interfaces,错误:26-指定服务器/实例定位错误)

我对设置SQL连接和Web.config中的所有配置的理解很差。我希望。mdf数据库文件是自动生成的,如果它不存在,但我不确定如何修改我的配置来做到这一点。

EDIT WITH SOLUTION:我所有的连接配置和数据库的东西设置正确。我的问题是,我正在运行一个单元测试,使用测试项目的app.config文件,而不是主项目的web.config。复制并粘贴我的web.config到测试项目的app.config修复了这个问题!

代码优先的EF数据库在启动时不能自动生成

您得到的错误是因为EF无法定位数据库实例服务。EF有默认连接字符串,连接到开发人员数据库,称为LocalDB'V11.0。您的应用程序正在尝试连接到ConnectionString中指定的LocalDB'V11.0

<add name="SmartifyerDatabase" connectionString="Data Source=(LocalDB)'v11.0; ......

您必须确保在您的机器上安装了LocalDB实例。看看这个答案。如果没有,请安装它并尝试手动连接到LocalDB实例,然后尝试使用应用程序。希望这将解决您的问题

有关SQL LocalDB的信息,请参阅MSDN文章。

您也可以使用您的SqlExpress或其他Sql数据库,如果它安装在您的机器上。只要在connectionstring中更改DataSource属性,就可以了。