2015-11-21 3 views
0

Я пытаюсь создать базу данных SQL Server Compact из кода, используя сценарий первого кода, используя Entity Framework. Все работало, пока я не понял, что я установил SQL Server 2014 Express, и он использовал его (вместо локального файла .sdf, который я и ищу). Поэтому я удалил SQL Server 2014 Express.Использование Entity Framework 6 с SQL Server Compact 4

Теперь, в моем решении, я использую расширение EntityFramework.SqlServerCompact nuget.

Однако, когда я пытаюсь инициализировать DbContext, я получаю сообщение об ошибке:

"A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)"

Я попытался настройки строки подключения в app.config к:

<?xml version="1.0" encoding="utf-8"?> 
<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" /> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    </configSections> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="System.Data.SqlServerCe.4.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" /> 
    </providers> 
    </entityFramework> 
    <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.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> 
    </DbProviderFactories> 
    </system.data> 
    <connectionStrings> 
    <add name="CompactDBContext" 
     providerName="System.Data.SqlServerCe.4.0" 
     connectionString="MyDatabase.sdf"/> 
    </connectionStrings> 
</configuration> 

Или установить его в коде, передавая это в DbContext конструктор, различные варианты соединительной строки и т. д.

Это DbCon Текст декларации:

public class CompactDBContext : DbContext 
{ 
    public DbSet<MyItem> MyItems { get; set; } 
} 

И это, как я использую его:

public void InsertItem() 
{ 
    using (var db = new CompactDBContext()) 
    { 
     MyItem item = new MyItem(); 

     db.MyItems.Add(item); 

     db.SaveChanges(); 
    } 
} 

Я уверен, что это либо дубликат вопрос, или я что-то на самом деле тривиальное не хватает, но я проводил часы не считая этого.

Может кто-то указать направление вправо?

Update 1:

С помощью DbContext конструктор с SqlCeConnection в качестве параметра:

public CompactDBContext() : 
    base(new SqlCeConnection("Data Source=MyDatabase.sdf;Persist Security Info=False;"), 
    contextOwnsConnection: true) { } 

Я получаю эту ошибку:

An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code

Additional information: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlServerCe.4.0'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

+0

Как вы * инициализация DbContext *? –

+0

Не могли бы вы поделиться разделами, связанными с Entity Framework, из app.config, вы по-прежнему подключаетесь к SQL Server – ErikEJ

+0

@ErikEJ: Добавлены фрагменты кода и app.config – user969153

ответ

0

После возился с раствором и проекта , Я выяснил причину. В моей настройке мое приложение представляет собой библиотеку, и я тестировал ее из проекта UnitTest. По какой-то причине я по ошибке выгрузил app.config из проекта UnitTest, поэтому он жаловался на отсутствие провайдеров EntityFramework. Загрузка app.confing обратно в проект исправила проблему.

Смежные вопросы