我有两个集合,OrderItems和Items。有两个原因是因为在我的模型中我有一个固定的Item,以及一个与Item相关的OrderItem,并添加了与订单对象相关的数量和属性(OrderID)等订单特定信息。
在Entity Framework 4中,为了在模型中拥有对象集合,您需要在集合类型的对象中与该模型相关联。这使得Item中的OrderID属性成为必需。
以下是代码中的POCO:
public class Order {
public int OrderID { get; set; }
public DateTime DatePlaced { get; set; }
public bool Filled { get; set; }
public string Comment { get; set; }
public virtual ICollection<OrderItem> OrderItems { get; set; }
}
public class OrderItem {
public int OrderItemID { get; set; }
public int OrderID { get; set; }
public int Quantity { get; set; }
public int ItemID { get; set; }
}
public class Item {
public int ItemID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int Size { get; set; }
}
所以现在我有我的模型,我想显示订单详情页面。我可以从控制器发送订单到ViewModel(MVC 3)或ViewData(MVC 2/1)工作正常,我也可以发送一个Item的集合,但是如何显示包含的项目列表Item属性和OrderItem中的数量?由于两者都是集合,我可以在视图中同时使用OrderBy ItemID和循环,但这看起来非常混乱。
我在创建一个将项目和订单结合在一起的匿名类,但在组合集合时却没有真正起作用。
我基本上想循环遍历每个Item和OrderItem并显示以下属性,而不在视图中执行:
名称
说明
大小
数量
想法?
答案 0 :(得分:1)
我相信,如果我错了,请原谅我,但是使用EntityFramework(假设代码优先,但我认为db首先你仍然可以做到),你可以设置以下内容:
public class OrderItem {
public int OrderItemID { get; set; }
public int OrderID { get; set; }
public int Quantity { get; set; }
public virtual Item Item { get; set; }
}
然后当你引用Item.Name等时,它将懒洋洋地加载数据。我目前无权访问。
希望这会有所帮助,或者至少引导你朝着正确的方向前进。
修改强>
考虑一下,我相信如果你先做db,那么只要你已经在数据库中定义了关系,那么你应该能够通过关系属性从OrderItem访问相关的Item。
答案 1 :(得分:1)
Item
不应该来自OrderItem
而你只显示Item
,其中包含OrderItem
的所有信息以及更多信息吗?
因此,您只能从数据库中获取项目并使用模板显示...
public class OrderItem {
public int OrderItemID { get; set; }
public int OrderID { get; set; }
public int Quantity { get; set; }
public int ItemID { get; set; }
}
public class Item : OrderItem {
// public int ItemID { get; set; } not anymore needed
public string Name { get; set; }
public string Description { get; set; }
public int Size { get; set; }
}