2013-03-05 77 views
0

我尝试将一个类序列化为xml。在序列化之后,我想更新statusid。 我能够找到第一个订单并改变statusId,当去第二个orderid时,这里是我遇到模糊匹配发现错误的地方。dbcontext throwAmbiguousMatchException

这里的主要方法:

using (var Context = new Context()) 
      { 


       var orderRepo = new OrderRepository(Context); 

       foreach (var orderId in orderIds) 
       { 
        var order = orderRepo.Find(orderId); 
        order.orderStatusID = 5; 

       } 
       orderRepo.Save(); 
      } 
在OrderRepository.cs

 public Order Find(int id) 
      { 
       return _context.Orders.Find(id); 
      } 

    public void Save() 
     { 

      try 
      { 
       _context.SaveChanges(); 
      } 
      catch (Exception ex) 
      { 

       _logger.Error(ex); 
      } 

     } 

order.cs:

[XmlRoot("Orders")] 
    [NotMapped] 
    public class OrderCollection 
    { 

     public OrderCollection() { Orders = new List<Order>(); } 

     [XmlElement("Order")] 
     [NotMapped] 
     public List<Order> Orders { get; set; } 
    } 

    [Serializable()] 
    public class Order 
    { 

     public int id { get; set; } 
     [XmlElement("date")] 
     public DateTime createdDate 
     { 
      get 
      { 
       return (_createdDate == default(DateTime)) 
        ? DateTime.Now 
        : _createdDate; 
      } 

      set { _createdDate = value; } 
     } 
     private DateTime _createdDate = default(DateTime); 

     public string firstName { get; set; } 

     public string lastName { get; set; } 

     [XmlIgnore] 
     public int orderStatusID { get; set; } 

    } 
+0

看起来您的代码正在查找给定订单ID的多个匹配项。您的底层数据存储是什么? – 2013-03-05 12:50:43

+0

我有双重检查数据,所有单个条目。当我只查找第二个时,它是完全正确的 – Kiddo 2013-03-05 13:21:59

+0

你可以发布堆栈跟踪吗? – Pawel 2013-03-05 19:26:05

回答

0

变成是一个实体有两个成员相同的名称和不同的外壳。一个是来自数据库的字段,另一个是导航属性。只是重命名其中一个解决了问题。