2016-03-14 5 views
1

У меня проблемы с проблемой, с которой я столкнулся. Я создаю интернет-магазин, где можно войти в систему и не войти в систему, чтобы добавить продукты в свою корзину. Когда пользователь проверит, пользователь должен будет либо войти в систему, либо зарегистрироваться. Если пользователь входит в существующую учетную запись и у этой учетной записи уже есть корзина с продуктами, необходимо объединить две корзины в одну. Ниже приведены мои две таблицы (BasketTable) и (BasketProductTable).Объединить несколько объектов

public partial class BasketTable 
    { 
     public BasketTable() 
     { 
      this.BasketProductTables = new HashSet<BasketProductTable>(); 
      this.OrderTables = new HashSet<OrderTable>(); 
     } 

     public int BasketId { get; set; } 
     public Nullable<int> UserId { get; set; } 
     public string SessionId { get; set; } 
     public Nullable<System.DateTime> Registered { get; set; } 

     public virtual ICollection<BasketProductTable> BasketProductTables { get; set; } 
     public virtual UserTable UserTable { get; set; } 
     public virtual ICollection<OrderTable> OrderTables { get; set; } 
    } 
public partial class BasketProductTable 
    { 
     public int BasketProductId { get; set; } 
     public int BasketId { get; set; } 
     public int ProductId { get; set; } 
     public Nullable<int> Quantity { get; set; } 
     public Nullable<double> TotalSum { get; set; } 

     public virtual BasketTable BasketTable { get; set; } 
     public virtual ProductTable ProductTable { get; set; } 
    } 

Мой вопрос в том, что я не уверен, как объединить корзины. Если бы кто-то мог перейти к хорошей статье по этому вопросу или показать какой-то код, тогда я был бы счастлив. Я кодирую в Asp.Net (MVC) и используя Linq для сущности. - Jakob

----- UPDATE ------ Я решил использовать два foreach, содержащие старые и новые корзины. Я проверил, если элемент из новой корзины существовал в старой корзине, тогда я бы обновил ее количеством и totalSum. Если он не существует, я бы создал новый объект с его информацией, а затем удалял все элементы в старом. Я узнал, что элементы не будут созданы/обновлены во время выполнения, поэтому у меня возникли проблемы с проверкой того, был ли продукт создан в foreach, поэтому я создал список, в котором я бы добавил созданные/обновленные продукты на свой productId и зарегистрировал код, если продукт был добавлен в список до создания или обновления. Я надеюсь, что это помогает кому-то.

+0

Вы не должны хранить содержимое корзины в базе данных. Рассмотрите возможность использования javascript и сохраните элементы в localStorage. После входа в систему вы можете получить эти элементы из localStorage. Хранение всего в базе данных не является хорошей идеей, особенно если эти предметы не гарантируются покупателем. –

+0

@John, это не значит, что если у него есть «Модель» в «Корзине», он собирается сохранить ее в базе данных. Он может просто использовать его в качестве ссылочной модели объекта, которая будет передана, и работать с данными. Если он не объявит набор данных для модели, то он создает экземпляр этого в базе данных. – Aizen

+0

, поэтому наличие Javascript для хранения данных не имеет значения и НЕ ДОЛЖЕН И НЕПРАВИЛЬНЫЙ подход в MVC. Мы всегда должны отходить от JS для обработки данных, которые существуют как структура модели. – Aizen

ответ

0

Я бы сказал, что лучший опыт заключается в объединении корзин таким образом, что «дублированные» заказы игнорируются. Вот некоторые грубые псевдо-код - что-то вроде:

foreach (BasketProductTable newBasketProduct in newBasket.BasketProductTables) { 
    if(oldBasket.Contains(newBasketProduct)) { 
     continue; // this ignores duplicate order items 
    } 

    // Otherwise add it to the old basket 
    oldBasket.Add(newBasketProduct); 

} 

Где newBasketTable ваша новая корзина товаров и oldBasket является существующий спас корзины.

После этого вы можете отказаться от «новой корзины», так как ваша «старая корзина» имеет новые предметы. Предупреждение: не забудьте пере рассчитать цену на каждый отдельный товар, так как цена может измениться с момента последнего размещения пользователем товара в корзине.

+1

Как бы вы обновили количество дубликатов позиций заказа? – Bombebak

+0

Лично я бы не обновлял количество дублирующих предметов - теория заключается в том, что пользователь может повторно добавлять то, что уже добавил. – wazdev

+0

Хорошо спасибо за ответ, хотя.Я думаю, что собираюсь объединить дублированные продукты и позволить пользователю решить либо купить их, либо обновить их количество. – Bombebak

Смежные вопросы