如何获取EF一对多关系的数据

本文关键字:一对多 关系 数据 EF 何获取 获取 | 更新日期: 2023-09-27 18:17:28

如何获取一对多关系下的EF数据。如果我有一个表名Person(personID为主键)和另一个表名streetLivedIn(personID为外键)。现在我强制我的控制器方法传递person

类型的对象
var persons=db.persons();
return View(persons);

现在我想显示Person详细信息以及街道(i。例如,他/她住在streetLivedInTable中存储的内容。
假设我有一个person的Entityset

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

如何获取EF一对多关系的数据

假设导航属性名称为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>
         }
}

也可以用WebGridMvcContrib Grid

假设您不希望将Entity Framework数据模型直接公开给视图,而是对您创建的业务对象进行转换,那么我将简单地使用双foreach循环迭代EF数据模型。实体框架使用包含为您创建一对多引用-为什么不利用它呢?

为了清晰起见,我在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);