Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Automapper有时只能工作_C#_Entity Framework_Asp.net Web Api_Automapper - Fatal编程技术网

C# Automapper有时只能工作

C# Automapper有时只能工作,c#,entity-framework,asp.net-web-api,automapper,C#,Entity Framework,Asp.net Web Api,Automapper,我已经创建了一个web api,它返回一个DTO列表,我正在使用automapper将entity framework db first方法创建的实体列表映射到我的DTO实体。 有时它工作有时不工作(奇怪的行为),大多数时候它返回null。请看一下示例代码 public IEnumerable<RemarkHeaderViewModel> Get() { Mapper.CreateMap<RemarkHeader, RemarkHea

我已经创建了一个web api,它返回一个DTO列表,我正在使用automapper将entity framework db first方法创建的实体列表映射到我的DTO实体。 有时它工作有时不工作(奇怪的行为),大多数时候它返回null。请看一下示例代码

  public IEnumerable<RemarkHeaderViewModel> Get()
        {
            Mapper.CreateMap<RemarkHeader, RemarkHeaderViewModel>();
           //dbremarkdata have list of RemarkHeader
            var dbremarkdata = db.RemarkHeaders.ToList();

            //works sometimes, most of time return null
             var remarkHeaderVm = Mapper.Map<List<RemarkHeader>, List<RemarkHeaderViewModel>>(dbremarkdata);

            return remarkHeaderList;
        }
备注.cs由实体框架生成

public partial class Remark
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Remark()
        {
            this.Packages = new HashSet<Package>();
        }

        public int RemarkId { get; set; }
        public int RemarkHeaderId { get; set; }
        public string RemarkBody { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Package> Packages { get; set; }
        public virtual RemarkHeader RemarkHeader { get; set; }
    }
公共部分类备注
{
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2214:DoNotCallOverridableMethodsInConstructors”)]
公众评论()
{
this.Packages=new HashSet();
}
公共整型RemarkId{get;set;}
public int RemarkHeaderId{get;set;}
公共字符串RemarkBody{get;set;}
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2227:CollectionPropertiesShouldBreadOnly”)]
公共虚拟ICollection包{get;set;}
公共虚拟RemarkHeader RemarkHeader{get;set;}
}
AutoMapper_Mapping.cs

public partial class RemarkViewModel
    {

        public int RemarkId { get; set; }
        public int RemarkHeaderId { get; set; }
        public string RemarkBody { get; set; }
        public virtual RemarkHeaderViewModel RemarkHeaderViewModel { get; set; }
    }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using AutoMapper;
using PlannerDataLib;
using PlannerDataLib.DataModel;
using PlannerDataLib.ViewModel;

