我一直在摆弄并尝试多种方法,但我在某个地方出错了。我试图尽可能简单地使用AutoMapper。我正在尝试使用CreateBrandViewModel创建一个新的Brand并将其保存到数据库中。其中一些可能看起来有点果味,但我试图以最简单的方式让它工作。
域:
public class Brand : EntityBase
{
public virtual string Name { get; set; } //Not Nullable
public virtual bool IsActive { get; set; } // Not Nullable
public virtual Product DefaultProduct { get; set; } // Nullable
public virtual IList<Product> Products { get; set; } // Nullable
}
视图模型:
public class CreateBrandViewModel
{
public string Name { get; set; }
public bool IsActive { get; set; }
}
控制器
这是我最近一直在玩的地方,所以现在看起来有点奇怪。注释掉的代码没有解决我的问题。
[HttpPost]
public ActionResult Create(CreateBrandViewModel createBrandViewModel)
{
if(ModelState.IsValid)
{
Mapper.CreateMap<Brand, CreateBrandViewModel>();
//.ForMember(
// dest => dest.Name,
// opt => opt.MapFrom(src => src.Name)
//)
//.ForMember(
// dest => dest.IsActive,
// opt => opt.MapFrom(src => src.IsActive)
//);
Mapper.Map<Brand, CreateBrandViewModel>(createBrandViewModel)
Session.SaveOrUpdate(createBrandViewModel);
return RedirectToAction("Index");
}
else
{
return View(createBrandViewModel);
}
}
仅为记录,BrandController继承自SessionController(Ayendes方式),并通过ActionFilter管理事务。虽然那我觉得有点无关紧要。我尝试了各种不同的方法,所以我有不同的错误信息 - 如果你能看看发生了什么,并告诉我你将如何期望使用它会很棒。
作为参考,我对Brand的流利的nhibernate映射:
public class BrandMap : ClassMap<Brand>
{
public BrandMap()
{
Id(x => x.Id);
Map(x => x.Name)
.Not.Nullable()
.Length(50);
Map(x => x.IsActive)
.Not.Nullable();
References(x => x.DefaultProduct);
HasMany(x => x.Products);
}
}
修改1
我刚刚尝试了以下代码,但在Session.SaveOrUpdate(updatedModel)上设置了一个断点,这些字段为null和false,当它们不应该是:
var brand = new Brand();
var updatedBrand = Mapper.Map<Brand, CreateBrandViewModel>(brand, createBrandViewModel);
Session.SaveOrUpdate(updatedBrand);
return RedirectToAction("Index");
}
答案 0 :(得分:2)
你似乎在从邮寄回程中错误地进行了映射。替代语法可能会有所帮助,请尝试:
// setup the viewmodel -> domain model map
// (this should ideally be done at initialisation time, rather than per request)
Mapper.CreateMap<CreateBrandViewModel, Brand>();
// create our new domain object
var domainModel = new Brand();
// map the domain type to the viewmodel
Mapper.Map(createBrandViewModel, domainModel);
// now saving the correct type to the db
Session.SaveOrUpdate(domainModel);
让我知道是否会破坏鸡蛋...或者只是在你脸上的鸡蛋: - )