Automapper:如何映射IList到EntityCollection

本文关键字:IList EntityCollection 映射 何映射 Automapper | 更新日期: 2023-09-27 18:02:12

我使用的是Automapper v1.1,因为我使用的是。net 3.5以及实体框架。

我正试图将ViewModel映射到Model,但一直遇到错误。我有以下样例类:

OrderViewModel

public class OrderViewModel{
  public string OrderNo { get; set; }
  public IList<OrderItem> DisplayItems { get; set; }
  public OrderViewModel(){
    DisplayItems = new List<OrderItem>();
  }
}

Order(注意:这个类是EF自动生成的)

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

OrderItem(注意:这个类是EF自动生成的)

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

函数

public void MyFunction(OrderViewModel source){
  //initialize mapping
  Mapper.CreateMap<OrderViewModel, Order>().ForMember(dest => dest.OrderItems, opt => opt.MapFrom(src => src.DisplayItems));
  //map viewmodel to model
  var model = Mapper.Map<OrderViewModel, Order>(source);
  //does not reach this point
}

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

系统。InvalidOperationException:请求的操作现在被允许当这个RelatedEnd的所有者为空时。RelatedEnd对象使用默认构造函数创建的对象只能用作

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

Automapper:如何映射IList到EntityCollection

我认为这基本上是因为你显式地创建了从ListEntityCollection类型的映射-从我所看到的看来,人们最终会迭代地这样做(我还没有看到直接的cast/转换)。但如果你想让它工作,这种方法似乎可以完成工作。

做一个快速搜索,你可以找到一些例子,这是通过使用或多或少的自定义映射器代码,迭代管理。这篇文章有几个例子。

这是另一个表达得更清楚的例子。

祝你好运!