Не удается сопоставить мой доменный класс с ресурсным классом при создании нового объекта с помощью 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. Пожалуйста, дайте мне знать, если этой информации достаточно или вам нужна более подробная информация.
Что я уже пробовал:
Я изменил класс картографического профиля.
Модифицированные классы доменов и ресурсов.