У меня есть DTO и ViewModel
У ботов есть то же свойство Price, что и у extact того же типа, например:
public Nullable<decimal> Price
{
get;
set;
}
В моем POST ActionResult при попытке сохранить в БД у меня есть ...
Mapper.CreateMap<ListingFormModel, Listing>()
var newListing = Mapper.Map<ListingFormModel, Listing>(m);
_listingRepository.Add(newListing);
Ошибка, которую я получаю:
Невозможно привести объект типа «System.Decimal» к типу «System.String».
Я только начинаю работать с automapper, буквально только сегодня, поэтому я озадачен, почему одни и те же типы не отображаются правильно ??? Проходя через документы по автомату, я вижу такие примеры:
.ForMember(dest => typeof(decimal?), src => src.ResolveUsing<MyDecimalResolver>());
Но не уверен, зачем мне делать распознаватель, если я что-то не делаю с самого начала? Есть предложения?
Полный код:
public class ListingFormModel
{
[Required]
public int ListingID
{
get;
set;
}
.....
[Required]
[RegularExpression("([0-9]+)", ErrorMessage="Asking Price must be numbers only. Example: For $125,000 enter 125000")] //for 0-inf or
[Display(Name = "Asking Price")]
[StringLength(10, ErrorMessage = "Asking Price must be numbers only and may not exceed 10 characters. Example: For $1,500,000 enter 1500000")]
public Nullable<decimal> Price
{
get;
set;
}
.....
в моем проекте xxxx.Common DTO / POCO:
пространство имен LOTW2012.Common
{
публичный частичный листинг класса
{
#region Примитивные свойства
public virtual int ListingID
{
get;
set;
}
......
public virtual Nullable<decimal> Price
{
get;
set;
}
.....
Тогда КОНТРОЛЛЕР в проекте xxxx.Web:
[HttpPost]
[ValidateAntiForgeryTokenWrapper(HttpVerbs.Post)]
public ActionResult Create(ListingFormModel m)
{
try
{
if (ModelState.IsValid && SecurityHelper.ReferrerIsValid)
{
Mapper.CreateMap<ListingFormModel, Listing>()
// .ForMember(dest => dest.Price, opt => opt.ResolveUsing<NullableDecimalResolver>());
var newListing = Mapper.Map<ListingFormModel, Listing>(m);
_listingRepository.Add(newListing);
return RedirectToAction("Index");
}
else
{
return View();
}
}
catch
{
return View();
}
}