Я хочу разместить данные в нескольких таблицах, связанных через свойства навигации. Я использую Automapper для этого, однако, я получаю пустую строку всякий раз, когда я отправляю данные, поэтому я думаю, что моя конфигурация или подход могут быть неправильными.
У меня есть три таблицы, которые представлены ViewModel, здесь мой код:
BaseEntity.cs
using System;
using System.ComponentModel.DataAnnotations;
namespace MyProject.Data
{
public class BaseEntity
{
public int Id { get; set; }
public string CreatedUser { get; set; }
public string UpdatedUser { get; set; }
public string DeletedUser { get; set; }
public DateTime? CreatedDate { get; set; }
public DateTime? UpdatedDate { get; set; }
public DateTime? DeletedDate { get; set; }
}
}
Car.cs
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
namespace MyProject.Data
{
public class Car : BaseEntity
{
public string Make { get; set; }
public string Model { get; set; }
public string Reg { get; set; }
public ICollection<Options> Options { get; set; }
public ICollection<Spec> Spec { get; set; }
}
}
Опции .cs
using System;
using System.Collections.Generic;
using System.Text;
namespace MyProject.Data
{
public class Options : BaseEntity
{
public bool? Stereo { get; set; }
public bool? FogLights { get; set; }
public bool? BikeRack { get; set; }
public Car Car { get; set; }
}
}
Spe c .cs
using System;
using System.Collections.Generic;
using System.Text;
namespace MyProject.Data
{
public class Spec : BaseEntity
{
public int? BHP { get; set; }
public string EngineCode { get; set; }
public string? Displacement { get; set; }
public Car Car { get; set; }
}
}
ViewModel выглядит следующим образом.
CarViewModel.cs
using Microsoft.AspNetCore.Http;
using System;
using System.ComponentModel.DataAnnotations.Schema;
namespace MyProject.Data.ViewModels
{
public class VesselViewModel
{
//Car
public int Id { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public string Reg { get; set; }
//Options
public bool? Stereo { get; set; }
public bool? FogLights { get; set; }
public bool? BikeRack { get; set; }
//Spec
public int? BHP { get; set; }
public string EngineCode { get; set; }
public string? Displacement { get; set; }
//Navigation Property
public Car Car { get; set; }
}
}
MappingConfiguration / CarProfile.cs
using AutoMapper;
using MyProject.Data;
using MyProject.Data.ViewModels;
namespace MyProject.UI.MappingConfigurations
{
public class CarProfile : Profile
{
public CarProfile()
{
CreateMap<Car, CarViewModel>().ReverseMap();
}
}
}
MappingConfiguration / MakeProfile.cs
using AutoMapper;
using MyProject.Data;
using MyProject.Data.ViewModels;
namespace MyProject.UI.MappingConfigurations
{
public class MakeProfile : Profile
{
public OptionsProfile()
{
CreateMap<Options, OptionsViewModel>().ReverseMap();
}
}
}
MappingConfiguration / SpecProfile.cs
using AutoMapper;
using MyProject.Data;
using MyProject.Data.ViewModels;
namespace MyProject.UI.MappingConfigurations
{
public class SpecProfile : Profile
{
public SpecProfile()
{
CreateMap<Spec, CarViewModel>().ReverseMap();
}
}
}
Вот мой метод Create, который использует Automapper для всего этого. Как примечание, я использую общий репозиторий c для своей работы с внедрением зависимостей и сервисным уровнем.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(CarViewModel car)
{
if (ModelState.IsValid)
{
var carData = _mapper.Map<Car>(car);
var optionsData = _mapper.Map<Options>(car);
var specData = _mapper.Map<Spec>(car);
_carService.InsertCar(carData);
_optionsService.InsertOptions(optionsData);
_specService.InsertSpec(specData);
return View();
}
return View();
}
Форма
Здесь данные представлены, из-за связанных данных, ViewModel используется для пользовательского интерфейса.
Models.VesselViewModel
<form id="carCreateForm" asp-controller="Car" asp-action="Create" method="post" asp-antiforgery="true" enctype="multipart/form-data">
...form inputs here.
</form>
При добавлении нового автомобиля соответствующие данные публикуются, но в таблицу «Автомобиль» добавляется пустой «Автомобиль». Что не так с моей конфигурацией? Любая помощь приветствуется.