Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EntityFramework не находит ConnectionString в Аpp.congig / 25 сообщений из 29, страница 1 из 2
16.04.2015, 11:18
    #38938063
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
Делаю первые шаги в EntityFramework.
MVS 2013 Ultimate Edition SP 4
EntityFramework 6.1.3
Все, как по учебнику. Создаю шаблон из базы.
Делаю new Connection. Указываю имя SQL сервера и имя базы. Тест проходит.
Создается схема.
далее пишу две строки:

Код: c#
1.
2.
var context = new BackgroundSeContext();
var domains = context.Domain.ToList();


и на второй строке падаю с ошибкой:
No connection string named 'BackgroundSeContext' could be found in the application config file.
в System.Data.Entity.Internal.LazyInternalConnection.get_ConnectionHasModel()
в System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
в System.Data.Entity.Internal.InternalContext.Initialize()
в System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
в System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
в System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator()
в System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()

Смотрю в App.Config - всё на месте:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?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" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="BackgroundSeContext" connectionString="metadata=res://*/BackgroungSeModel.csdl|res://*/BackgroungSeModel.ssdl|res://*/BackgroungSeModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ZALMAN;initial catalog=BALT_OBD_BackgroundSE;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;"
      providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

Что можно попробывать сделать, чтобы заработало?
...
Рейтинг: 0 / 0
16.04.2015, 16:01
    #38938431
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
Нарыл вот что - автогенератор кода сгенерил такую вот строку:
Код: c#
1.
2.
3.
4.
public BackgroundSeModel()
    : base("name=BackgroundSeModel")
{
}


Я ее исправил таким образом:
Код: c#
1.
2.
3.
4.
public BackgroundSeModel()
    : base("BackgroundSeModel")
{
}


т.е убрал "name="
После этого connectionString начала определяться. Но теперь вылезла другая ошибка:
No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'. Make sure the provider is registered in the 'entityFramework' section of the application config file.

Засада. Что делать?
...
Рейтинг: 0 / 0
16.04.2015, 18:43
    #38938624
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
Зарегистрировал провайдер насильно ручками в коде:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class MyConfiguration : DbConfiguration
{
    public MyConfiguration()
    {
        SetProviderServices(
            SqlProviderServices.ProviderInvariantName,
            SqlProviderServices.Instance);
    }
}


Проблема решилась.

Какие выводы?
EF до сих пор очень сырой. Элементарные операции, которые должны делаться 'на лету', приходиться делать самому. Причем, для новичка в EF, это очень проблематично и занимает много времени.
...
Рейтинг: 0 / 0
16.04.2015, 19:10
    #38938647
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
vlsaf,
Этого всего не надо. Просто строка конекции должна быть в самом web проекте.
...
Рейтинг: 0 / 0
16.04.2015, 19:12
    #38938648
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
У меня не web проект, и даже не winforms, а консольное приложение, которое должно обрабатывать данные в фоновом режиме.
...
Рейтинг: 0 / 0
16.04.2015, 19:22
    #38938649
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
vlsaf Какие выводы?
EF до сих пор очень сырой. Элементарные операции, которые должны делаться 'на лету', приходиться делать самому. Причем, для новичка в EF, это очень проблематично и занимает много времени.

Вы не правы.

Код: xml
1.
2.
3.
  <connectionStrings>
    <add name="DefaultConnection" connectionString="server=.\SQLEXPRESS;database=mydbi;user id=sa;password=111111111" providerName="System.Data.SqlClient" />
  </connectionStrings>



Видите строчка providerName="System.Data.SqlClient" ?

Без неё как EF должен догадаться, какой провайдер надо использовать?
Или по-вашему, если EF не экстрасенс, то он сразу сырой?
...
Рейтинг: 0 / 0
16.04.2015, 19:25
    #38938653
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
vlsafЗарегистрировал провайдер насильно ручками в коде:

это делается не кодом, а секцией в app.config

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<configuration>
  <configSections>

    <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.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

...

