1

好的,我真的很难找到一个很好的例子来说明我需要做什么。所以,我会在这里问。

假设我有一个名为 Customer 的实体类 (EF) 和一个名为 CustomerViewModel 的相应视图模型类。

使用 AutoMapper,我创建了以下映射:

 Mapper.CreateMap<CustomerViewModel, Customer>(); 
 Mapper.CreateMap<Customer, CustomerViewModel>();

我将如何修改以下代码以使用此映射?

    public static List<CustomerViewModel> GetCustomers()
    {
        using (var context = new GCSBaseEntities())
        {
            var query = from c in context.Customers
                        select new CustomerViewModel
                        {
                            CompanyName = c.CompanyName,
                            Id = c.Id,
                            EmailAddress = c.EmailAddress,
                            FirstName = c.FirstName,
                            LastName = c.LastName,
                            MiddleName = c.MiddleName,
                            ModifiedDate = c.ModifiedDate,
                            Phone = c.Phone,
                            SalesPerson = c.SalesPerson,
                            Suffix = c.Suffix,
                            Title = c.Title,
                            FullName = c.FirstName + " " + c.LastName
                        };

            return query.ToList();
        }
    } 

提前致谢。

4

2 回答 2

2

注册映射时,您必须提供必须发生的任何复杂映射操作。在您的情况下,我相信您的所有属性都匹配,除了FullName = c.FirstName + " " + c.LastName. 下面是您的 Customer-to-CustomerViewModel 映射的外观:

Mapper.CreateMap<Customer, CustomerViewModel>()
       .ForMember(custVm => custVm.FullName,
            mapper => mapper.MapFrom(cust => cust.FirstName + " " + cust.LastName));

不过,您必须弄清楚如何将FullName道具从 ViewModel 推回EF 类的FirstName&字段中。LastName但是当您决定如何实现它时,请按照上面的模式进行其他映射。

您的查询现在可以更小 MUUUCH:

using (var context = new GCSBaseEntities()) 
{
     return from c in context.Customers
            select Mapper.Map<CustomerViewModel>(c);
}
于 2013-11-26T18:38:46.220 回答
2

弄清楚了。为了避免上述错误,您必须在客户之后添加调用 .AsEnumerable() ,如下所示:

     return from c in context.Customers.AsEnumerable()
        select Mapper.Map<CustomerViewModel>(c);

我从这个线程得到这个:LINQ and AutoMapper

于 2013-11-27T21:43:08.460 回答