Entity Framework, отображение представлений в таблицах - PullRequest
2 голосов
/ 22 октября 2010

У меня есть базовое представление, которое возвращает те же столбцы, что и таблица (поле «дать или взять» 1)

в моем коде DAL я возвращаю список MyTableObject, однако в некоторых случаях я буду вызывать представление для возврата тех же данных, но из разных источников.

List<MyTableObject> tableObjects = new List<MyTableObject>();
if (case1)
  tableObjects = entities.MyTableObjects.Where(criteria).ToList();
else
  tableObjects = entities.MyViewObjects.Where(criteria).ToList(); // <-- This will obviously break
return tableObjects;

есть ли способ отображения объектов представления карты как объектов таблицы? (кроме того, что table и view реализуют тот же интерфейс и возвращают этот интерфейс) я хотел бы сохранить тип возвращаемого значения как MyTableObject.

Я сталкивался с Auto Mapper , но не уверен, что он подойдет для этого сценария ..

Ответы [ 2 ]

3 голосов
/ 22 октября 2010

Похоже, я нашел крутое решение для этого ..

Изначально я пытался реализовать интерфейсный подход и столкнулся с некоторыми проблемами приведения (используя интерфейсы вместе с моим построителем предикатов), а также с интерфейсами, которые должны создавать частичные классы для каждой сущности, реализующей интерфейс ..

ответ .. POCOs .

Я использовал Шаблон Poco для EF , а затем просто отредактировал xxxPocoGenerator.Context.tt, чтобы вернуть объект MyTable из коллекции MyViews (одна строка).

public ObjectSet<Trade> v_Trade {
        get { return _v_Trade  ?? (_v_Trade = CreateObjectSet<Trade>("Trades")); }
}

красиво и просто ..

2 голосов
/ 22 октября 2010

Вы можете написать хранимую процедуру (или CommandText в модели, не создавая объект БД), которая будет просто вызывать «Выбрать * из представления».Затем создайте функцию Import для этой процедуры и установите тип возвращаемого значения MyTableObject.

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