当前位置: 首页>>代码示例>>C#>>正文


C# Order.SetItems方法代码示例

本文整理汇总了C#中Order.SetItems方法的典型用法代码示例。如果您正苦于以下问题:C# Order.SetItems方法的具体用法?C# Order.SetItems怎么用?C# Order.SetItems使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Order的用法示例。


在下文中一共展示了Order.SetItems方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Store

        public async Task<Order> Store(Order newOrder)
        {
            using (var context = new ApplicationDbContext())
            {
                var dbOrder = await context.Orders
                    .Include(x => x.Items)
                    .Include(x => x.Manager)
                    .Include(x => x.Items.Select(y => y.Product))
                    .Include(x => x.Items.Select(y => y.Product.Accessorises))
                    .SingleOrDefaultAsync(x => x.Id == newOrder.Id);
                if (dbOrder == null)
                {
                    //новый заказ
                    var items = newOrder.Items;
                    newOrder.SetCreationDateTime(DateTime.Now);
                    newOrder.SetItems(new List<OrderItem>());
                    if (newOrder.Manager != null)
                    {
                        context.Managers.Attach(newOrder.Manager);
                    }
                    context.Orders.Add(newOrder);
                    await context.SaveChangesAsync();
                    var newItems = items.Select(x => new OrderItem(newOrder.Id, x.Product, x.Count)).ToArray();
                    foreach (var item in newItems)
                    {
                        item.ClearEntity();
                    }
                    context.OrderItems.AddOrUpdate(newItems);
                    newOrder.SetItems(newItems);
                    await context.SaveChangesAsync();
                    return newOrder;
                }
                context.Entry(dbOrder).CurrentValues.SetValues(newOrder);
                //Обновим заказы
                //сперва удалим все устаревшие связи на заказы
                foreach (var dbItem in dbOrder.Items.ToList())
                    if (newOrder.Items.All(s => s.ProductId != dbItem.ProductId))
                        context.OrderItems.Remove(dbItem);

                foreach (var newItem in newOrder.Items)
                {
                    var dbItem = dbOrder.Items.SingleOrDefault(s => s.ProductId == newItem.ProductId);
                    if (dbItem != null)
                        //нужно обновить существующий товар в заказе
                        context.Entry(dbItem).CurrentValues.SetValues(newItem);
                    else
                    {
                        //очистим, во избежание дубликатов продукта
                        newItem.ClearEntity();
                        //нужно создать новый заказ в товаре
                        newItem.SetOrderId(newOrder.Id);
                        dbOrder.Items.Add(newItem);
                    }
                }
                //Обновим менеджера
                if (dbOrder.Manager != null)
                {
                    if (newOrder.Manager != null)
                    {
                        if (dbOrder.Manager.Id == newOrder.Manager.Id)
                        {
                            // no relationship change, only scalar prop.
                            context.Entry(dbOrder.Manager).CurrentValues.SetValues(newOrder.Manager);
                        }
                        else
                        {
                            if (newOrder.Manager.Id != 0)//изменился менеджер
                            {
                                // подразумеваем, что новый менеджер уже существует
                                context.Managers.Attach(newOrder.Manager);
                                dbOrder.SetManager(newOrder.Manager);
                            }
                            else
                            {
                                throw new NotImplementedException("Создание менеджера таким образом не поддерживается");
                            }
                        }
                    }
                    else // relationship has been removed
                        dbOrder.SetManager(null);
                }
                else
                {
                    if (newOrder.Manager != null) //изменился менеджер
                    {
                        if (newOrder.Manager.Id != 0)
                        {
                            // подразумеваем, что новый менеджер уже существует
                            context.Managers.Attach(newOrder.Manager);
                            dbOrder.SetManager(newOrder.Manager);
                        }
                        else
                        {
                            throw new NotImplementedException("Создание менеджера таким образом не поддерживается");
                        }
                    }
                    //else ничего не поменялось
                }
                await context.SaveChangesAsync();
                return dbOrder;
//.........这里部分代码省略.........
开发者ID:ulmer-morozov,项目名称:TypeScipt-AngularJS-ASP.NET-WebApi-Example,代码行数:101,代码来源:EfOrderRepository.cs


注:本文中的Order.SetItems方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。