-1

I am working on a Automated email using a CRM project and I am having issues mapping my classes,I am trying to map the details from my Invoice header to a class named Fact2. (Essentially the details of my invoice ). I made a test to investigate more but I just don't understand why it's telling me i am missing a map.

This is the error that my tests finds.

InvoiceHeaderWhereTest Duration: 3,5 sec

Message: Test method Common.DAL.CompanyDB.Sales.Tests.InvoiceHeaderRepositoryTests.InvoiceHeaderWhereTest threw exception: System.InvalidOperationException: Missing map from Common.DAL.CompanyDB.Fact2 to Common.BLL.Entities.CustomerEntities.InvoiceHeader. Create using CreateMap<Fact2, InvoiceHeader>.

Stack Trace: ExpressionBuilder.CreateMapExpressionCore(ExpressionRequest request, Expression instanceParameter, IDictionary2 typePairCount, LetPropertyMaps letPropertyMaps, TypeMap& typeMap) ExpressionBuilder.CreateMapExpression(ExpressionRequest request, IDictionary2 typePairCount, LetPropertyMaps letPropertyMaps) ExpressionBuilder.CreateMapExpression(ExpressionRequest request) <.ctor>b__1() Lazy1.CreateValue() Lazy1.LazyInitValue() Lazy1.get_Value() ExpressionBuilder.GetMapExpression(Type sourceType, Type destinationType, Object parameters, MemberInfo[] membersToExpand) ProjectionExpression.ToCore(Type destinationType, Object parameters, IEnumerable1 memberPathsToExpand) ProjectionExpression.ToCore[TResult](Object parameters, IEnumerable1 memberPathsToExpand) ProjectionExpression.To[TResult](Object parameters, Expression1[] membersToExpand) Extensions.ProjectTo[TDestination](IQueryable source, IConfigurationProvider configuration, Object parameters, Expression1[] membersToExpand) Extensions.ProjectTo[TDestination](IQueryable source, IConfigurationProvider configuration, Expression1[] membersToExpand) Repository4.Where[TOut](IEnumerable1 where, Expression1 select) line 105 Repository4.Where[TOut](Expression1 where, Expression1 select) line 93 Repository4.Where(Expression1 where) line 88 InvoiceHeaderRepositoryTests.InvoiceHeaderWhereTest() line 39

This is my Test

 [TestMethod()]
    public void InvoiceHeaderWhereTest()
    {
        IKernel kernel = NinjectBootstrapper.LoadNinjectKernel(() => new LicenceUsage() { Company = new CompanyProfile() { SqlDatabase = "ProtoDB" } });

        var factory = kernel.Get<UnitOfWork>();

        var repo = factory.GetRepository<InvoiceHeader>(kernel.Get<LicenceUsage>());
        var entity = repo.Where(x => true);

        Assert.IsNotNull(entity);
    }

This is my POCO

using Common.BLL.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Common.BLL.Entities.CustomerEntities
{
    public class InvoiceHeader : EntityBaseWithDetails<InvoiceDetail, string>
    {
        public decimal? AmountTax { get; set; }
        public decimal? AmountTotal { get; set; }
        public decimal? AmountWithoutTaxes { get; set; }
        public DateTime? AvaTaxComittedDate { get; set; }
        public long? AvataxTransactionID { get; set; }
        public string BatchNumber { get; set; }
        public string BillOfLading { get; set; }
        public string BillToAddress2 { get; set; }
        public string BillToContact { get; set; }
        public string BillToContactFax { get; set; }
        public string BillToContactPhone { get; set; }
        public string BillToCustomer { get; set; }
        public string BillToCustomerAddress { get; set; }
        public string BilltoCustomerCity { get; set; }
        public string BillToCustomerCountry { get; set; }
        public string BillToCustomerName { get; set; }
        public string BillToCustomerProvince { get; set; }
        public string BillToCustomerZipCode { get; set; }
        public string BillToProvinceCode { get; set; }
        public string Carrier { get; set; }
        public DateTime? ConfirmationDate { get; set; }
        public string Currency { get; set; }
        public decimal CurrencyFactor { get; set; }
        public decimal CurrentBalance { get; set; }
        public string CustomerInvoice { get; set; }
        public string CustomerOrder { get; set; }
        public DateTime? DateDelivery { get; set; }

        public DateTime? DatePrinted { get; set; }

        public decimal? DiscountAvailable { get; set; }

        public DateTime? DiscountDate { get; set; }
        public string DocumentType { get; set; }

        public bool ExportReferenceInAccountingSystem { get; set; }

        public string Fob { get; set; }
        public int InvoiceType { get; set; }

        public bool IsContractExchangeRate { get; set; }
        public string IsPrinted { get; set; }
        public override string Label => this.Code;
        public string LastUser { get; set; }
        public string Note { get; set; }
        public DateTime? PaidDate { get; set; }
        public string PaymentTerm { get; set; }
        public string PONumber { get; set; }
        public string ReferenceNumber { get; set; }
        public string Revenu { get; set; }

        public string Salesman { get; set; }
        public string ShippingMode { get; set; }
        public string ShippingOrder { get; set; }
        public string ShipToAddress2 { get; set; }
        public string ShipToCustomer { get; set; }
        public string ShipToCustomerAddress { get; set; }
        public string ShipToCustomerCity { get; set; }
        public string ShipToCustomerCountry { get; set; }
        public string ShipToCustomerName { get; set; }
        public string ShipToCustomerProvince { get; set; }
        public string ShipToCustomerZipCode { get; set; }
        public string ShipToProvinceCode { get; set; }
        public int Status { get; set; }
        public string TaxGroup { get; set; }
        public string Territory { get; set; }
        public string Warehouse { get; set; }
    }
}

