Automapper:如何将IList映射到EntityCollection

时间:2016-08-12 09:26:09

标签: c# entity-framework automapper

我使用的是Automapper v1.1,因为我使用的是.NET 3.5以及使用Entity Framework。

我试图将ViewModel映射到Model但仍然遇到错误。我有以下示例类:

OrderViewModel

736*109/640

订单(注意:此类由EF自动生成)

public class OrderViewModel{
  public string OrderNo { get; set; }
  public IList<OrderItem> DisplayItems { get; set; }

  public OrderViewModel(){
    DisplayItems = new List<OrderItem>();
  }

}

OrderItem(注意:此类由EF自动生成)

public class Order{
  public string OrderNo { get; set; }
  public EntityCollection<OrderItem> OrderItems { get; set; }

  ...

}

我的功能

public class OrderItem{
  public string Name { get; set; }
  public int Quantity { get; set; }
  public int Price { get; set; }

  ...

}

当我尝试跟踪时,它在尝试将DisplayItems映射到OrderItems属性时停止。我收到以下关于它的错误:

  

System.InvalidOperationException:现在允许请求的操作   当此RelatedEnd的所有者为null时。 RelatedEnd对象   使用默认构造函数创建的应仅用作a   序列化期间的容器。

我做错了什么?使用Automapper将IList映射到EntityCollection的正确方法是什么?我这样做是因为我不想编写迭代代码只是为了将项目从一个集合复制/转移到另一个集合。

1 个答案:

答案 0 :(得分:1)

我认为这基本上是因为你明确地创建了从ListEntityCollection类型的地图 - 从我看到的情况来看,似乎人们最终会反复这样做(我没有看到直接演员/转换了)。但如果你想让它发挥作用,这种方法似乎可以完成工作。

进行快速搜索,您可以通过迭代使用更多或更少的自定义映射器代码来查找一些示例。 Here's a post举几个例子。

Here's another one表达得更清楚。

祝你好运!