如何获取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}
}
假设导航属性名称为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
等
假设您不希望将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);