Как я могу денормализовать мою сущность clr, но при этом нормализовать мои таблицы БД? - PullRequest
0 голосов
/ 12 января 2012

У меня есть эти две связанные таблицы Client (ClientId, Name) и ClientDescription (ClientDescriptionId, (FK) ClientId, Description).То есть каждый клиент может иметь много связанных описаний.Теперь, при отображении списка ClientDescription, мне также нужно знать, как называется имя связанного с ним клиента.

Теперь вы, вероятно, скажете, что у меня уже есть эта информация, поскольку я могу просто следовать своей навигациисвойство обратно к связанному клиенту и использовать его имя.Я не могу этого сделать, потому что я автоматически генерирую сетку в сервисах Ria, и это просто дает мне счетчик для свойств навигации, и я не нашел способа сгладить это в моем файле метаданных.Поэтому мне нужно свойство.

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

Итак, я хотел бы добавить поле ClientName к сущности (объект clr), но сохранитьочистка базы данных (нет такой денормализации в БД).

Итак, я сгенерировал свой edmx и добавил новое свойство с именем ClientName.Установите его в StoreGeneratedPattern.Computed и скомпилируйте.Затем я получаю маленькую неприятную ошибку

Error 3004: Problem in mapping fragments starting at line NN: No mapping specified for properties (etc..)

Очевидно, что решение состоит в том, чтобы сгенерировать мою базу данных из моего edmx.(Или это то, что ответы на вопросы об этой ошибке, похоже, дают.) Но это генерирует фактическое поле DB, которое мне не нужно, поэтому этот ответ не применим к моему случаю.

Так что мойВопрос в том, как я могу денормализовать мою сущность clr, но при этом нормализовать мои таблицы БД?

Редактировать: Я думаю, этот вопрос можно немного обобщить.Проблема была бы такой же, если бы ClientDescription содержал несколько числовых полей, по которым я хотел выполнить некоторые вычисления, и я хотел, чтобы результат был доступен в виде поля, а алгоритм должен быть в c #, а не в моей базе данных.

1 Ответ

2 голосов
/ 12 января 2012

Чтобы ответить на более обобщенный вопрос:

Объекты создаются Entity Framework с ключевым словом partial.Это означает, что код объекта может быть разделен на несколько исходных файлов в одном пространстве имен и сборке.Один будет содержать сгенерированный код из Entity Framework, другой будет содержать пользовательские свойства и методы.

Если, например, у вашей сущности есть поля базы данных Price и Amount, вы можете добавить свойство вчастичный класс TotalPrice, который будет возвращать Price * Amount.

Тогда алгоритм будет C #, и ваша база данных не будет знать о дополнительном свойстве.

...