2012-03-26 3 views
1

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

мне нужно, чтобы эти адаптеры:

  • базу данных на основе файлов (SqlServerCE 3,5)
  • MySql (с его пользовательского поставщика от Oracle)
  • Oracle (как MySql)
  • SqlServer

У меня есть класс DAO, который получает бит (объект инъекции зависимостей) с соединением данных из winform, чем из-за sp в этом компоненте 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 НЕ хранится информация о базе данных) ...

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

ответ

0

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

+0

Вы можете мне помочь? У меня все еще есть некоторые трудности: [здесь] (http://stackoverflow.com/questions/9903988/modify-ssdl-runtime-for-ado-net-and-entity-framework) – Gian

0

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

Post

С уважением.

0

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

+0

Вы можете мне помочь? У меня все еще есть некоторые трудности: [здесь] (http://stackoverflow.com/questions/9903988/modify-ssdl-runtime-for-ado-net-and-entity-framework) – Gian

Смежные вопросы