Сопоставить классы DDD с моделью базы данных, созданной из Entity Framework 4.0 - PullRequest
1 голос
/ 10 мая 2011

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

По сути, у меня есть устаревшая БД, с которой мне приходится иметь дело. Я создал несколько классов доменов для представления нашей модели БД. Однако доменные классы не являются однозначным сопоставлением с таблицами базы данных.

Это снимок устаревшей модели БД:

enter image description here

и один из моих классов доменов выглядит так:

public class Reading
{
    public Location Location {get; set;}
}

public class Location
{
    public string Name { get; set;}
}

Учитывая вышеприведенные модель и класс домена, как я могу их сопоставить?

Большинство статей, которые я там нашел, имеют прямое сопоставление один к одному.

Если кто-нибудь из вас может оказать некоторую помощь по этому вопросу, это будет высоко ценится.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 10 мая 2011

EF поддерживает «таблица на тип» (отображение один на один), «таблица на иерархию», «таблица для конкретного типа», «разбиение таблицы» (на несколько объектов) и «разбиение сущностей» (на несколько таблиц).

Кажется, что ваши столы для чтения подходят для конкретного типа.

Каждый из типов сопоставления можно легко найти в Google. - Поиск "структуры сущностей" "таблицы для конкретного типа".

0 голосов
/ 10 мая 2011

Вы не можете сопоставить их напрямую с помощью Entity Framework, потому что ваши классы в модели предметной области не являются сущностями (хорошо, вы, вероятно, можете, но это может привести к плохим последствиям, если Name местоположения не является уникальным). Первая проблема заключается в том, что у ваших сущностей должен быть сопоставлен первичный ключ, а первичный ключ должен быть уникальным (я абсолютно не уверен, что должен представлять Reading сущность).

Большинство статей описывают отображение целых таблиц, потому что это самый простой способ использования EF. На самом деле отображение только частичных табличных данных в EDMX означает написание EDMX XML вручную, что является проблемой в **. Вы можете решить эту проблему, используя EF 4.1 и свободный API (без EDMX). Если вы хотите отобразить только частичные данные и по-прежнему иметь возможность вставлять новые записи в не сопоставленные столбцы, таблицы должны быть обнуляемыми.

0 голосов
/ 10 мая 2011

Вы можете использовать AutoMapper и написать средство преобразования пользовательских значений для сопоставления и агрегирования объектов.

См. http://automapper.codeplex.com, и, более конкретно, http://automapper.codeplex.com/wikipage?title=Custom%20Value%20Resolvers для преобразователей пользовательских действий.

...