我建立一个ASP.NET MVC应用程序,有一些问题与数据处理。
我的一个动作是这样的:
public ActionResult Register(int categoryId, int? filterId)
这一行动将instansiate在这种情况下,这意味着要加载自定义视图模型与DB(实体框架)数据对象的登记表,并发送它到强类型的视图。
要翻译模块对象视图对象我使用AutoMapper
当用户修改了数据,并点击提交的跟随着动作将被触发。
[CustomAuthorize(Roles = SiteRoles.Admin)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(ModelViewRegisterFilter filter)
此操作将运行以下代码:
if(filter.EditingFilter.Id > 0)
adCategoryFilter = Mapper.Map<RegisterFilterItem, AdCategoryFilter>(filter.EditingFilter, filterModel.GetFilter(filter.EditingFilter.Id));
else
adCategoryFilter = Mapper.Map<RegisterFilterItem, AdCategoryFilter>(filter.EditingFilter);
adCategoryFilter是Model(db)中的一个类。完成后,保存实体模型对象(adCategoryFilter)应该没有任何问题。
问题1 我在数据库表中有一个字段,其中包含DisplayCheckBox,它的类型为nullable tinyint。为了表示这个,我在视图对象中创建了一个可为空的布尔值。当使用AutoMapper从模型到模型视图翻译我得到以下异常:
试图System.Byte映射到 System.Nullable`1 [[System.Boolean, mscorlib程序,版本= 4.0。 0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]]。 使用对 Biss.Models.Model.AdCategoryFilter映射配置到 Biss.Views.ViewClasses.RegisterFilterItem 目的地属性:DisplayCheckBox 异常 类型的 'AutoMapper.AutoMapperMappingException' 被抛出。
我已经cheked模型类的生成的属性和它看起来像这样:
Nullable<global::System.Byte>
问题2 当表单提交从表单的视图模型对象将被填充数据。如果有一个文本框的值为“”(string.empty),那么该字符串将被设置为null。
表示此文本框的db字段的类型为nchar(100),它由实体框架生成为字符串。问题是,automapper会尝试将空值设置为模型对象上的DisplayTextBox属性,并且会抛出以下异常:
此属性不能设置为空值。
请指教。
其实,你对Automapper点不正确。他所需要做的就是在调用Map之前调用CreateMap。 –
rboarman
2010-12-13 22:30:11
这很奇怪。我在整个地方都使用了AM,而不必做任何特别的事情。 – rboarman 2010-12-13 23:25:18
这产生了新的问题1 =如果我使用绑定属性会排除一些属性,当使用AutoMapper将ViewObject映射到DataModelObject时,这将如何工作?我认为来自db(DataModelObject)的“真实”数据将被替换为ViewObject的未设置属性? – Banshee 2010-12-14 08:28:24