Как настроить Entity framework в проекте библиотеки классов

Я создал проект библиотеки классов, содержащий объект entity framework, который будет отвечать за общий уровень доступа к данным для моего множественного проекта.после добавления сгенерированного dll-файла в проект моего домена и использования объекта сущности из проекта библиотеки классов, im сталкивается со следующей проблемой.

строка подключения с именем " ABC " не может быть найдена в файле конфигурации приложения.

Я установил свойство обработки артефактов метаданных edmx в встраивание в выходную сборку

App.Разметка конфигурации

  <?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=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="ABC" connectionString="metadata=res://*/Entity.ABC.csdl|res://*/Entity.ABC.ssdl|res://*/Entity.ABC.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)v11.0;attachdbfilename=|DataDirectory|ABC.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
</configuration>

и код сущностей следующий

public ABC_IntegrationEntities()
            : base("name=ABC")
        {
        }

еще одна вещь, к которой я обращаюсь к базе данных из datadirectiory "App_Data"

я ссылаюсь на блог из dotnetcurry.com.

http://www.dotnetcurry.com/showarticle.aspx?ID=617

спасибо заранее!

4 ответов


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

вы можете создать свой собственный .файл config в этот проект и добавьте запись connectionstring вашей модели или просто скопировать приложение.файл конфигурации, созданный в проекте MyEntityModel, в проект консольного приложения. Мы примем более простой способ. Правый клик проект > Добавить Существующий Элемент > перейти к MyEntityModel проект и добавьте приложение.конфигурационный файл.

объяснение:

когда вы создаете библиотеку, и на библиотеку ссылаются из другого проекта, EF будет читать конфигурацию, относящуюся к запуску проекта. Вы можете сделать одно из следующих действий.

  • скопируйте конфигурацию из конфигурации библиотеки (скопируйте файл и вставьте его, чтобы запустить проект)
  • создайте новую конфигурацию, но скопируйте информацию о строке подключения и другие связанные с EF раздел
  • добавить существующую конфигурацию, добавив существующий элемент и добавьте его как ссылку на конфигурацию библиотеки

Я работал над созданием библиотеки классов, которая реализует все функции EF (Entity Framework) и следовал процессу, описанному в http://www.dotnetcurry.com/showarticle.aspx?ID=617 но все же это давало ошибки.

проблема заключалась в несоответствии версий между EF framework и .Net framework. Я использовал .Net framework 5.0, но версия EF была 6.0. После обновления последней версии .Net framework все начало работать хорошо. Всегда обеспечьте EF и Версии Dll + EF и тестовых проектов всегда одинаковы.

Я также загрузил и установил EFTools6.1.3ForVS2013, если это кому-то поможет. Другое дело, чтобы помнить, что вы должны установить Entity Framework из Nuget во всех проектах, которые ссылаются на Dll EF и копировать connectionstring из файла конфигурации Dll в файле конфигурации тестового проекта.

надеюсь, это кому-то поможет !!! Спасибо,


скопируйте строку подключения SQL из файла конфигурации проекта библиотеки и вставьте ее в файл конфигурации основного проекта, который является вашим проектом запуска. Что решит вашу проблему.

кроме того, скопируйте DbProviderFactories из проекта библиотеки в файл конфигурации основного проекта.


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

public ABC_IntegrationEntities()
                : base("name=Gumu_IntegrationEntities")
            {
            }

убедитесь, что файл конфигурации приложения добавлен в сборку, из которой выполняется код, i.e app.config из вас PE web.config вашего сайта