我建立一個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