2011-12-22 24 views
1

再次提到這一點,我一直堅持在那裏我有我的視圖模型使用註釋的問題也如何獲得entityobject的數據註解視圖模型對象,而在視圖模型

例如我entityobject是用戶在設計師類(Teamwork.Designer.cs)

假設我有寫在了User_Name和USER_PASSWORD數據註解

[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.Int32 User_Pk 
    { 
     get 
     { 
      return _User_Pk; 
     } 
     set 
     { 
      if (_User_Pk != value) 
      { 
       OnUser_PkChanging(value); 
       ReportPropertyChanging("User_Pk"); 
       _User_Pk = StructuralObject.SetValidValue(value); 
       ReportPropertyChanged("User_Pk"); 
       OnUser_PkChanged(); 
      } 
     } 
    } 
    private global::System.Int32 _User_Pk; 
    partial void OnUser_PkChanging(global::System.Int32 value); 
    partial void OnUser_PkChanged(); 


    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    [Required(ErrorMessage="Please enter your name")] 
    [StringLength(20,ErrorMessage="Name cannot exceed 20 characters")] 
    [RegularExpression(@"^([a-zA-Z0-9 \.\&\'\-]+)$", ErrorMessage = "Invalid name")] 
    public global::System.String User_Name 
    { 
     get 
     { 
      return _User_Name; 
     } 
     set 
     { 
      OnUser_NameChanging(value); 
      ReportPropertyChanging("User_Name"); 
      _User_Name = StructuralObject.SetValidValue(value, false); 
      ReportPropertyChanged("User_Name"); 
      OnUser_NameChanged(); 
     } 
    } 
    private global::System.String _User_Name; 
    partial void OnUser_NameChanging(global::System.String value); 
    partial void OnUser_NameChanged(); 


    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    [Email(ErrorMessage="Invalid email address")] 
    [Required(ErrorMessage="Please enter email address")] 
    public global::System.String User_Mail_Id 
    { 
     get 
     { 
      return _User_Mail_Id; 
     } 
     set 
     { 
      OnUser_Mail_IdChanging(value); 
      ReportPropertyChanging("User_Mail_Id"); 
      _User_Mail_Id = StructuralObject.SetValidValue(value, false); 
      ReportPropertyChanged("User_Mail_Id"); 
      OnUser_Mail_IdChanged(); 
     } 
    } 
    private global::System.String _User_Mail_Id; 
    partial void OnUser_Mail_IdChanging(global::System.String value); 
    partial void OnUser_Mail_IdChanged(); 


    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    [Required(ErrorMessage="Please enter password")] 
    [StringLength(20,ErrorMessage="Password cannot exceed 20 characters")] 
    [RegularExpression(@"^([a-zA-Z0-9 \.\&\'\-]+)$", ErrorMessage = "Invalid password")] 
    public global::System.String User_Password 
    { 
     get 
     { 
      return _User_Password; 
     } 
     set 
     { 
      OnUser_PasswordChanging(value); 
      ReportPropertyChanging("User_Password"); 
      _User_Password = StructuralObject.SetValidValue(value, false); 
      ReportPropertyChanged("User_Password"); 
      OnUser_PasswordChanged(); 
     } 
    } 
    private global::System.String _User_Password; 
    partial void OnUser_PasswordChanging(global::System.String value); 
    partial void OnUser_PasswordChanged(); 


    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.DateTime User_Creation_Date 
    { 
     get 
     { 
      return _User_Creation_Date; 
     } 
     set 
     { 
      OnUser_Creation_DateChanging(value); 
      ReportPropertyChanging("User_Creation_Date"); 
      _User_Creation_Date = StructuralObject.SetValidValue(value); 
      ReportPropertyChanged("User_Creation_Date"); 
      OnUser_Creation_DateChanged(); 
     } 
    } 
    private global::System.DateTime _User_Creation_Date; 
    partial void OnUser_Creation_DateChanging(global::System.DateTime value); 
    partial void OnUser_Creation_DateChanged(); 


    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.Boolean Is_Active 
    { 
     get 
     { 
      return _Is_Active; 
     } 
     set 
     { 
      OnIs_ActiveChanging(value); 
      ReportPropertyChanging("Is_Active"); 
      _Is_Active = StructuralObject.SetValidValue(value); 
      ReportPropertyChanged("Is_Active"); 
      OnIs_ActiveChanged(); 
     } 
    } 
    private global::System.Boolean _Is_Active; 
    partial void OnIs_ActiveChanging(global::System.Boolean value); 
    partial void OnIs_ActiveChanged(); 

    #endregion 

現在我已經創建了一個視圖模型用於上述用戶:EntityObject 與名稱註冊isterUserViewModel.cs如下

public class RegisterUserViewModel 
{ 
    public int UserId{get;set;} 
    public string UserName { get; set; } 
    public string UserEmail { get; set; } 
    public string UserPassword { get; set;} 
} 

該實體對象在名爲Teamwork.Data 單獨的文件夾中創建和文件夾中創建Teamwork.BusinessLogic

現在在我的控制器動作的視圖模型我稱的方法,其在Teamwork.Businesslogic定義如下

'

public ViewResult Register(string invite) 
    { 
      SignUpAndLogin signLog = new SignUpAndLogin(); 
      var model = signLog.GetRegisterModel(); 
      return View(model); 

    } 

SignUpLogin.cs是類第在包含了我所有的業務中,有GetRegisterModel如下

public RegisterUserViewModel GetRegisterModel() 
    { 
     AutoMapper.Mapper.CreateMap<User, RegisterUserViewModel>(); 
     User user = new User(); 
     RegisterUserViewModel model = AutoMapper.Mapper.Map<User,  RegisterUserViewModel>(user); 
     return model; 
    }' 

我制訂RegisterviewModel對象與用戶對象和IM將其返回到調用上面的方法操作的Teamwork.BusinessLogic文件夾相關的操作。(請任何人都可以說這映射的正確方法是什麼?)

我的問題是我必須在RegisterViewModel(即使映射?)像下面再提註釋的註釋工作

public class RegisterUserViewModel 
{ 
    public int UserId{get;set;} 
    [Required(ErrorMessage="Enter the Name")] 
    public string UserName { get; set; } 
    public string UserEmail { get; set; } 
    public string UserPassword { get; set;} 
} 

任何人可以請求我說我的地圖是正確與否,以及避免重複數據註解視圖模型

這個問題很長,可能是愚蠢的..但這是我一直面臨的問題現在2天... 任何人都可以幫助

回答

2

我不認爲你應該用你的自定義代碼編輯Teamwork.Designer.cs。例如,如果更改數據庫並重新生成Teamwork.edmx,那麼該文件很可能會被覆蓋。

只需將數據註釋添加到您的視圖模型。

Automapper映射似乎會給你一個錯誤,因爲屬性名稱在源和目標對象之間是不同的。

Mapper.CreateMap<User, RegisterUserViewModel>() 
.ForMember(destinationMember => destinationMember.UserName, memberOptions => memberOptions.MapFrom(sourceMember => sourceMember.User_Name) 
.ForMember(destinationMember => destinationMember.UserPassword, memberOptions => memberOptions.MapFrom(sourceMember => sourceMember.User_Password) 
.ForMember(destinationMember => destinationMember.UserEmail, memberOptions => memberOptions.MapFrom(sourceMember => sourceMember.User_Mail_Id) 
.ForMember(destinationMember => destinationMember.UserId, memberOptions => memberOptions.MapFrom(sourceMember => sourceMember.User_Pk); 
Mapper.AssertConfigurationIsValid(); 
+0

謝謝拉米你給了我一個有價值的信息....你已經給出了一個清晰的想法如何使用Automapper ..也很多 – bhargav 2011-12-29 14:31:25