Разделение уровня данных с помощью Entity Framework

#entity-framework #layer #edmx #presentation #decoupling

#entity-framework #слой #edmx #презентация #разделение

Вопрос:

Я использую EF 4.0, linq to entities, хранимые процедуры VS 2010 и SQL Server 2005 для создания небольшого поискового приложения. Я разработал EDM и необходимые слои. Уровень представления правильно отображает результаты поиска.

Теперь дилемма заключается в том, что поиск должен быть достаточно гибким для чтения из разных таблиц. Например, для текущего поиска приложение считывает данные из таблицы A. Завтра приложению может потребоваться чтение из таблицы B, которая может иметь совершенно другие имена столбцов, чем таблица A.

Используя EDM, как я могу сопоставить столбцы таблицы A со столбцами таблицы B, не оказывая никакого влияния на уровень представления.

Любые предложения / указатели / ссылки будут с благодарностью приняты.

Большое вам спасибо за ваше время и помощь.

Ответ №1:

Я использовал хранилище данных, описанное в ссылке ниже, в нем показаны IDataRepository и DataRepository класс. также, как вы можете динамически извлекать данные с помощью функций fetch () и Find ()

http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/

и он работает довольно хорошо

Ответ №2:

Я бы рекомендовал отделить уровень представления от ваших данных. Создайте бизнес-уровень с универсальным классом, который может быть заполнен из разных таблиц (сущностей) в зависимости от ваших потребностей.

Таким образом, в зависимости от дня, общий класс (или классы) будет заполняться из таблицы A, или таблицы B, или таблицы X. Однако ваш уровень представления не будет обращать на это внимания и будет знать только данные из общего класса.

Вы могли бы спроектировать это несколькими способами. Одним из способов было бы разработать интерфейс, которому должны соответствовать сущности, чтобы заполнить универсальный класс. Таким образом, независимо от того, какова структура таблицы, вам нужно будет сопоставить данные в ней с интерфейсом, чтобы заполнить общий класс и, следовательно, отобразить его в качестве результатов поиска.