namespace PlannerWebAPI
{
    public class AutoMapper_Mapping
    {
        public static void Register_AutoMapper()
        {
            Mapper.CreateMap<Customer, CustomerViewModel>();
            Mapper.CreateMap<Order, OrderViewModel>();
            Mapper.CreateMap<Package, PackageViewModel>();
            Mapper.CreateMap<Planner, PlannerViewModel>();
            Mapper.CreateMap<Platform, PlatformViewModel>();
            Mapper.CreateMap<EndCustomer, EndCustomerViewModel>();
            Mapper.CreateMap<OrderType, OrderTypeViewModel>();
            Mapper.CreateMap<Incoterm, IncotermViewModel>();
            Mapper.CreateMap<ShippingOrganization, ShippingOrganizationViewModel>();
            Mapper.CreateMap<ShippingAddress, ShippingAddressViewModel>();
            Mapper.CreateMap<Country, CountryViewModel>();
            Mapper.CreateMap<OperatingUnit, OperatingUnitViewModel>();
            Mapper.CreateMap<PurchaseOrder, PurchaseOrderViewModel>();
            Mapper.CreateMap<OrderSource, OrderSourceViewModel>();
            Mapper.CreateMap<SalesPerson, SalesPersonViewModel>();
            Mapper.CreateMap<ApprovalStatu, ApprovalStatusVieModel>();
            Mapper.CreateMap<OrderPriority, OrderPriorityViewModel>();
            Mapper.CreateMap<Item, ItemViewModel>();
            Mapper.CreateMap<Remark, RemarkViewModel>();
            Mapper.CreateMap<RemarkHeader, RemarkHeaderViewModel>();


            Mapper.CreateMap<List<RemarkHeader>, List<RemarkHeaderViewModel>>();  
            Mapper.CreateMap<List<Package>, List<PackageViewModel>>();


            Mapper.CreateMap<PurchaseOrder, PurchaseOrderViewModel>()
              .ForMember(po => po.OrderSourceViewModel, m => m.MapFrom(md => md.OrderSource));

            Mapper.CreateMap<Order, OrderViewModel>()
                .ForMember(ov => ov.PackagesViewModel, m => m.MapFrom(md => md.Packages))
                .ForMember(ov => ov.EndCustomerViewModel, m => m.MapFrom(md => md.EndCustomer))
                .ForMember(ov => ov.OrderTypeViewModel, m => m.MapFrom(md => md.OrderType))
                .ForMember(ov => ov.IncotermViewModel, m => m.MapFrom(md => md.Incoterm))
                .ForMember(ov => ov.ShippingOrganizationViewModel, m => m.MapFrom(md => md.ShippingOrganization))
                .ForMember(ov => ov.ShippingAddressViewModel, m => m.MapFrom(md => md.ShippingAddress))
                .ForMember(ov => ov.OperatingUnitViewModel, m => m.MapFrom(md => md.OperatingUnit))
                .ForMember(ov => ov.PurchaseOrderViewModel, m => m.MapFrom(md => md.PurchaseOrder))
                .ForMember(ov => ov.SalesPersonViewModel, m => m.MapFrom(md => md.SalesPerson))
                .ForMember(ov => ov.SODViewModel, m => m.MapFrom(md => md.SalesPerson1))
                .ForMember(ov => ov.ApprovalStatusVieModel, m => m.MapFrom(md => md.ApprovalStatu))
                .ForMember(ov => ov.OrderPriorityViewModel, m => m.MapFrom(md => md.OrderPriority));

            Mapper.CreateMap<Package, PackageViewModel>()
                .ForMember(pv => pv.PlannerViewModel, m => m.MapFrom(md => md.Planner))
                .ForMember(pv => pv.PlatformViewModel, m => m.MapFrom(md => md.Platform))
                .ForMember(pv => pv.RemarkViewModel, m => m.MapFrom(md => md.Remark))
                .ForMember(pv => pv.PackageItemsViewModel, m => m.MapFrom(md => md.PackageItems));

            Mapper.CreateMap<EndCustomer, EndCustomerViewModel>()
                .ForMember(ev => ev.CustomerViewModel, m => m.MapFrom(md => md.Customer));

            Mapper.CreateMap<PackageItem, PackageItemViewModel>()
                .ForMember(piv => piv.ItemViewModel, m => m.MapFrom(md => md.Item));

            Mapper.CreateMap<ShippingAddress, ShippingAddressViewModel>()
               .ForMember(sav => sav.CountryViewModel, m => m.MapFrom(md => md.Country));

            Mapper.CreateMap<Remark, RemarkViewModel>()
               .ForMember(rs => rs.RemarkHeaderViewModel, m => m.MapFrom(md => md.RemarkHeader));
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用自动制版机;
使用PlannerDataLib;
使用PlannerDataLib.DataModel;
使用PlannerDataLib.ViewModel;
名称空间规划器WebAPI
{
公共类自动映射
{
公共静态无效寄存器_AutoMapper()
{
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
Mapper.CreateMap()
.ForMember(po=>po.OrderSourceViewModel,m=>m.MapFrom(md=>md.OrderSource));
Mapper.CreateMap()
.ForMember(ov=>ov.PackagesViewModel,m=>m.MapFrom(md=>md.Packages))
.ForMember(ov=>ov.endCustomerServiceWModel,m=>m.MapFrom(md=>md.EndCustomer))
.FormMember(ov=>ov.OrderTypeViewModel,m=>m.MapFrom(md=>md.OrderType))
.ForMember(ov=>ov.IncotermViewModel,m=>m.MapFrom(md=>md.Incoterm))
.FormMember(ov=>ov.ShippingOrganizationViewModel,m=>m.MapFrom(md=>md.ShippingOrganization))
.ForMember(ov=>ov.ShippingAddressViewModel,m=>m.MapFrom(md=>md.ShippingAddress))
.FormMember(ov=>ov.OperatingUnitViewModel,m=>m.MapFrom(md=>md.OperatingUnit))
.ForMember(ov=>ov.PurchaseOrderViewModel,m=>m.MapFrom(md=>md.PurchaseOrder))
.ForMember(ov=>ov.salersonviewmodel,m=>m.MapFrom(md=>md.salerson))
.ForMember(ov=>ov.SODViewModel,m=>m.MapFrom(md=>md.salerson1))
.ForMember(ov=>ov.ApprovalStatusVieModel,m=>m.MapFrom(md=>md.ApprovalStatu))
.ForMember(ov=>ov.OrderPriorityViewModel,m=>m.MapFrom(md=>md.OrderPriority));
Mapper.CreateMap()
.FormMember(pv=>pv.Planner视图模型,m=>m.MapFrom(md=>md.Planner))
.ForMember(pv=>pv.PlatformViewModel,m=>m.MapFrom(md=>md.Platform))
.ForMember(pv=>pv.RemarkViewModel,m=>m.MapFrom(md=>md.Remark))
.ForMember(pv=>pv.PackageItemsViewModel,m=>m.MapFrom(md=>md.PackageItems));
Mapper.CreateMap()
.ForMember(ev=>ev.CustomerViewModel,m=>m.MapFrom(md=>md.Customer));
Mapper.CreateMap()
.ForMember(piv=>piv.ItemViewModel,m=>m.MapFrom(md=>md.Item));
Mapper.CreateMap()
.ForMember(sav=>sav.CountryViewModel,m=>m.MapFrom(md=>md.Country));
Mapper.CreateMap()
.ForMember(rs=>rs.remarkheaderservicewmodel,m=>m.MapFrom(md=>md.RemarkHeader));
}
}
}

您应该创建映射一次且只能创建一次,理想情况下是在程序初始化时创建映射-否则,您可能会在AutoMaper执行映射的过程中重新创建映射,这确实可能会导致奇怪的行为。对于Web API项目,您可能会在Startup类的配置方法中执行此操作。

Hi我已将所有映射移动到Register_AutoMapper()方法中,并放入AutoMapper_Mapping.cs,然后从global.asax的Application_Start()函数中执行Register_AutoMapper()。仍然面临着这个特殊映射的问题。我更新了一个问题,请看一下。