POCO-сущность без полей (бесплатное моделирование сущностей) - PullRequest
1 голос
/ 03 февраля 2012

Я понимаю, что при работе с сущностями POCO вы должны работать против своей модели (сущностей POCO). Также я полагаю, что часть преимуществ программирования по сравнению с такими моделями должна обеспечивать такие преимущества, как определение классов, которые не совсем соответствуют тому, что вы видите в БД.

Однако, есть простые операции, которые я не знаю, как сделать, и которые я предполагаю, что они должны быть возможны. Например, в некоторых сценариях может быть полезно изменить имя одного столбца (атрибут в объекте). Также я хотел бы знать, возможно ли генерировать модели POCO, которые представляют только некоторые поля таблицы, которые поддерживают объект в БД.

Есть ли документация по этому виду операций?

Большое спасибо!

1 Ответ

1 голос
/ 03 февраля 2012

POCO-сущность - это просто сопоставленный класс. Модель в вашем вопросе означает отображение. Смысл сопоставления заключается в определении сопоставления между классом и таблицей базы данных, включая сопоставление между свойствами и столбцами. Таким образом, вы можете иметь разные имена свойств и столбцов, если они правильно настроены в отображении.

Таким образом, если вы используете файл EDMX (конструктор) для создания сопоставления, вы можете просто изменить имя свойства или объекта, и это будет отражено в созданном вами объекте POCO. Также файл EDMX будет корректно обновлять отображение. Если вы сначала используете код, вы должны вручную определить отображение либо с помощью аннотаций данных, либо через свободный API.

Сущность должна представлять единую структуру данных, сохраненную в базе данных. Из-за этого каждая таблица может быть отображена только один раз. Более того, разработчик EDMX требует, чтобы каждый необнуляемый столбец без значения по умолчанию был сопоставлен с сущностью. Генератор POCO не является инструментом для генерации ваших различных представлений данных. То, что вы ищете, называется проекцией. Есть способы, как включить отображенные проекции в файл EDMX (DefiningQuery и QueryView), но оба требуют ручного изменения файла EDMX, а первый также требует ручного обслуживания файла EDMX.

Если вам нужно удалить некоторые свойства из объекта просто для улучшения какого-либо запроса или если вам не нужны все данные для какой-либо операции, вы всегда можете использовать проекцию на анонимный или пользовательский класс непосредственно в запросе.

var query = from x in context.XEntities
            select new XView
                {
                    A = x.A,
                    B = x.B
                }; 

Генератор POCO - это всего лишь инструмент для генерации классов для отображаемых объектов и проекций, но не для генерации всех связанных с данными классов, которые вам когда-либо понадобятся.

...