fatihkaratay Ответов: 0

Не удается сопоставить мой доменный класс с ресурсным классом при создании нового объекта с помощью automapper


У меня есть угловой проект dotnetcore 2.0. Внутри проекта, у меня есть проект, владелец, и статус домена классов. Отношения выглядят следующим образом: 1 владелец может иметь несколько проектов, 1 проект должен иметь только один статус.

Я использую AutoMapper для сопоставления этих классов с целью создания ресурсов API. Мои доменные классы:

public class Owner
{
    public int Id { get; set; }

    [Required]
    [StringLength(255)]
    public string Name { get; set; }

    [StringLength(255)]
    public string Email { get; set; }

    [StringLength(255)]
    public string Phone { get; set; }

    [StringLength(255)]
    public string Title { get; set; }

    public DateTime? Updated { get; set; }

    public ICollection<Project> Projects { get; set; }

    public Owner()
    {
        Projects = new Collection<Project>();
    }
}


Класс Состояния:
public class Status
{
    public int Id { get; set; }

    [StringLength(255)]
    public string Name { get; set; }

    public ICollection<Project> Projects { get; set; }

    public Status()
    {
        Projects = new Collection<Project>();
    }
}


Класс проекта:
public class Project
{
    public int Id { get; set; }

    [Required]
    [StringLength(255)]
    public string Name { get; set; }
    public string Description { get; set; }

    [StringLength(255)]
    public string Development { get; set; }

    [StringLength(255)]
    public string Production { get; set; }

    [StringLength(255)]
    public string Link { get; set; }

    [StringLength(255)]
    public string DbName { get; set; }
    public DateTime? DueDate { get; set; }
    public DateTime? Updated { get; set; }

    public int OwnerId { get; set; }

    public Owner Owner { get; set; }

    public int StatusId { get; set; }

    public Status Status { get; set; }
}


Мои классы ресурсов временно идентичны классам домена. Вот мой класс ресурсов проекта, который вызывает эту проблему:

public class ProjectResource
{
    public int Id { get; set; }

    public string Name { get; set; }
    public string Description { get; set; }
    public string Development { get; set; }
    public string Production { get; set; }
    public string Link { get; set; }
    public string DbName { get; set; }
    public DateTime? DueDate { get; set; }
    public DateTime? Updated { get; set; }
    public OwnerResource Owner { get; set; }
    public StatusResource Status { get; set; }
}


Вот мой класс MappingProile:

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        //Domain to API Resource
        CreateMap<Owner, OwnerResource>();
        CreateMap<Project, ProjectResource>()
        .ForMember(pr => pr.Owner, opt => opt.MapFrom(p => p.Owner.Projects))
        .ForMember(pr => pr.Status, opt => opt.MapFrom(p => p.Status.Projects))
        .ForMember(pr => pr.Status, opt => opt.MapFrom(p => new StatusResource{Id = p.Status.Id, Name = p.Status.Name}))
        .ForMember(pr => pr.Owner, opt => opt.MapFrom(p => new OwnerResource{
            Id = p.Owner.Id, 
            Name = p.Owner.Name, 
            Email = p.Owner.Email, 
            Title = p.Owner.Title, 
            Updated = p.Owner.Updated
            }));
        CreateMap<Status, StatusResource>();

        //API Resource to Domain
        CreateMap<OwnerResource, Owner>()
        .ForMember(o => o.Id, opt => opt.Ignore());
        CreateMap<ProjectResource, Project>()
        .ForMember(p => p.Id, opt => opt.Ignore())
        .ForMember(p => p.Status, opt => opt.MapFrom(p => p.Status.Name))
        .ForMember(p => p.Owner, opt => opt.MapFrom(p => p.Owner.Name));
    }

}


Этот профильный класс дает мне проекты без каких-либо проблем. Однако, когда я создаю новый проект с использованием классов контроллеров, он выдает мне эту ошибку :
InvalidOperationException: свойство 'OwnerId' типа сущности 'Project' имеет временное значение. Либо установите постоянное значение явно, либо убедитесь, что база данных настроена на генерацию значений для этого свойства.

Я предполагаю,что у меня есть ошибки внутри класса mapping profile. Пожалуйста, дайте мне знать, если этой информации достаточно или вам нужна более подробная информация.

Что я уже пробовал:

Я изменил класс картографического профиля.
Модифицированные классы доменов и ресурсов.

0 Ответов