</configuration>
...
Рейтинг: 0 / 0
17.04.2015, 09:23
    #38938821
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
vlsafДелаю первые шаги в EntityFramework.

и после этих слов вы имеет право говорит что то про готовый продукт, который используют сотни прогеров и проектов? Вывод простой: не умеет готовить - не надо сразу ругаться на инструмент, может перечитать рецепт.
...
Рейтинг: 0 / 0
17.04.2015, 11:42
    #38938981
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
Рад, что у вас все работает. Но лично у меня быстрого старта не получается. До сих пор. Есть большое желание показать экран по скайпу, чтоб указали на ошибки, что делаю не так. Если кому-то будет не сложно, киньте письмо в личку. Буду очень признателен.
...
Рейтинг: 0 / 0
17.04.2015, 12:48
    #38939098
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
vlsafРад, что у вас все работает. Но лично у меня быстрого старта не получается. До сих пор. Есть большое желание показать экран по скайпу, чтоб указали на ошибки, что делаю не так. Если кому-то будет не сложно, киньте письмо в личку. Буду очень признателен.

Создаёшь в студии новый проект, допустим ASP.NET MVC 5, там уже рабочий пример использования EF. Куда уж проще-то?
...
Рейтинг: 0 / 0
17.04.2015, 13:00
    #38939120
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
Хочется просто материться. Создал с нуля консольное приложение. Там все работает. Но у у меня рабочий проект - это библиотека. Там то почему косяки лезут? Делаю все тоже-самое. Один в один!
...
Рейтинг: 0 / 0
17.04.2015, 13:02
    #38939126
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
vlsafХочется просто материться. Создал с нуля консольное приложение. Там все работает. Но у у меня рабочий проект - это библиотека. Там то почему косяки лезут? Делаю все тоже-самое. Один в один!

Библиотека тащит инфу из конфига приложения, а не библиотеки. Т.е. если вы в библиотеке сделали app.config и туда добавили строку подключения, это не сработает.
...
Рейтинг: 0 / 0
17.04.2015, 13:10
    #38939133
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
Ну наконец-таки, лёд тронулся. А я два дня варился в собственном соку. Спасибо!
...
Рейтинг: 0 / 0
17.04.2015, 13:20
    #38939144
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
hVosttБиблиотека тащит инфу из конфига приложения, а не библиотеки. Т.е. если вы в библиотеке сделали app.config и туда добавили строку подключения, это не сработает.А как-же тогда поступать? Мне EF нужно запускать именно из библиотеки. В основном приложении он не нужен.
...
Рейтинг: 0 / 0
17.04.2015, 13:25
    #38939155
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
vlsafhVosttБиблиотека тащит инфу из конфига приложения, а не библиотеки. Т.е. если вы в библиотеке сделали app.config и туда добавили строку подключения, это не сработает.А как-же тогда поступать? Мне EF нужно запускать именно из библиотеки. В основном приложении он не нужен.

Концепция такова: приложение настраивается в конфиге приложения. Все подключенные библиотеки также настраиваются в этот конфиге приложения.

Вы же не настраиваете EF в его собственном конфиге, типа EntityFramework.config, правильно? было бы странно, это всего лишь библиотека, и как она будет использоваться решать приложению. Сама по себе библитека не работает.

Так что тащите конфиг либы в конфиг приложения. И пусть это вас не расстраивает, это правильно.
...
Рейтинг: 0 / 0
17.04.2015, 13:45
    #38939197
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
После того, как перетащил настройки app.config из проекта либы в основное приложение, то его из проекта либы можно удалять? (Его создал EF). Или он должен присутствовать и в либе и в основном проекте?
...
Рейтинг: 0 / 0
17.04.2015, 14:00
    #38939225
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
Оставил app.config и там и там. Ошибка
The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

Буду смотреть на сайте microsoft? что опять не так. Или dll от EF тоже нужно в основное приложение добавлять?
...
Рейтинг: 0 / 0
17.04.2015, 14:04
    #38939234
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
vlsafИли dll от EF тоже нужно в основное приложение добавлять?

