У меня есть автоматизированное тестовое решение, которое (скажем так) содержит 3 проекта:
- DataAccessProject (который берет данные из базы данных и, следовательно, может называться производителем, а это мой StartUpFile)
- PageObjectStorage
- Сценарий и этапы проекта
То, что я пытаюсь сделать, это заставить проект использовать EF, не уведомляя другие проекты о том, что EF даже существует в решении. Я хочу (например), чтобы мой 3-й проект мог вызывать что-то вроде DataAccessProject.SomeMethod.GiveMeSomeUsers (), поэтому DataAccessProject будет принимать записи из сущности, выполнять магию и просто возвращать информацию для сравнения со значениями из объекта страницы.
То, с чем я борюсь, это:
Сначала я получил эту ошибку:
No connection string named 'MyEntities' could be found in the application config file
Я прочитал статью о стеке и добавил узел строки подключения (я бы хотел этого избежать), и теперь я получаю эту ошибку:
Errors: TestModel.ssdl(2,2) : error 0152: 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.
Итак, мой вопрос: что я делаю не так? Как я могу установить EF, не добавляя ссылки на EF в каждом проекте (я верю, что это то, что EF хочет от меня сейчас).
Связанные узлы .config:
<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="test1Entities" connectionString="metadata=res://*/TestModel.csdl|res://*/TestModel.ssdl|res://*/TestModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MSSQL-TEST;initial catalog=testCATALOG;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" <providerName="System.Data.EntityClient" />
</connectionStrings>
На данный момент я вызываю этот метод из моего 3 проекта
public static void TestMyEF()
{
using (var ctx = new test1Entities())
{
var abc = ctx.someTable.FirstOrDefault();
}
}
Контекст ctor:
public test1Entities()
: base("name=test1Entities")
{
}
P.s. я использовал первый подход к БД (создайте .edxm из существующей БД), и я немного обеспокоен, потому что мой узел .config содержит <parameter value="mssqllocaldb" />
, БД не является локальной.