2014-02-05 2 views
1

Я использую FluentNHibernate с AutoMapping и соглашениями для создания моей базы данных. У меня есть 3 стола - человек, адрес и работа, как показано ниже.Fluent nHibernate - сгладить объекты в ViewModel

//Database table 
    public class Person() 
    { 
    public virtual int Id { get; set; } 
    public virtual string FirestName { get; set; } 
    public virtual string SecondName { get; set; } 

    public virtual PersonAddress Address { get; set; } 
    public virtual PersonJob Job { get; set; } 
    } 

    //Database table 
    public class PersonAddress() 
    { 
    public virtual int Id { get; set; } 
    public virtual string AddressLine1 { get; set; } 
    public virtual string AddressLine2 { get; set; } 
    public virtual string AddressLine3 { get; set; } 
    } 

    //Database table 
    public class PersonJob() 
    { 
    public virtual int Id { get; set; } 
    public virtual int Description { get; set; } 
    } 

Я хочу отобразить список персональных данных в сетке, используя сплющенную модель для просмотра ниже. Должен ли я создавать сопоставление для ViewModelPerson, даже если это не таблица базы данных (будет ли это повлиять на Automapping), или я должен сделать это, используя запрос nHibernate для создания списка объектов ViewModelPerson.

//NOT database table - only used as ViewModel 
    public class ViewModelPerson() 
    { 
    public virtual int PersonId { get; set; } 
    public virtual string FirestName { get; set; } 
    public virtual string SecondName { get; set; } 

    //AddressLine1 + AddressLine2 + AddressLine3 
    public virtual int AddressId { get; set; } 
    public virtual string Address { get; set; } 

    public virtual int JobId { get; set; } 
    public virtual string Job { get; set; } 
    } 

ответ

1

Позвольте мне дать вам мой взгляд, подход я верю в ...

данных слой - отображениеEntityпротивTable представляет собой слой данных, связанных с. Это просто способ, как получить прибыль от инструмента ORM, например, NHibernate. Все операции CRUD генерируются для нас, отражая отображение.

Presentation Layer - The ViewModel, должно помочь нам "карту"Entity(-ies)кClient View. Таким образом, хотя во многих простых сценариях будут: Entity, Table, ViewModel .. (например, Country или Currency) соответствуют 1-1, мы готовы обрабатывать его по-разному в более сложных сценариях.

Вышеупомянутый сценарий Отображение лица, адреса, вакансии на одном представлении - сложный. Можем ли мы извлечь выгоду из разделения, косвенного заполнения ViewModel?

Предложение: Заполните ViewModel на уровне обслуживания с помощью запросов к основной бизнес-модели

Первое преимущество я вижу, что население из ViewModelPersonнаходится в наших руках. Он не фиксирован внутри отображения. Мы можем уменьшить количество данных (даже использовать проекции для загрузки меньше данных) и мы можем даже расширить его (нагрузка Город с некоторой Codelist)

Второе преимущество заключается в том, что если мы будем потребность изменить что-то , например ввести асинхронную загрузку Addresses, мы должны изменения это только от UP Service слоя (в MVC контроллер, модель и View), а слой данных (отображение нетронутым)

+0

Спасибо за ответ - я намеревался заполнить ViewModel на уровне сервиса Я просто не был уверен в том, какой лучший запрос или метод. Я сделал это, используя обычный запрос nHibernate, а затем используя AutoMapper для заполнения моего ViewModel из результатов запроса. В идеале я бы предпочел использовать Projections, но я не имел опыта их использования, и запрос был немного сложным для меня. Например, конкатенация адреса в ViewModel была проблематичной. – gisWeeper

+0

Я вижу. Но с NHibernate нет другого выбора, затем попробуйте, изучите его;) Это лучшие ссылки, которые я могу дать вам начать экспериментировать * (см. Ниже) *. И как только вы начнете играть с запросами, проекциями, трансформаторами - сделайте **, не стесняйтесь спрашивать здесь **, и я уверен, что вы получите помощь. Итак: * 15. Критерии Запросы * - http://nhforge.org/doc/nh/en/index.html#querycriteria и даже более безопасный тип * 16.QueryOver Queries * http://nhforge.org/doc/nh/en/index.html#queryqueryover. Также проверьте это * 19.1.5. Использование пакетной выборки * http://nhforge.org/doc/nh/en/index.html#performance-fetching-batch –

+0

Я имею в виду, вы наверняка получите помощь здесь, если у вас есть запрос и не знаете, как для перехода ... Общий учебник, скорее всего, выходит за рамки области. Наверное, ты знаешь, что я имею в виду. Вы можете проверить http://stackoverflow.com/a/20970816/1679310 или http://stackoverflow.com/a/19287008/1679310, а также этот Q & A, чтобы увидеть возможность запроса по http://stackoverflow.com/questions/20528760 / –

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