我正在使用 ASP.NET MVC 和 Automapper。 我试图解决这个问题,我无法通过此代码将数据插入数据库,如果我使用 SQL Server 插入数据,则会出现错误(Automapper 映射异常)。
我该如何解决这个问题?
控制器代码:
public class SERVICESController : Controller
{
private readonly IMapper mapper;
private readonly Calssifications1 calssificationInterface;
private readonly CATEGORIES categorisInterface;
private readonly CHANNELS1 channelsInterface;
private readonly Level LEVELInterface;
private readonly User userInterface;
private readonly Services1 serviceInterface;
// GET: SERVICES
public SERVICESController()
{
mapper = AutoMapperConfig.Mapper;
calssificationInterface = new Calssifications1();
categorisInterface = new CATEGORIES();
channelsInterface = new CHANNELS1();
LEVELInterface = new Level();
userInterface = new User();
serviceInterface = new Services1();
}
//index
public ActionResult Index(string query = null,
int? CATID = null,
int? TYPID = null,
int? CLASSID = null,
int? LEVELID = null,
int? CHANNELID = null)
{
var serviceListData = new ServiceListModel();
InitSelectList(ref serviceListData);
var serviceList = serviceInterface.ReadAll(query, CATID, TYPID,
CLASSID, LEVELID, CHANNELID);
var mappedServiceList = mapper.Map<List<SERVICESmodel>>(serviceList);
serviceListData.SERVICEs = mappedServiceList;
return View(serviceListData);
}
//create function
public ActionResult Create()
{
var serviceModel = new SERVICESmodel();
InitSelectList(ref serviceModel);
return View(serviceModel);
}
[HttpPost]
public ActionResult Create(SERVICESmodel serviceData)
{
InitSelectList(ref serviceData);
try
{
if (ModelState.IsValid)
{
serviceData.MANUAL = SaveManualFile(serviceData.MANUALfile);
var STO = mapper.Map<SERVICE_ALL>(serviceData);
STO.CATEGORy = null;
STO.USER_TYPE = null;
STO.CALSSIFICATION = null;
STO.MATURITY_LEVEL = null;
STO.CHANNEL = null;
int result = serviceInterface.Create(STO);
if (result >= 1)
{
return RedirectToAction("Index");
}
ViewBag.Message = "An Error ";
}
return View(serviceData);
}
catch (Exception ex)
{
ViewBag.Message = ex.Message;
return View(serviceData);
}
}
//function servicemodel
private void InitSelectList(ref SERVICESmodel serviceModel)
{
var mappedCategriesList = GetCategories();
serviceModel.Categories = new SelectList(mappedCategriesList, "ID", "NAME");
var mappedUserlList = GetUser();
serviceModel.UserType = new SelectList(mappedUserlList, "ID", "NAME");
var mappedLevellList = GetLevel();
serviceModel.Level = new SelectList(mappedLevellList, "ID", "NAME");
var mappedClasslList = GetClass();
serviceModel.Class = new SelectList(mappedClasslList, "ID", "NAME");
var mappedChannelList = GetChannel();
serviceModel.Channel = new SelectList(mappedChannelList, "ID", "NAME");
}
//function servise list model
private void InitSelectList(ref ServiceListModel serviceList)
{
var mappedCategoriesList = GetCategories();
serviceList.Categories = new SelectList(mappedCategoriesList, "ID", "Name");
var mappedLevelList = GetLevel();
serviceList.Level = new SelectList(mappedLevelList, "ID", "Name");
var mappedChannelList = GetChannel();
serviceList.Channel = new SelectList(mappedChannelList, "ID", "Name");
var mappedUserlList = GetUser();
serviceList.UserType = new SelectList(mappedUserlList, "ID", "Name");
var mappedClassList = GetClass();
serviceList.Class = new SelectList(mappedClassList, "ID", "Name");
}
private IEnumerable<CATEGORIESmodel> GetCategories()
{
var categories = categorisInterface.ReadAll();
return mapper.Map<IEnumerable<CATEGORIESmodel>>(categories);
}
private IEnumerable<MATURITY_LEVELmodel> GetLevel()
{
var Levels = LEVELInterface.ReadAll();
return mapper.Map<IEnumerable<MATURITY_LEVELmodel>>(Levels);
}
private IEnumerable<CHANNELSmodel> GetChannel()
{
var Channels1 = channelsInterface.ReadAll();
return mapper.Map<IEnumerable<CHANNELSmodel>>(Channels1);
}
private IEnumerable<USER_TYPEmodel> GetUser()
{
var Users = userInterface.ReadAll();
return mapper.Map<IEnumerable<USER_TYPEmodel>>(Users);
}
private IEnumerable<CALSSIFICATIONmodel> GetClass()
{
var Classes = calssificationInterface.ReadAll();
return mapper.Map<IEnumerable<CALSSIFICATIONmodel>>(Classes);
}
// Function save file
private string SaveManualFile(HttpPostedFileBase MANUALfile, string currentFile = "")
{
if (MANUALfile != null)
{
var fileExtenstion = Path.GetExtension(MANUALfile.FileName);
var imageGuid = Guid.NewGuid().ToString();
string imageId = imageGuid + fileExtenstion;
// Save new file
string filePath = Server.MapPath($"~/Upload/{imageId}");
MANUALfile.SaveAs(filePath);
// Delete old file - update action
if (!string.IsNullOrEmpty(currentFile))
{
string oldFilePath = Server.MapPath($"~/Upload/{currentFile}");
System.IO.File.Delete(oldFilePath);
}
return imageId;
}
return currentFile;
}
}
型号:
public class SERVICESmodel
{
public int ID { get; set; }
[Required]
public int CAT_ID { get; set; }
[Required]
[Display(Name = "Category")]
public string catName { get; set; }
[Required]
public int TYP_ID { get; set; }
[Required]
[Display(Name = "User")]
public string typName { get; set; }
[Required]
public int CLASS_ID { get; set; }
[Required]
[Display(Name = "CLASS")]
public string ClassName { get; set; }
[Required]
public int LEVEL_ID { get; set; }
[Required]
[Display(Name = "LEVEL")]
public string levelName { get; set; }
[Required]
public int CHANNEL_ID { get; set; }
[Required]
[Display(Name = "CHANNE")]
public string channelName { get; set; }
[Required]
[Display(Name = "NAME")]
public string NAME { get; set; }
[Required]
[Display(Name = "DESC")]
public string DESC { get; set; }
public bool SRVC_FEES { get; set; }
[Url(ErrorMessage = "Please, enter correct url!")]
public string SRVC_LINK { get; set; }
public bool SRVC_STS { get; set; }
public System.DateTime CREATED_DATE { get; set; }
public System.DateTime MODIFY_DATE { get; set; }
public string MANUAL { get; set; }
public HttpPostedFileBase MANUALfile { get; set; }
public SelectList Categories { get; set; }
public SelectList UserType { get; set; }
public SelectList Level { get; set; }
public SelectList Channel { get; set; }
public SelectList Class { get; set; }
}
public class ServiceListModel
{
public IEnumerable<SERVICESmodel> SERVICEs { get; set; }
public string Query { get; set; }
[Display(Name = "Category")]
public int CATID { get; set; }
[Display(Name = "User")]
public int TYPID { get; set; }
[Display(Name = "CLASS")]
public int CLASSID { get; set; }
[Display(Name = "LEVEL")]
public int LEVELID { get; set; }
[Display(Name = "CHANNEL")]
public int CHANNELID { get; set; }
public SelectList Categories { get; set; }
public SelectList UserType { get; set; }
public SelectList Class { get; set; }
public SelectList Level { get; set; }
public SelectList Channel { get; set; }
}
自动映射器:
public static class AutoMapperConfig
{
public static IMapper Mapper { get; private set; }
public static void Init()
{
var config = new MapperConfiguration(cfg =>
{
//category mapper
cfg.CreateMap<CATEGORy, CATEGORIESmodel>()
.ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
.ForMember(dst => dst.NAME, src => src.MapFrom(e => e.CAT_NAME))
.ReverseMap();
// classification mapper
cfg.CreateMap<CALSSIFICATION, CALSSIFICATIONmodel>()
.ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
.ForMember(dst => dst.NAME, src => src.MapFrom(e => e.CLASS_NAME))
.ReverseMap();
//channel mapper
cfg.CreateMap<CHANNEL, CHANNELSmodel>()
.ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
.ForMember(dst => dst.NAME, src => src.MapFrom(e => e.CHANNEL_NAME))
.ReverseMap();
//MATURITY_LEVEL mapper
cfg.CreateMap<MATURITY_LEVEL, MATURITY_LEVELmodel>()
.ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
.ForMember(dst => dst.NAME, src => src.MapFrom(e => e.LEVEL_NAME))
.ReverseMap();
//user_type mapper
cfg.CreateMap<USER_TYPE, USER_TYPEmodel>()
.ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
.ForMember(dst => dst.NAME, src => src.MapFrom(e => e.TYP_NAME))
.ReverseMap();
// Services mapper
cfg.CreateMap<SERVICE_ALL, SERVICESmodel>()
.ForMember(dst => dst.ID, src => src.MapFrom(e => e.ID))
.ForMember(dst => dst.catName, src => src.MapFrom(e => e.CATEGORy.CAT_NAME))
.ForMember(dst => dst.typName, src => src.MapFrom(e => e.USER_TYPE.TYP_NAME))
.ForMember(dst => dst.levelName, src => src.MapFrom(e => e.MATURITY_LEVEL.LEVEL_NAME))
.ForMember(dst => dst.ClassName, src => src.MapFrom(e => e.CALSSIFICATION.CLASS_NAME))
.ForMember(dst => dst.channelName, src => src.MapFrom(e => e.CHANNEL.CHANNEL_NAME))
.ForMember(dst => dst.NAME, src => src.MapFrom(e => e.SRVC_NAME))
.ForMember(dst => dst.DESC, src => src.MapFrom(e => e.SRVC_DESC))
.ReverseMap();
});
Mapper = config.CreateMapper();
}
}
服务接口:
public interface IServices1
{
int Create(SERVICE_ALL service);
List<SERVICE_ALL> ReadAll
(string query = null,
int ? CATID = null,
int? TYPID = null,
int? CLASSID= null,
int? LEVELID = null , int? CHANNELID =null);
SERVICE_ALL Get(int Id);
}
public class Services1 : IServices1
{
private readonly EservicesEntities1 db;
public Services1()
{
db = new EservicesEntities1();
}
public int Create(SERVICE_ALL service)
{
service.CREATED_DATE = DateTime.Now;
db.SERVICE_ALL.Add(service);
return db.SaveChanges();
}
public SERVICE_ALL Get(int Id)
{
return db.SERVICE_ALL.Find(Id);
}
public List<SERVICE_ALL> ReadAll(string query = null,
int? CATID = null,
int? TYPID = null,
int? CLASSID = null,
int? LEVELID = null
,int? CHANNELID = null)
{
return db.SERVICE_ALL.Where(c =>(CATID == null || c.CAT_ID == CATID)
&& (TYPID == null || c.TYP_ID == TYPID)
&&(CLASSID == null || c.CLASS_ID == CLASSID)
&&(LEVELID == null || c.LEVEL_ID == LEVELID)
&&(CHANNELID == null || c.CHANNEL_ID == CHANNELID)
&& (query == null || c.SRVC_NAME.Contains(query))).ToList();
}
}