Entity Framework подключается к SQLEXPRESS, а не SQL Compact

Я пробовал первый проект EF с кодом SQl Compact 4.0. Когда я пытаюсь запустить проект, я получаю сообщение об ошибке "CREATE DATABASE разрешено в базе данных".

Я искал помощь и в ответ на несколько блогов пытался определить используемую строку соединения. К моему удивлению, это было

context.Database.Connection.ConnectionString    "Data Source=.\\SQLEXPRESS;Initial Catalog=Ancestors.Models.AncestorsContext;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE"    string

хотя мой файл web.config содержит следующие разделы...

<connectionStrings>
    <add name="DefaultConnection" providerName="System.Data.SqlServerCe.4.0"    connectionString="Data Source=|DataDirectory|\aspnet-Ancestors-20121012114712.sdf" /> 
</connectionStrings>

<system.data>
<DbProviderFactories>
  <remove invariant="System.Data.SqlServerCe.4.0" />
  <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>

Кто-нибудь знает, почему EF настаивает на создании соединения с SQLEXPRESS вместо SQL Compact? Я не могу найти никакой ссылки на SQLEXPRESS в любом месте решения.

Ответ 1

Вместо того чтобы использовать следующее имя передачи для DBContext

public YourContext() : base("DefaultConnection")
{

}

Используйте директиву имени

public YourContext() : base("name=DefaultConnection")
{

}

Это позволит EF использовать этот параметр в качестве соединения.

Также добавление "clear" в верхней части ваших разделов connectionStrings в файле web.config может разрешать проблемы наследования.

Ответ 2

Ищите раздел <entityFramework> в вашем web.Config, он должен иметь подключение по умолчанию factory:

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True"/>
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

Если вы выполняете первый проект кода, вы также можете изменить свой конструктор по умолчанию, чтобы использовать другую строку подключения:

public YourContext() : base("name=DefaultConnection")
{

}