проблема, связанная с тем, как asp.mvc обрабатывает отношения родитель-потомок базы данных - PullRequest
0 голосов
/ 29 июня 2011

Я новичок MVC.
У меня проблема с тем, как asp.mvc обрабатывает отношения родитель-потомок базы данных.
У меня есть три таблицы: «Компания», «Член» и «Метод».Я создал отношения родитель / потомок между «Компания» и «Участник» и отношения родитель / потомок между «Участник» и «Метод».
Я использую Linq to Sql и шаблон репозитория для связи с моим mssqlбаза данных.

В моем HomeController у меня есть следующий результат действия

var memData = _repository.GetCompany(id);  
return View(memData);

В моем представлении я хочу использовать три частичных представления

<% Html.RenderPartial("ShowCompany"); %>  
<% Html.RenderPartial("ShowMember"); %>  
<% Html.RenderPartial("ShowMethod"); %>  

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

foreach(Member m in Model.Members)  
  foreach(Company c in Model.Company)  

Поскольку члены являются дочерними для компании, я могу выполнять итерации по свойству навигации по элементам в модели.1015 * Однако я не могу получить доступ к третьей таблице «Метод» в модели компании.
В контексте класса Компании я предполагаю, что хотя «Метод» является дочерним по отношению к «Участнику», но не является дочерним по «Компания », что навигационное свойство не выставлено так же, как для класса« Член »?

Не могли бы вы посоветовать, как мне поступить?
Должен ли я создать модель пользовательского представления, содержащую два свойства «Компания» и «Метод»?
Как мне этого добиться?Я предполагаю, что в моем домашнем контроллере у меня был бы, как и в моем первом методе хранилища, дополнительный метод для получения объекта «Метод»

var memData = _repository.GetCompany(id);  
var methodData = _repository.GetMethod(id); 

Как бы я передал эти два объекта в View ()?

Ответы [ 2 ]

0 голосов
/ 29 июня 2011

Итак, чтобы уточнить:

Компания (имеет много) Член (имеет много) Метод?

Я предполагаю, что хотя «Метод» является ребенок «члена», хотя и не ребенок «Компания», что навигационная собственность не выставлена ​​в то же было как для класса "Член"?

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

Как только это будет сделано, мы можем двигаться вперед.

Тогда вы можете объединить свои коллекции следующим образом:

// model is IEnumerable<Company>

foreach (var company in Model) {
    // do something with company
    foreach (var member in company.Members) {
        // do something with member
        foreach (var method in member.Methods) {
            // do something with method
        }
    }   
}
0 голосов
/ 29 июня 2011

Я думаю, вы должны быть в состоянии использовать вложенный цикл foreach

foreach (m in model.Members)
{
     //do stuff
     foreach (method in m.Methods)
     {
         //do stuff
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...