Создание проекта доступа к данным с Entity Framework - PullRequest
0 голосов
/ 02 мая 2018

У меня есть автоматизированное тестовое решение, которое (скажем так) содержит 3 проекта:

  1. DataAccessProject (который берет данные из базы данных и, следовательно, может называться производителем, а это мой StartUpFile)
  2. PageObjectStorage
  3. Сценарий и этапы проекта То, что я пытаюсь сделать, это заставить проект использовать 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=&quot;data source=MSSQL-TEST;initial catalog=testCATALOG;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;"         <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" />, БД не является локальной.

1 Ответ

0 голосов
/ 02 мая 2018

Создайте общую библиотеку классов для результата, например:

public class MyResultClass
{
    public readonly object Value;
    public readonly Exception ResultException;
    //add more properties if needed

    public MyResultClass(object value)
    {
        this.ResultException = null;
        this.Value = value;
    }

    public MyResultClass(Exception ex)
    {
        this.ResultException = ex;
    }
}

затем используйте ссылку этого класса в своих проектах, чтобы у вас не было зависимости entity-framework, а затем вы можете использовать json (Сериализация и Десериализация) для преобразования данных из вашего DAP(DataAccessProject) клиенту (вызывающий проект).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...