Asp.net mvc 3 如何将entityobject的数据注释获取到viewmodel对象,而不在viewmodel中再次提及它
我遇到了一个问题,我还必须在viewmodel上使用注释 例如,我的entityobject是designer类(teamworking.designer.cs)中的用户 假设我在User\u Name和User\u Password上写了数据注释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
[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();