В ASP.NET MVC, как синхронизировать или объединить две коллекции разных типов - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть две коллекции, OrderItems и Items.Причина в том, что их два, потому что в моей модели у меня есть фиксированный Item и OrderItem, который относится к Item и добавляет специфичную для заказа информацию, такую ​​как количество и свойство (OrderID), которое связано с моим объектом Order.

В Entity Framework 4, чтобы иметь коллекцию объектов в модели, необходимо вернуться к этой модели в объекте типа коллекции.Это делает необходимым свойство OrderID в Item.

Вот код 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 и циклически обрабатывать оба в представлении одновременно, но это кажется действительно грязным.Это действительно работает, когда дело доходит до объединения коллекций.

Я хочу циклически просмотреть каждый Item и OrderItem и отобразить следующие свойства, не делая этого в представлении:

Имя
Описание
Размер
Количество

Идеи?

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Разве 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; }
}
1 голос
/ 14 декабря 2010

Полагаю, простите меня, если я ошибаюсь, но с 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 через свойство Relations. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...