Asp.net mvc 3 如何将entityobject的数据注释获取到viewmodel对象,而不在viewmodel中再次提及它

Asp.net mvc 3 如何将entityobject的数据注释获取到viewmodel对象,而不在viewmodel中再次提及它,asp.net-mvc-3,viewmodel,automapper,Asp.net Mvc 3,Viewmodel,Automapper,我遇到了一个问题,我还必须在viewmodel上使用注释 例如,我的entityobject是designer类(teamworking.designer.cs)中的用户 假设我在User\u Name和User\u Password上写了数据注释 [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)] [DataMemberAttribute()] public global::System

我遇到了一个问题,我还必须在viewmodel上使用注释

例如,我的entityobject是designer类(teamworking.designer.cs)中的用户

假设我在User\u Name和User\u 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
现在我已经为上面的用户创建了一个viewmodel:EntityObject 名称为registerUserModel.cs,如下所示

 public class RegisterUserViewModel
 {
   public int UserId{get;set;}
   public string UserName { get; set; }
   public string UserEmail { get; set; }
   public string UserPassword { get; set;}
 }
实体对象在名为teaching.Data的单独文件夹中创建 以及在文件夹team.BusinessLogic中创建的viewmodel

现在,在我的控制器操作中,我调用了一个在teamworking.Businesslogic中定义的方法,如下所示

"

SignUpLogin.cs是包含Team.BusinessLogic文件夹中所有与我的业务相关的操作的类,该文件夹包含GetRegisterModel,如下所示

  public RegisterUserViewModel GetRegisterModel()
    {
        AutoMapper.Mapper.CreateMap<User, RegisterUserViewModel>();
        User user = new User();
        RegisterUserViewModel model = AutoMapper.Mapper.Map<User,      RegisterUserViewModel>(user);
        return model;
    }'
有人能告诉我我的映射是否正确吗?有没有避免视图模型中重复数据注释的方法

这个问题很长,可能很愚蠢……但这是我两天来一直面临的问题。。。
有人能帮忙吗

我认为你不应该用你的自定义代码编辑teamworking.Designer.cs。例如,如果您对数据库进行更改,然后重新生成Team.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();
Mapper.CreateMap()
.ForMember(destinationMember=>destinationMember.UserName,memberOptions=>memberOptions.MapFrom(sourceMember=>sourceMember.User\u Name)
.ForMember(destinationMember=>destinationMember.UserPassword,memberOptions=>memberOptions.MapFrom(sourceMember=>sourceMember.User\u Password)
.FormMember(destinationMember=>destinationMember.UserEmail,memberOptions=>memberOptions.MapFrom(sourceMember=>sourceMember.User\u Mail\u Id)
.ForMember(destinationMember=>destinationMember.UserId,memberOptions=>memberOptions.MapFrom(sourceMember=>sourceMember.User_Pk);
assertConfigurationsValid();

谢谢Rami,你给了我一个有价值的信息……你也清楚地知道如何使用Automapper。非常感谢
 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;}
 }
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();