2010-12-14 114 views
0

我有两个集合,OrderItems和Items。有两个原因是因为在我的模型中,我有一个固定的项目,以及与项目有关的OrderItem,并添加了与订单对象相关的订单特定信息(如数量和属性(OrderID))。在ASP.NET MVC中,如何同步或合并两个不同类型的集合

在实体框架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属性和OrderItem中的数量?既然都是集合,我可以OrderBy ItemID并在视图中同时循环两次,但是看起来很杂乱。

我摆弄了创建一个匿名类,它结合了Items和Order,但在组合集合时并没有真正起作用。

我基本上是通过每个项目要循环和OrderItem的,并显示以下属性,而不做它的观点:

名称
说明
面积
数量

想法?

回答

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通过关系属性。

+0

我认为,这只是自我跟踪实体。 – RPM1984 2010-12-14 09:17:55

+0

非常感谢,这比我希望的要容易得多:V 我使用代码优先的EF – George 2010-12-14 09:21:47

+1

虚拟-1。这是丑陋的和反OOP。 – Aliostad 2010-12-14 09:38:33

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; } 
} 
+0

不完全,因为Items与OrderItems分开存在。项目是系统中的固定项目,其中OrderItem是某人订购项目并需要数量的实例。在这种情况下,这种关系并不存在。 – George 2010-12-14 09:27:55

+1

它可能会单独存在,但是您带来的模型通常(如Scott Hanselman所说)是非常规化的形式。很多时候,这个模型是一个ViewModel,与数据库不一样。 – Aliostad 2010-12-14 09:37:50

相关问题