我一直在摆弄和尝试多种事情,但我在某个地方出错了。我尝试尽可能简单地使用 AutoMapper。我正在尝试使用 CreateBrandViewModel 创建一个新品牌并将其保存到数据库中。其中一些可能看起来有点果味,但我试图让它以最简单的方式工作。
领域:
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");
}