Как использовать карткомплекс в C# - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь сопоставить объект из моей структуры сущностей с объектом. Все работало нормально, пока мне не пришлось делать список объектов. Я получаю сообщение об ошибке, в котором говорится, что мне следует использовать mapcomplex вместо карты. К сожалению, я не могу найти do c для этой функции.

Полные классы:

using Cld.Domain.DataService.Contract.Filter;
using Cld.Domain.DataService.Contract.Model;
using Cld.Domain.DataService.Service.Model;
using Core.Data;
using System.Collections.Generic;
using System.Linq;

namespace Cld.Domain.DataService.Service.Repositories
{
    internal class ConditRepository : RepositoryBase<CONDIT, Condit, string>,
                                         ISearchableRepository<CONDIT, Condit, ConditFilter>
    {
         public static readonly IMapping<CONDIT, Condit> ConditMap = new Mapping<CONDIT, Condit>()
            .Maps(entity => entity.ID, contract => contract.Id)
            .Maps(entity => entity.LIBELLE_D, contract => contract.LabelD)
            .Maps(entity => entity.LIBELLE_E, contract => contract.LabelE)
            .Maps(entity => entity.LIBELLE_F, contract => contract.LabelF)
            .Maps(entity => entity.LIBELLE_N, contract => contract.LabelN)
            .Maps(entity => entity.TRACKURL, contract => contract.TrackUrl)
            .Maps(entity => entity.CODE, contract => contract.Code)
            .Maps(entity => entity.CUSTID, contract => contract.Custid)
            .Maps(entity => entity.NUMERO, contract => contract.Number)
            .Maps(entity => entity.SCAC, contract => contract.Scac)
            .Maps(entity => entity.SERVIID, contract => contract.ServiId)
            .Maps(entity => entity.SHIPORDER, contract => contract.ShipOrder)
            .Maps(entity => entity.REQTIME, contract => contract.RequestedDateTime)
            .Maps(entity => entity.OutputPath, contract => contract.OutputPath)
            .Maps(entity => entity.PACTYPs.Select(x => x.ID).ToList(), contract => contract.listPacktypes)
            ;
    }
}

затем класс из EF:

namespace Cld.Domain.DataService.Service.Model
{
    using System;
    using System.Collections.Generic;

    public partial class CONDIT
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public CONDIT()
        {
            this.SHIPMENTs = new HashSet<SHIPMENT>();
            this.PACTYPs = new HashSet<PACTYP>();
        }

        public string LIBELLE_F { get; set; }
        public string LIBELLE_N { get; set; }
        public short NUMERO { get; set; }
        public string ID { get; set; }
        public string LIBELLE_E { get; set; }
        public string LIBELLE_D { get; set; }
        public string CUSTID { get; set; }
        public string SERVIID { get; set; }
        public string SCAC { get; set; }
        public string CODE { get; set; }
        public string TRACKURL { get; set; }
        public int SHIPORDER { get; set; }
        public System.TimeSpan REQTIME { get; set; }
        public string OutputPath { get; set; }
        public byte[] timestamp_column { get; set; }
        public bool Active { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<SHIPMENT> SHIPMENTs { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<PACTYP> PACTYPs { get; set; }
    }
}

И, наконец, контракт, в который я пытаюсь его уместить:

using Cld.Core.ContractFramework;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;

namespace Cld.Domain.DataService.Contract.Model
{
    [DataContract]
    public class Condit : IEntity<string>
    {
        [DataMember]
        public string Id { get; set; }

        [DataMember]
        public string LabelF { get; set; }

        [DataMember]
        public string LabelN { get; set; }

        [DataMember]
        public string LabelE { get; set; }

        [DataMember]
        public string LabelD { get; set; }

        [DataMember]
        public short Number { get; set; }

        [DataMember]
        public byte[] Timestamp { get; set; }

        [DataMember]
        public string Custid { get; set; }

        [DataMember]
        public string ServiId { get; set; }

        [DataMember]
        public string Scac { get; set; }

        [DataMember]
        public string Code { get; set; }

        [DataMember]
        public string TrackUrl { get; set; }

        [DataMember]
        public int ShipOrder { get; set; }

        [DataMember]
        public TimeSpan RequestedDateTime { get; set; }

        [DataMember]
        public string OutputPath { get; set; }

        [DataMember]
        public List<int> listPacktypes { get; set; }
    }
}

1 Ответ

0 голосов
/ 28 мая 2020

Коллега вошел в систему, и мне удалось задать ему вопрос.

Вот результат:

.MapComplex((entity, contractEntity, synchronizer) =>
            {
                contractEntity.listCondits = entity.CONDITs.Select(x => x.ID).ToList();

            });

сущность автоматически принимает исходный тип, contractEntity принимает тип, который вы хотите указать информацию в, и я не знаю, что такое синхронизатор. Оттуда вы можете манипулировать ими, как хотите. Итак, в этом случае я изменил объект контракта, заполнив его listCondits информацией из исходного объекта.

Извините за проблему, мой коллега должен был уйти и не подключиться повторно.

...