2015-05-05 3 views
2

Я использую VS 2013. Я пытаюсь использовать SQL Server Compact с Entity Framework 6. Созданная база данных и .EDMX модель в VS 2012 и открыта в VS 2013. Я установил последнюю EF и EF SQL.CE от NuGet. Когда я пытаюсь запустить, я получаю следующую ошибку:Winforms - программа не может найти строку подключения из app.config

В файле конфигурации приложения ни одна строка связи с именем SomeDbFile не найдена.

app.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
     <section name="entityFramework" 
       type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </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.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
      <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="SomeDbFile" 
      connectionString="metadata=res://*/EDataModel.csdl|res://*/EDataModel.ssdl|res://*/EDataModel.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;data source=|DataDirectory|\dbfile.sdf&quot;" 
      providerName="System.Data.SqlServerCe.4.0" /> 
    </connectionStrings> 
</configuration> 

Сформирован DbContext:

public partial class Entities : DbContext 
{ 
    public Entities() : base("name=SomeDbFile") 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 

    public DbSet<category> category { get; set; } 
    public DbSet<item> item { get; set; } 
    public DbSet<order> order { get; set; } 
    public DbSet<order_line> order_line { get; set; } 
} 
+0

У вас есть несколько проектов? На какой платформе это работает? WPF, сеть, что-то еще? –

+0

@MattiVirkkunen Извините, забыл упомянуть, что я создаю приложение winforms. Хотя у меня есть 2 отдельных проекта. Одна из них - это библиотека классов, другая - приложение для создания окон. – iamawebgeek

+1

Вы также установили параметры подключения в app.config winforms? –

ответ

2

Вы, наверное, забыли поставить параметры подключения в вашем основном приложении (то, что на самом деле выполняется) app.config.

Файлы app.config в проектах библиотеки классов ничего не делают во время выполнения и обычно бесполезны. (Некоторые функции IDE, возможно, им понадобятся)

+0

Ударьте меня на это @Matti, это более чем вероятно решение. – maccettura

+0

Теперь я получаю «Ключевое слово не поддерживается:« метаданные ». ошибка. – iamawebgeek

+0

@zazu: Похоже, что он находит строку подключения в порядке. Создайте еще один вопрос о вашей новой, несвязанной ошибке. –

1

Когда контекст получает генерируется он обычно имеет строку подключения установки к таким же именем, как контекст, так что стоило бы проверить что там нет проблемы. Таким образом, пока имя строки подключения в порядке, вы должны просто использовать исходную строку подключения EF в клиенте web.config.

Или вы можете прокомментировать «throw new UnintentionalCodeFirstException();» line из OnModelCreating, чтобы использовать обычную строку соединения.

 protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //comment out this line to allow for a normal connection string 
     throw new UnintentionalCodeFirstException(); 
    } 

Пожалуйста, проверьте эти ссылки для соединения строк EF

https://msdn.microsoft.com/en-us/library/cc716756(v=vs.110).aspx 
https://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnectionstringbuilder.providerconnectionstring(v=vs.110).aspx 
https://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnectionstringbuilder.providerconnectionstring(v=vs.110).aspx 

Попробуйте изменить имя поставщика в строке подключения к ProviderName = «System.Data.EntityClient»

+0

Не помогло, я получаю сообщение об ошибке при создании нового экземпляра dbcontext – iamawebgeek

+0

Вам нужно иметь строку подключения в файле конфигурации проекта запуска. Просто узнайте свой проект запуска и скопируйте строку подключения в файл web.config этого запуска. После этого вы не должны получить вышеуказанную ошибку. – BSG

+0

Теперь я получаю 'Ключевое слово не поддерживается: 'metadata'.' ошибка. – iamawebgeek

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