Адаптеры с платформой Entity (C #) - PullRequest
1 голос
/ 26 марта 2012

Я пытаюсь использовать сущностную инфраструктуру со структурой адаптера, моя цель будет иметь единую структуру .edmx, способную управлять несколькими соединениями.

Мне нужны эти адаптеры:

  • файловая база данных (SqlServerCE 3.5)
  • MySql (со своим провайдером из Oracle)
  • Oracle (как MySql)
  • SqlServer

У меня есть класс DAO, который получает бин (объект внедрения зависимостей) с подключением к данным из winform, но из-за определенной информации в этом бине DAO загрузит правильный адаптер через класс фабрики базы данных.

Моя фабрика баз данных загрузит реальный класс адаптера (например, для mysql A_Mysql.cs, который реализует мой абстрактный класс адаптера).

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

public override Entities createConnection(DbConnection dbBean)
    {
        string conn =
          @"metadata=res://*/Toolkit.Database.External.ADO.ADODatabase.csdl" +
          @"|res://*/Toolkit.Database.External.ADO.ADODatabase.ssdl" +
          @"|res://*/Toolkit.Database.External.ADO.ADODatabase.msl;" +
          @"provider=MySql.Data.MySqlClient;" +
          "provider connection string=\"Persist Security Info=True;server=" + dbBean.Server + ";" +
          "Port=" + dbBean.Port + ";" +
          "User Id=" + dbBean.Username + ";"+
          "Password=" + dbBean.Password + ";" +
          "database=" + dbBean.Schema + "\"";

        Entities entities = new Entities(conn);

        return entities;
    }

использовать тот же .edmx, в моем DAO ...

Я был почти уверен, что это был правильный путь, к сожалению, эта система всегда возвращает мне ошибки из SqlCE (я сгенерировал первый .emdx из SqlServerCE, но он не содержит никакой информации об этой базе данных и моем App.config В файле НЕ хранятся данные базы данных)…

Вы можете мне помочь? Пожалуйста, напишите мне для получения дополнительной информации, если это необходимо. Спасибо.

Ответы [ 3 ]

0 голосов
/ 26 марта 2012

На моем сайте есть пост о том, как использовать несколько соединений с несколькими базами данных [на испанском языке:)]

Сообщение

Привет.

0 голосов
/ 27 марта 2012

Это не будет работать, поскольку EDMX сам содержит информацию о поставщике базы данных. Также полное описание базы данных, хранящееся в EDMX, предназначено для одного поставщика базы данных. Между SQL Server 2005 и 2008 есть даже разница. Вам нужна как минимум отдельная часть SSDL для каждой базы данных, которую вы хотите поддерживать.

0 голосов
/ 26 марта 2012

Ваш уровень доступа к данным должен быть абстрагирован на уровне провайдера сущностей, а не на уровне соединения с базой данных.Вы в основном говорите об использовании шаблона репозитория.Вам потребуется отдельный контекст для каждого провайдера, которого вы планируете поддерживать, потому что именно это в конечном итоге отвечает за перевод ваших запросов Linq в правильный синтаксис SQL для конкретной платформы базы данных.Каждый контекст должен реализовывать один и тот же интерфейс (который является вашим интерфейсом хранилища).В вашем коде вы делаете все с этим интерфейсом, а не с фактическими типами контекста.Затем используйте инфраструктуру внедрения зависимостей (например, Ninject) для управления созданием правильной реализации контекста для поставщика базы данных, который вы используете.

...