【问题标题】:Mapping EFcomplex Entities into WCF DataContracts using AutoMapper使用 AutoMapper 将 EFcomplex 实体映射到 WCF DataContract
【发布时间】:2013-07-30 15:09:08
【问题描述】:

我是 AutoMapper 的新手,我在应用程序的服务层中的 CustomerService 中有以下手动映射,我试图找出等效的 AutoMapper 映射代码,但由于嵌套和复杂的对象和集合,我无法找到,所以请帮我解决这个问题

这里是 CustomerService 的代码:Service.Customer 是 DataContract,Data.Customer 是实体

public Service.Customer GetCustomer(string customerID)
    {
        Data.Customer customer
            = _northwindEntities
                .Customers.Single(
                    c => c.CustomerID == customerID);
        return new Service.Customer
                   {
                       CustomerID = customer.CustomerID,
                       CompanyName = customer.CompanyName,
                       ContactName = customer.ContactName,
                       Address = customer.Address,
                       City = customer.City,
                       Country = customer.Country,
                       Region = customer.Region,
                       PostalCode = customer.PostalCode,
                       Phone = customer.Phone,
                       Orders 
                        = GetOrders(customer.Orders)
                   };
    }

Service.Order 是 DataContract,Data.Order 是 Entity ...

private static IEnumerable<Service.Order> GetOrders(
        IEnumerable<Data.Order> order)
    {
        return order.Select(o => new Service.Order
            {
                OrderID = o.OrderID,
                OrderDate = o.OrderDate,
                OrderDetails = GetOrderDetails(o),
                Freight = o.Freight,
                ShippedDate = o.ShippedDate
            }).ToList();
    }

Service.OrderDetail 是 DataContract,Data.Order 是 Entity ...

private static IEnumerable<Service.OrderDetail> GetOrderDetails(
        Data.Order order)
    {

        return order.Order_Details.Select(
            o => new Service.OrderDetail
            {
                Product 
                    = new Service.Product
                    {
                        ProductID 
                            = o.Product.ProductID,
                        ProductName 
                            = o.Product.ProductName
                    },
                Quantity = o.Quantity,
                UnitPrice = o.UnitPrice
            }).ToList();
    }

所以 OrderDetails 嵌套在 Oreders 中,Orders 嵌套在 Customer 中...如何使用 AutoMapper 反映这种层次结构 在此先感谢

【问题讨论】:

    标签: wcf entity-framework-4 automapper


    【解决方案1】:

    您需要为父类和所有嵌套类定义映射,然后您可以根据您的要求自定义它们

     Mapper.CreateMap<Data.Customer, Service.Customer>();
     Mapper.CreateMap<Data.Order, Service.Order>();
     Mapper.CreateMap<Data.OrderDetails, Service.OrderDetails>();
     Mapper.CreateMap<Data.Product, Service.Product>();   
    

    看看这个

    http://automapper.codeplex.com/wikipage?title=Nested%20Mappings

    【讨论】:

    • 我的场景比较复杂,因为它是多层次的嵌套集合,而不仅仅是你所说的简单嵌套。还有如何使用实体框架数据库上下文来获取数据
    • 就像@Tejal 所说的那样简单。这就是 Automapper 的重点,使映射变得简单。您使用一行代码映射层次结构的每个级别。您的代码表示 4 层层次结构。另外,询问如何使用实体框架获取数据。真的吗?你觉得几行就可以回答了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    相关资源
    最近更新 更多