Отображение свойств вложенных объектов в одну модель представления с помощью EF 4.1 - PullRequest
1 голос
/ 27 мая 2011

Привет, я новичок в MVC3 и EF 4.1 и пытаюсь создать структуру, в которой моя ViewModel содержит плоское представление вложенного набора объектов. Мне интересно, обрабатывает ли EF 4.1 этот сценарий. Я немного почитал и даже не могу найти терминологию для поиска. По сути, я хотел бы создать ViewModel на основе частей разных моделей доменов. что-то вроде этого - мой вложенный набор моделей, а внизу - мой желаемый ViewModel:

class ModelA
    property one
    property two
    property three

class ModelB
    property eh
    property be
    property cee
    property ModelC modC

class ModelC
    property une
    property deux
    property trois
    property ModelD modD

class ModelD
    property x
    property y
    property z


class ShowStuffViewModel
    property one
    property two
    property be
    property trois
    property y
    property z

Я продолжаю думать, что у меня неверная концепция, но в конечном итоге я бы хотел иметь возможность автоматически отображать свойство через таблицу, вложенную из моей ViewModel, просто с помощью соглашения об именовании, независимо от того, на каком уровне оно находится. Я считаю, что мне не нужно носить с собой большой набор объектов, когда мне нужно всего лишь несколько точек данных от каждого. Я также хотел бы сделать вызов LINQ для заполнения свойств ViewModel, запросив две базовые модели ModelA и ModelB, а затем присвоить значения непосредственно ViewModel.

Прошу прощения за новые подробности здесь, так как я только начинаю свое путешествие в ООП MVC и т. Д., И любая помощь или руководство очень ценятся!

ура!

1 Ответ

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

Термин, который вы ищете, называется проекцией. Я не понимаю, как ModelA связан с другими моделями, поэтому я пропущу его в примере, но для отдыха вы можете просто создать этот запрос:

var query = from b in context.ModelBs
            // some join for ModelA here? 
            // Models must be related if you want to load them with single query
            select new ShowStuffViewModel
                {
                    be = b.be,
                    trois = b.ModelC.trois,
                    y = b.ModelC.ModelD.y, 
                    z = b.ModelC.ModelD.z 
                };
...