Как получить данные с EF отношения один ко многим - PullRequest
1 голос
/ 12 декабря 2011

Как получить данные с EF для отношения один ко многим.т.е. если у меня есть имя таблицы Person (personID в качестве первичного ключа) и другое имя таблицы streetLivedIn (personID в качестве внешнего ключа).Теперь я заставляю метод моего контроллера передавать объект типа person

var persons=db.persons();
return View(persons);

Теперь я хочу отобразить детали Person вместе с улицей (то есть с тем, что хранится в streetLivedInTable), в котором он жил.Предположим, у меня есть Entityset человека

public class Persons
{
   public string Name{get;set;}
   //NAVIGATIONL PROP. 
   public virtual ICollection<streetLivedIn>{get;set}
}

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Предположим, что имя навигационного свойства Streets.

public class Persons
{
   public string Name { get; set; }
   //NAVIGATIONL PROP. 
   public virtual ICollection<streetLivedIn> Streets { get; set }
}

. Затем вы можете использовать метод Include для загрузки этого свойства.

var persons = db.persons.Include("Streets");
return View(persons);

Вы можете отобразить этопо-разному.Например,

@foreach (var person in Model)
{
     <div>@person.Name</div>

         @foreach (var street in person.Streets)
         {
               <div>@street.Name</div>
         }
}

Или вы можете использовать WebGrid, MvcContrib Grid и т. Д.

0 голосов
/ 12 декабря 2011

Предполагая, что вы не хотите предоставлять модель данных Entity Framework непосредственно представлению, а вместо этого выполнять преобразование в создаваемые вами бизнес-объекты, я просто повторю модель данных EF с двойным циклом foreach. Entity Framework создает для вас ссылки «один ко многим», почему бы не воспользоваться этим.

Для ясности я добавляю сгенерированные EF классы к Ef.

var personList = new List<Person>();
foreach (var efPerson in EfPersons)
{
    var person = new Person
    { 
        Name = efPerson.Name,
        StreetsLivedIn = new List<StreetLivedIn>();
    }
    foreach (var efStreet in efPerson.EfStreetsLivedIn)
    {
        var street = new StreetLivedIn { Name = efStreet.Name; }
        person.StreetsLivedIn.Add(street);
    }
    personList.Add(person);
}
return View(personList);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...