2016-09-16 4 views
0

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

Так я строю проект, который подключается так:

База данных <> Layer Data <> Logic Layer <> UI

Когда данные попадают в Logic Layer, я пытаюсь выполнить небольшое преобразование. Во-первых, я продемонстрирую код, а затем объясню, что я пытаюсь сделать.

У меня есть объект «PersonDao» внутри слоя данных с ниже настройки:

public class PersonDao 
{ 
    public int PersonID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int GenderID { get; set } 
} 

и объект «GenderDao» со следующим:

public class GenderDao 
{ 
    public int GenderID { get; set; } 
    public string Name { get; set; } //this essentially holds 'male' and 'female' 
} 

В логическом уровне, я есть объект «PersonDto» в пределах логического уровня, который отражает уровень данных:

public class PersonDto 
{ 
    public int PersonID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int GenderID { get; set } 
} 

и, конечно, «Генд объект rDto», что отражает его аналог в уровне данных

public class GenderDao 
{ 
    public int GenderID { get; set; } 
    public string Name { get; set; } 
} 

Теперь, с этой информацией, что я пытаюсь сделать, это либо создать Автоотображение или иную форму преобразования, который позволяет мне автоматически соответствовать GenderDto.Name к идентификатору PersonDto.GenderID. Я в принципе хочу:

PersonDto.GenderID = GenderDto.Name где GenderDto.GenderID == PersonDto.GenderID

И реверс это отображение, а также.

Конечной целью является то, что в слое пользовательского интерфейса, пользователь может тянуть профиль человека и увидеть что-то вроде:

  • Имя: John
  • Фамилия: Doe
  • Пол: Мужской

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

Любая помощь будет принята с благодарностью, благодарю вас.

+0

С чем вы столкнулись? – Nix

+0

По существу, в DAL уже есть сопоставление структуры сущностей, и AutoMapper уже установлен. Но я хочу, чтобы BLL (Logic Layer) мог преобразовать отображение так, чтобы, когда слой UI видит данные, они получают пол (женщина/мужчина) вместо представления int. – Azu

+0

В свою очередь, я хочу, чтобы иметь возможность переконвертировать это, так что, когда пользователь вводит мужчина/женщина, база данных получает представление int для применения к табличным данным – Azu

ответ

0

Что вы хотите, это реляционное сопоставление объектов. Вот что делают такие вещи, как Entity Framework. Вы можете реализовать что-то вроде Entity Framework, или вам придется писать логику реляционного сопоставления самостоятельно.

+0

Entity Framework уже существует в DAL, а для реляционного сопоставления - вот где я борюсь. Я пробовал несколько вещей, которые я читал, и все закончилось неудачей. Некоторые примеры: - Попытка использования .Where() - Попытка LINQ (однако, я не смог найти достаточно информации, связанной с тем, что я пытался сделать - возможно, это была проблема) - Попытка реструктурировать часть отображения, используя .ForMember() – Azu

+0

Спасибо, что не люблю, я не знаю, как я упускал из виду ваш совет, но я собираюсь провести исследование ORM. ЕСЛИ мне нужна дополнительная помощь, я вернусь – Azu

+0

Исследование ORM помогло мне найти ответ, в котором я нуждался. Еще раз спасибо Loveless – Azu

5

Вы также можете посмотреть пользовательские проекции внутри AutoMapper. Беда в том, что если эти прогнозы нуждаются в доступе к другим вещам EF, у вас проблемы.

Ваши DAO выглядят почти так же, как ваши DTO? Если это так, я бы вообще избегал DTO, они, вероятно, не добавят никакой ценности. Просто используйте свои DAO напрямую.

Как правило, мои DTO являются небольшим подмножеством моих сущностей в EF, всего лишь несколькими свойствами, из которых является модель представления. Я действительно не перевернуваю карту, так как мои модели представления представляют задачи/команды. Я бы не попытался построить многоуровневую архитектуру - там просто не так много. Много типов для небольшой отдачи.

Смежные вопросы