может Entity Framework 4.0 работает с любой базой данных путем изменения строки подключения? - PullRequest
0 голосов
/ 27 ноября 2010

Я хочу знать, буду ли я разрабатывать и применять приложение, используя Entity Framework 4.0 и SQL Server, а затем изменить строку подключения на мою SQL, будет ли она работать без проблем?

Какие другие соображения следует сохранитьв виду?

Ответы [ 3 ]

1 голос
/ 29 ноября 2010

Нет, я не думаю, что этого недостаточно.

AFAIK - основные поставщики LINQ для Entity Framework (ObjectQuery<T>) предназначены для поставщика SQL Server.

Я бы посоветовал инкапсулировать вашу логику в репозиторий и поддерживать интерфейс на высоком уровне (без зависимости от EF):

public interface IRepository<T> where T : class
{
   public T FindSingle(int id);
   public ICollection<T> FindAll(Expression<Func<T,bool>> predicate);
   public void Add(T entity);
   public void Remove(T entity);
}

Затем реализуйте реализацию SQL Server с помощью провайдеров EF LINQ (например, SqlServerRepository<T> : IRepository<T>). Затем, когда вы переключаетесь на MySQL, реализуете другую реализацию репозитория (например, MySqlRepository<T> : IRepository<T>)

Ключ - не использовать такие вещи, как IQueryable<T> для вашего репозитория, поскольку это позволяет применять код LINQ к вашему DAL, что может быть неприменимо для SQL Server и MySQL.

0 голосов
/ 29 ноября 2010

Если вы говорите об изменении соединения с базой данных для переключения между SQL Server, то это прекрасно работает.

Если вы хотите переключаться между различными системами баз данных - например, Oracle, MySQL и т. Д., Тогда вам понадобитсяпровайдер ... и вам нужно будет изменить типы хранилищ для каждого поля, чтобы они соответствовали ограничениям базовой системы.

Возможно, вы захотите проверить CTP EF для Code First, который способен регенерироватьУровень хранилища во время выполнения, поговорив с провайдером, чтобы найти наилучший тип хранилища, соответствующий типу CLR.

0 голосов
/ 28 ноября 2010

Простого изменения строки подключения будет недостаточно, поскольку EF по умолчанию реализует провайдер, который выдает специфический для SQL Server T-SQL. Есть и другие поставщики EF (хотя в прошлый раз, когда я смотрел, они были только в бета-версии), в том числе один для Oracle и MySQL, который будет правильно переводить ваши запросы LINQ в специфический дБ T-SQL.

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