Естественно!
...
Рейтинг: 0 / 0
17.04.2015, 14:09
    #38939241
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
Да. Теперь все получилось. Еще раз спасибо, hVostt !!!
...
Рейтинг: 0 / 0
17.04.2015, 15:01
    #38939313
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
vlsaf, может пригодится - тынц
...
Рейтинг: 0 / 0
22.04.2015, 10:16
    #38942208
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
Получилось запустить dll с EF без установки EF в основную сборку и без добавления app.config в основную сборку.

Для этого мы должны сделать 2 вещи.
1. Создать в коде connectionString
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var sqlBuilder = new SqlConnectionStringBuilder
{
    DataSource = server,
    InitialCatalog = context,
    IntegratedSecurity = true
};
var connectionString = sqlBuilder + ";MultipleActiveResultSets=True;App=EntityFramework";

var entityBuilder = new EntityConnectionStringBuilder
{
    Provider = "System.Data.SqlClient",
    ProviderConnectionString = connectionString,
    Metadata = @"res://*/BackgroundModel.csdl|res://*/BackgroundModel.ssdl|res://*/BackgroundModel.msl"
};

2. Добавить конструктор для вашего контекста. Конструктор должен использовать вашу строку подключения. Делаете в отдельном файле такую перегрузку:
Код: c#
1.
2.
3.
4.
5.
6.
 public partial class BackgroundContext : DbContext
 {
     public BackgroundContext(string connectionString)
         : base(connectionString)
     {
     }

И теперь создаете новый объект, используя вашу строку:
Код: c#
1.
_context = new BackgroundContext(entityBuilder.ToString());

Цветов не надо, можно пива ;)
...
Рейтинг: 0 / 0
22.04.2015, 11:11
    #38942281
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
vlsaf,

Код: c#
1.
2.
3.
4.
5.
6.
7.
var sqlBuilder = new SqlConnectionStringBuilder
{
    DataSource = server,
    InitialCatalog = context,
    IntegratedSecurity = true
};
var connectionString = sqlBuilder + ";MultipleActiveResultSets=True;App=EntityFramework";


Вот так лучше, имхо:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
var sqlBuilder = new SqlConnectionStringBuilder
{
    DataSource = server,
    InitialCatalog = context,
    IntegratedSecurity = true,
    ApplicationName = "MyAppName", 
    MultipleActiveResultSets = true
};
...
Рейтинг: 0 / 0
22.04.2015, 14:52
    #38942622
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
vlsafПолучилось запустить dll с EF без установки EF в основную сборку и без добавления app.config в основную сборку.

а смысл?
...
Рейтинг: 0 / 0
22.04.2015, 15:03
    #38942636
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
hVostt,

я объясню причины, почему это глупая затея

1. При деплое у приложения есть один конфиг, который настраивается соответствующим образом, например, при деплое на тест одна строка соединения, при деплое на боевой сервер другая, и при инсталляции конфигурируется один конфиг приложения, он может быть разнесён на несколько файлов, но по сути это один конфиг.

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

Существенных причин закрывать EF в сборке вообще не вижу, если только сборка не подключается динамически (например через MEF) на манер плагина, в нормальной ситуации такие ковыряния приносят в последствии только боль людям, вынужденным дорабатывать и поддерживать подобные выкрутасы. Так что нафиг так делать не надо, если нет действительно обоснованных причин.
...
Рейтинг: 0 / 0
22.04.2015, 18:00
    #38942878
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EntityFramework не находит ConnectionString в Аpp.congig
Смысл простой.

dll будет записывать данные в базу. Подключать к своему проекту ее будут совсем другие люди, которые и знать не хотят о существовании EF и о всяких cоnnectionString'ах. Это внутренняя кухня самой dll. Внутри dll есть механизм, который позволяет знать, где она запущена и какой должен быть connectionString.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EntityFramework не находит ConnectionString в Аpp.congig / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]