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")
{
}
Ответ 3
В этом блоге вы узнаете, как это сделать...
http://blogs.msdn.com/b/davidobando/archive/2013/03/13/10339621.aspx