This is my mapping profile.

using AutoMapper;
using AutoMapper.EquivalencyExpression;
using Common.BLL.Entities.CustomerEntities;
using Common.DAL.CompanyDB;
using Common.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Common.DAL.MainDB
{
    internal class InvoiceHeaderMappingProfile : Profile
    {
        public InvoiceHeaderMappingProfile()
        {
            this.CreateMap<Fact, InvoiceHeader>()
               .ForMember(dst => dst.AmountTax, opt => opt.MapFrom(src => src.Taxes))
               .ForMember(dst => dst.AmountTotal, opt => opt.MapFrom(src => src.Total))
               .ForMember(dst => dst.AmountWithoutTaxes, opt => opt.MapFrom(src => src.Montant))
               .ForMember(dst => dst.AvaTaxComittedDate, opt => opt.MapFrom(src => src.AvataxCommittedDate))
               .ForMember(dst => dst.AvataxTransactionID, opt => opt.MapFrom(src => src.AvataxTransactionID))
               .ForMember(dst => dst.BillToAddress2, opt => opt.MapFrom(src => src.CIH_BillToAddress2))
               .ForMember(dst => dst.CustomerInvoice, opt => opt.MapFrom(src => src.No_Fact))
               .ForMember(dst => dst.ReferenceNumber, opt => opt.MapFrom(src => src.Noref))
               .ForMember(dst => dst.DocumentType, opt => opt.MapFrom(src => src.Type))
               .ForMember(dst => dst.Territory, opt => opt.MapFrom(src => src.Territoire))
               .ForMember(dst => dst.PaidDate, opt => opt.MapFrom(src => src.PaidDate))
               .ForMember(dst => dst.DatePrinted, opt => opt.MapFrom(src => src.Dateimpression))
               .ForMember(dst => dst.PONumber, opt => opt.MapFrom(src => src.No_Po))
               .ForMember(dst => dst.Salesman, opt => opt.MapFrom(src => src.Vendeur))
               .ForMember(dst => dst.ShippingMode, opt => opt.MapFrom(src => src.Exp_Mod))
               .ForMember(dst => dst.ShippingOrder, opt => opt.MapFrom(src => src.No_Exp))
               .ForMember(dst => dst.ShipToAddress2, opt => opt.MapFrom(src => src.CIH_ShipToAddress2))
               .ForMember(dst => dst.ShipToCustomer, opt => opt.MapFrom(src => src.Exp_A1))
               .ForMember(dst => dst.ShipToCustomerCity, opt => opt.MapFrom(src => src.Exp_A4))
               .ForMember(dst => dst.ShipToCustomerProvince, opt => opt.MapFrom(src => src.Exp_A5))
               .ForMember(dst => dst.ShipToCustomerZipCode, opt => opt.MapFrom(src => src.Exp_A6))
               .ForMember(dst => dst.Revenu, opt => opt.MapFrom(src => src.Revenu))
               .ForMember(dst => dst.Currency, opt => opt.MapFrom(src => src.Devise))
               .ForMember(dst => dst.Status, opt => opt.MapFrom(src => src.Status))
               .ForMember(dst => dst.TaxGroup, opt => opt.MapFrom(src => src.Taxes_Dflt))
               .ForMember(dst => dst.Warehouse, opt => opt.MapFrom(src => src.Location))
               .ForMember(dst => dst.CurrencyFactor, opt => opt.MapFrom(src => src.Dev_Fact))
               .ForMember(dst => dst.Carrier, opt => opt.MapFrom(src => src.Exp_Tra))
               .ForMember(dst => dst.BatchNumber, opt => opt.MapFrom(src => src.No_Lot))
               .ForMember(dst => dst.IsPrinted, opt => opt.MapFrom(src => src.Imprime))
               .ForMember(dst => dst.ShipToCustomerName, opt => opt.MapFrom(src => src.Exp_A2))
               .ForMember(dst => dst.ShipToCustomerAddress, opt => opt.MapFrom(src => src.Exp_A3))
               .ForMember(dst => dst.DiscountAvailable, opt => opt.MapFrom(src => src.DiscountAvailable))
               .ForMember(dst => dst.DateDelivery, opt => opt.MapFrom(src => src.Date_Exp))
               .ForMember(dst => dst.DiscountDate, opt => opt.MapFrom(src => src.DiscountDate))
               .ForMember(dst => dst.ExportReferenceInAccountingSystem, opt => opt.MapFrom(src => src.CreditNoteAccpac))
               .ForMember(dst => dst.ShipToProvinceCode, opt => opt.MapFrom(src => src.CIH_ShipToProvinceCode))
               .ForMember(dst => dst.CurrentBalance, opt => opt.MapFrom(src => src.Montant))
               .ForMember(dst => dst.CustomerOrder, opt => opt.MapFrom(src => src.No_Com))
               .ForMember(dst => dst.ConfirmationDate, opt => opt.MapFrom(src => src.ConfirmationDate))
               .ForMember(dst => dst.BillToProvinceCode, opt => opt.MapFrom(src => src.CIH_BillToProvinceCode))
               .ForMember(dst => dst.BillToCustomerAddress, opt => opt.MapFrom(src => src.Fact_A3))
               .ForMember(dst => dst.BilltoCustomerCity, opt => opt.MapFrom(src => src.Fact_A4))
               .ForMember(dst => dst.BillToCustomerProvince, opt => opt.MapFrom(src => src.Fact_A5))
               .ForMember(dst => dst.BillToCustomerZipCode, opt => opt.MapFrom(src => src.Fact_A6))
               .ForMember(dst => dst.BillToCustomerName, opt => opt.MapFrom(src => src.Fact_A2))
               .ForMember(dst => dst.LastUser, opt => opt.MapFrom(src => src.No_Usager))
               .ForMember(dst => dst.BillToCustomer, opt => opt.MapFrom(src => src.Fact_A1))
               .ForMember(dst => dst.Fob, opt => opt.MapFrom(src => src.Exp_Fab))
               .ForMember(dst => dst.BillToContactFax, opt => opt.MapFrom(src => src.Faxcontact))
               .ForMember(dst => dst.BillToContactPhone, opt => opt.MapFrom(src => src.Telcontact))
               .ForMember(dst => dst.BillToContact, opt => opt.MapFrom(src => src.Contact))
               .ForMember(dst => dst.BillOfLading, opt => opt.MapFrom(src => src.Waybill))
               .ForMember(dst => dst.Note, opt => opt.MapFrom(src => src.Note_Entet))
               .ForMember(dst => dst.PaymentTerm, opt => opt.MapFrom(src => src.Term))
               .ForMember(dst => dst.IsContractExchangeRate, opt => opt.MapFrom(src => src.IsContractExchangeRate))
               .ForMember(dst => dst.InvoiceType, opt => opt.MapFrom(src => src.InvoiceType))
               .ForMember(dst => dst.Details, opt => opt.MapFrom(src => src.Fact2))
               .ForMember(dst => dst.BillToCustomerCountry, opt => opt.MapFrom(src => src.CIH_BillToCountryCode))
               .ForMember(dst => dst.ShipToCustomerCountry, opt => opt.MapFrom(src => src.CIH_ShipToCountryCode))
               .ForMember(dst => dst.Code, opt => opt.MapFrom(src => src.No_Fact))

               .ForMember(dst => dst.Id, opt => opt.MapFrom(src => src.CIH_Id))
               .AfterMap((src, dst) => dst.Details.ToList().ForEach(x => x.Header = dst));

        
        }
    }
}

The Where I am refering to in my test

 public override IEnumerable<TOut> Where<TOut>(IEnumerable<Expression<Func<InvoiceHeader, bool>>> where, Expression<Func<InvoiceHeader, TOut>> select)
        {
            var query = this.Scope.Set<Fact>().ProjectTo<InvoiceHeader>(this.FieldMapper.ConfigurationProvider);

            query = this.ApplyWhereConditions(query, where);
            return query.Select(select).ToList();
        }
Ken
  • 11
  • 6

1 Answers1

0

My UnitOfWork was wrong was pointing to Fact2 instead of Fact hence the error.

Ken
  • 11
  • 6