Обновить родительский и вставить дочерний доступ Telerik Opn с помощью AutoMapper

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

#c# #asp.net-mvc #asp.net-mvc-5 #automapper #telerik-открытый доступ

Вопрос:

Я использую Telerik Open Access для работы с базой данных. У меня есть родительский класс с именем Order, и он включает в себя 2 класса с именами OrderHistory и Tasks. Теперь произойдет любое событие, например, если заказ будет приостановлен или отправлен для отправки, связанная с ним запись будет помещена в таблицу OrderHistory, и таблица заказов будет обновлена. Теперь я выполнил следующий код, но иногда это работает, а иногда нет. Я мало что знаю об этом 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);
  

операции с базой данных

 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; }
}
  

История заказа на

 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; }
}
  

Комментарии:

1. it works sometimes but sometimes not — Что вы имеете в виду?

2. @rhughes иногда строка ‘ar orderBase = AutoMapper.Mapper.Map<Порядок>(OrderEntity);’ приводит к тому, что список orderhistories равен 0, хотя данные есть.

3. @Dhwani, я протестировал ваш код с некоторыми случайными данными в моей базе данных и не воспроизвел проблему, которую вы описываете. В случае, если вы обнаружите проблему, связанную с доступом к данным Telerik (ранее известным как Telerik OpenAccess ORM), я бы посоветовал вам опубликовать свой вопрос на этом форуме: telerik.com/forums/data-access/general-discussions

4. @DoroteyaAgayna ок. Я все еще сталкиваюсь с той же проблемой. Итак, я думаю, теперь я должен разместить на форуме. Спасибо