Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改存储库中的相关数据_C#_Asp.net Mvc_Entity Framework_Inversion Of Control - Fatal编程技术网

C# 更改存储库中的相关数据

C# 更改存储库中的相关数据,c#,asp.net-mvc,entity-framework,inversion-of-control,C#,Asp.net Mvc,Entity Framework,Inversion Of Control,有两个实体Order和OrderDetail,它们以这种方式绑定: public partial class Order { public Order() { OrderDetails = new List<OrderDetail>(); } ... } public class OrderDetail { public long OrderDetailId { get; set; } public int Orde

有两个实体Order和OrderDetail,它们以这种方式绑定:

public partial class Order
{ 
    public Order()
    { 
        OrderDetails = new List<OrderDetail>();
    }
    ...
}
public class OrderDetail
{
    public long OrderDetailId { get; set; }
    public int OrderId { get; set; }

    [DefaultValue(0)]
    public int RowNumber { get; set; }
    [ForeignKey("Product")]
    public int ProductId { get; set; }
    public int Count { get; set; }
    public decimal Price { get; set; }
    [ForeignKey("ProductId")]
    public virtual Product Product { get; set; }
    public virtual Order Order { get; set; }
}

该解决方案是实体OrderDetails中的一个键,(删除OrderDetailId并将OrderId和RowNumber设置为主复合键(感谢一名男子暗示,但他的帖子已被主持人删除)

而不是执行以下代码更改数据和删除不必要的OrderDetails

 public Order ChangeOrderSimple(Guid guid, IEnumerable<JsonModelItem> items, string Comments, bool isReserve, DateTime? DeliveryDate = null)
        {
            decimal total = 0;
            int row = 1;
            Dictionary<int, int> codes = items.ToDictionary(p => p.ProductId,p=>p.Count);
            var OrderToChange = _orders.GetAll(q => q.GuidIn1S == guid).Include(o => o.OrderDetails).FirstOrDefault();
            OrderToChange.Comments = Comments;
            OrderToChange.isReserve = isReserve;
            OrderToChange.DeliveryDate = DeliveryDate;


            var OrderDetails = OrderToChange.OrderDetails.ToList();

            List<OrderDetail> OrderDetailsChanged = new List<OrderDetail>();

            for (int i = 0; i < OrderDetails.Count; i++)
            {
                var item = OrderDetails[i];
                //    item = OrderD.OrderDetails[i];
                var result = codes.ContainsKey(item.ProductId);


                if (result)
                {
                    OrderDetail detail = new OrderDetail
                    {
                        RowNumber = ++row,
                        ProductId = item.ProductId,
                        Count = codes[item.ProductId],
                        Price = item.Price,
                        OrderId = item.OrderId
                    };
                    OrderDetailsChanged.Add(detail);
                }
            }

            OrderToChange.OrderDetails = OrderDetailsChanged;
            OrderToChange.CalculateTotal();

            _orders.Update(OrderToChange);
            return OrderToChange;
        }
公共订单ChangeOrderSimple(Guid、IEnumerable项、字符串注释、bool isReserve、DateTime?DeliveryDate=null) { 小数总数=0; int行=1; 字典代码=items.ToDictionary(p=>p.ProductId,p=>p.Count); var OrderToChange=\u orders.GetAll(q=>q.GuidIn1S==guid).Include(o=>o.OrderDetails.FirstOrDefault(); OrderToChange.Comments=注释; OrderToChange.isReserve=isReserve; OrderToChange.DeliveryDate=交货日期; var OrderDetails=OrderToChange.OrderDetails.ToList(); List OrderDetailsChanged=新列表(); for(int i=0;i取决于
IRepository
的实现。您的意思是在T上没有更多的条件,或者没有更多的方法签名,比如
RemoveChild(Int32 childRank)
?我的意思是从存储库中获取和更新订单(及其订单详细信息),然后将其放入数据库(没有直接到DbContext的地址)
var OrderToChange=_orders.GetAll(-);List orderDetails=new List();int row_num=0;foreach(代码中的KeyValuePair对){row_num++;orderDetails.Add(new orderDetails{ProductId=pair.Key,Count=pair.Value,Price=100,rownumer=row_num,OrderId=OrderToChange.OrderId});}OrderToChange.OrderDetails=OrderDetails;_orders.Update(OrderToChange);
public class OrderDetail
    {
      //  public long OrderDetailId { get; set; }

         [Key, Column(Order = 1)]
        public int OrderId { get; set; }

        [Key, Column(Order = 2)]
        public int RowNumber { get; set; }

        [ForeignKey("Product")]
        public int ProductId { get; set; }
        public int Count { get; set; }
        public decimal Price { get; set; }
        [ForeignKey("ProductId")]
        public virtual Product Product { get; set; }
        public virtual Order Order { get; set; }

    }
 public Order ChangeOrderSimple(Guid guid, IEnumerable<JsonModelItem> items, string Comments, bool isReserve, DateTime? DeliveryDate = null)
        {
            decimal total = 0;
            int row = 1;
            Dictionary<int, int> codes = items.ToDictionary(p => p.ProductId,p=>p.Count);
            var OrderToChange = _orders.GetAll(q => q.GuidIn1S == guid).Include(o => o.OrderDetails).FirstOrDefault();
            OrderToChange.Comments = Comments;
            OrderToChange.isReserve = isReserve;
            OrderToChange.DeliveryDate = DeliveryDate;


            var OrderDetails = OrderToChange.OrderDetails.ToList();

            List<OrderDetail> OrderDetailsChanged = new List<OrderDetail>();

            for (int i = 0; i < OrderDetails.Count; i++)
            {
                var item = OrderDetails[i];
                //    item = OrderD.OrderDetails[i];
                var result = codes.ContainsKey(item.ProductId);


                if (result)
                {
                    OrderDetail detail = new OrderDetail
                    {
                        RowNumber = ++row,
                        ProductId = item.ProductId,
                        Count = codes[item.ProductId],
                        Price = item.Price,
                        OrderId = item.OrderId
                    };
                    OrderDetailsChanged.Add(detail);
                }
            }

            OrderToChange.OrderDetails = OrderDetailsChanged;
            OrderToChange.CalculateTotal();

            _orders.Update(OrderToChange);
            return OrderToChange;
        }