假设我们有两个模型,一个是“Person”,包含Id和Name属性,另一个是“Order”,包含PersonId属性,表示订单属于哪个人。我们想要在订单列表中显示每个订单所属人员的名称而不是Id。
首先,在Order模型中添加Person属性:
public class Order
{
public int Id { get; set; }
public int PersonId { get; set; }
public string OrderNumber { get; set; }
public virtual Person Person { get; set; }
}
这里的“virtual”关键字表示这是一个虚属性,会在运行时自动加载。接下来,在Person模型中添加Orders属性:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection Orders { get; set; }
}
这里的“ICollection”关键字表示这是一个集合属性,表示一个人可能有多个订单。接下来,在DbContext中重写OnModelCreating方法,定义一个关系:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(o => o.Person)
.WithMany(p => p.Orders)
.HasForeignKey(o => o.PersonId);
}
这里的“HasRequired”表示Person是必需的,而“WithMany”表示Person可以拥有多个Order。最后,在我们的Controller中,我们可以使用Include方法来加载Person属性:
public ActionResult Index()
{
var orders = db.Orders.Include(o => o.Person).ToList();
return View(orders);
}
现在,我们可以在View中像这样访问Person的Name属性:
@foreach (var order in Model)
{
@order.OrderNumber
@order.Person.Name
}
这样就可以显示每个订单所属人员的名称了。