使用AutoMapper更新Parent并插入Child Telerik Opn Access

时间:2014-07-04 09:57:49

标签: c# asp.net-mvc asp.net-mvc-5 automapper telerik-open-access

我正在使用Telerik Open Access进行数据库操作。我有一个名为Order的Parent类,它包含两个名为OrderHistory和Tasks的类。现在发生任何类型的事件,如果订单被搁置或者发送它的相关条目将被放在OrderHistory表上,Order表将被更新。现在我已经完成了以下代码,但它有时有效,但有时不行。我对这个telerik open access和automapper了解不多。

控制器呼叫:

OrderDTO updateorder = orderManagement.GetOrdersByOrderId(2);
updateorder.QueueId = 3;
updateorder.IsLocked = false;
updateorder.UpdatedBy = Convert.ToInt32(Session["UserId"], CultureInfo.CurrentCulture);
updateorder.UpdatedDate = DateTime.Now;
OrderHistoryDTO alertDto = new OrderHistoryDTO()
{
    Event = 'Putting On Hold',
    OrderID = orderDTO.Id
    UserID = Convert.ToInt32(Session["UserId"], CultureInfo.CurrentCulture),
    OccuerdDate = DateTime.Now,
    EventType = 'Event'
};
updateorder.OrderHistories.Clear();
updateorder.OrderHistories.Add(alertDto);
updateorder = orderManagement.UpdateOrder(updateorder);

db operations

public OrderDTO UpdateOrder(OrderDTO orderEntity)
{
    AutoMapper.Mapper.CreateMap<OrderDTO, Order>()
    .ForMember(d => d.Tasks, m => m.Ignore())
    .ForMember(d => d.OrderHistories, m => m.MapFrom(s => s.OrderHistories));
    AutoMapper.Mapper.CreateMap<OrderHistoryDTO, OrderHistory>();    
    var orderBase = AutoMapper.Mapper.Map<Order>(orderEntity);  // It will sometimes make OrderHistories list count to 0. though in starting orderEntity has OrderHistories count = 1.
    base.Update(orderBase);
    base.Save();
    orderEntity = AutoMapper.Mapper.Map<OrderDTO>(orderBase);
    return orderEntity;
}

OrderDTO

public class OrderDTO
{
  public int OrderID { get; set; }
  public bool? IsLocked { get; set; }
  public int QueueId { get; set; }
  [ScriptIgnore]
  private IList<OrderHistoryDTO> _orderHistories = new   List<OrderHistoryDTO>();
  [ScriptIgnore]
  public virtual IList<OrderHistoryDTO> OrderHistories
  {
   get { return this._orderHistories; }
  }
  public DateTime? UpdatedDate { get; set; }
  public int? UpdatedBy { get; set; }
}

OrderHistoryDTO

public class OrderHistoryDTO
{
  public int ID { get; set; }
  public int UserID { get; set; }
  public int OrderID { get; set; }
  public string Event { get; set; }
  public string EventType { get; set; }
  public DateTime? OccuerdDate { get; set; }
  public UserDTO User { get; set; }
}

0 个答案:

没有答案