C# 有没有办法用AutoMapper进行过滤?
晚上好 我目前正在寻找一种在将对象发送到我的存储库之前“过滤”对象的方法;也就是说,保留原始实例中的某些属性,同时忽略其他属性或使用默认值替换其他属性,具体取决于上下文。事实上,我相信这可能是一种替代所有DTO的方法,在这种情况下,类型转换是不必要的,同时保护我的应用程序不被“过度发布”,如上所述 换句话说,我要做的是替换:C# 有没有办法用AutoMapper进行过滤?,c#,properties,mapping,filtering,automapper,C#,Properties,Mapping,Filtering,Automapper,晚上好 我目前正在寻找一种在将对象发送到我的存储库之前“过滤”对象的方法;也就是说,保留原始实例中的某些属性,同时忽略其他属性或使用默认值替换其他属性,具体取决于上下文。事实上,我相信这可能是一种替代所有DTO的方法,在这种情况下,类型转换是不必要的,同时保护我的应用程序不被“过度发布”,如上所述 换句话说,我要做的是替换: public class UserRegistrationModel { public string FirstName { get; set; } pub
public class UserRegistrationModel {
public string FirstName { get; set; }
public string Gender { get; set; }
public string LastName { get; set; }
}
public class UserGenderEditModel {
public string Gender { get; set; }
}
public class User {
public string FirstName { get; set; }
public string Gender { get; set; }
public bool IsVIP { get; set; }
public string LastName { get; set; }
}
class Program {
static void Main(string[] args) {
Mapper.CreateMap<UserRegistrationModel, User>()
.ForMember(d => d.FirstName, o => o.MapFrom(s => s.FirstName))
.ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
.ForMember(d => d.IsVIP, o => o.UseValue(false))
.ForMember(d => d.LastName, o => o.MapFrom(s => s.LastName));
Mapper.CreateMap<UserGenderEditModel, User>()
.ForMember(d => d.FirstName, o => o.Ignore())
.ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
.ForMember(d => d.IsVIP, o => o.Ignore())
.ForMember(d => d.LastName, o => o.Ignore());
var user = Mapper.Map<UserRegistrationModel, User>(new UserRegistrationModel {
// filling properties
});
}
}
公共类用户注册模型{
公共字符串名{get;set;}
公共字符串{get;set;}
公共字符串LastName{get;set;}
}
公共类UserGenderEdit模型{
公共字符串{get;set;}
}
公共类用户{
公共字符串名{get;set;}
公共字符串{get;set;}
公共bool IsVIP{get;set;}
公共字符串LastName{get;set;}
}
班级计划{
静态void Main(字符串[]参数){
Mapper.CreateMap()
.ForMember(d=>d.FirstName,o=>o.MapFrom(s=>s.FirstName))
.ForMember(d=>d.Gender,o=>o.MapFrom(s=>s.Gender))
.ForMember(d=>d.IsVIP,o=>o.UseValue(false))
.ForMember(d=>d.LastName,o=>o.MapFrom(s=>s.LastName));
Mapper.CreateMap()
.ForMember(d=>d.FirstName,o=>o.Ignore())
.ForMember(d=>d.Gender,o=>o.MapFrom(s=>s.Gender))
.ForMember(d=>d.IsVIP,o=>o.Ignore())
.ForMember(d=>d.LastName,o=>o.Ignore());
var user=Mapper.Map(新用户注册模型{
//填充特性
});
}
}
用这样的东西(当然不行了!):
公共类用户{
公共字符串名{get;set;}
公共字符串{get;set;}
公共bool IsVIP{get;set;}
公共字符串LastName{get;set;}
}
班级计划{
静态void Main(字符串[]参数){
Mapper.CreateMap()
.ForMember(d=>d.FirstName,o=>o.MapFrom(s=>s.FirstName))
.ForMember(d=>d.Gender,o=>o.MapFrom(s=>s.Gender))
.ForMember(d=>d.IsVIP,o=>o.UseValue(false))
.ForMember(d=>d.LastName,o=>o.MapFrom(s=>s.LastName))
.ForContext(“用户注册”);//不真实。
Mapper.CreateMap()
.ForMember(d=>d.FirstName,o=>o.Ignore())
.ForMember(d=>d.Gender,o=>o.MapFrom(s=>s.Gender))
.ForMember(d=>d.IsVIP,o=>o.Ignore())
.ForMember(d=>d.LastName,o=>o.Ignore());
.ForContext(“UserGenderEdition”);//不真实。
var user=Mapper.Map(新用户{
//填充特性
},“UserRegistration”);//不真实。
}
}
那么,有没有一种方法可以完成这项工作(不一定是使用AutoMapper)
尽管如此,我并不是在寻找与MVC模型绑定机制直接相关的东西,因为我希望在web服务或控制台应用程序中重用它
谢谢 我不知道您为什么要这样做,但我认为最好的方法是使用多个子对象来满足您的需要 e、 g
公共类用户
{
公共虚拟字符串名
{
得到;
设置
}
公共虚拟字符串
{
得到;
设置
}
}
公共类UserGender:User
{
公共重写字符串名
{
得到
{
返回字符串。空;
}
设置
{
}
}
}
Mapper.CreateMap()
.ForMember(d=>d.FirstName,o=>o.Ignore())
.ForMember(d=>d.Gender,o=>o.MapFrom(s=>s.Gender));
您甚至可能不需要覆盖,只需使用不同的配置即可
public class User {
public string FirstName { get; set; }
public string Gender { get; set; }
public bool IsVIP { get; set; }
public string LastName { get; set; }
}
class Program {
static void Main(string[] args) {
Mapper.CreateMap<User, User>()
.ForMember(d => d.FirstName, o => o.MapFrom(s => s.FirstName))
.ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
.ForMember(d => d.IsVIP, o => o.UseValue(false))
.ForMember(d => d.LastName, o => o.MapFrom(s => s.LastName))
.ForContext("UserRegistration"); // not real.
Mapper.CreateMap<User, User>()
.ForMember(d => d.FirstName, o => o.Ignore())
.ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender))
.ForMember(d => d.IsVIP, o => o.Ignore())
.ForMember(d => d.LastName, o => o.Ignore());
.ForContext("UserGenderEdition"); // not real.
var user = Mapper.Map<User, User>(new User {
// filling properties
}, "UserRegistration"); // not real.
}
}
public class User
{
public virtual string Name
{
get;
set;
}
public virtual string Gender
{
get;
set;
}
}
public class UserGender : User
{
public override string Name
{
get
{
return string.Empty;
}
set
{
}
}
}
Mapper.CreateMap<User, UserGender>()
.ForMember(d => d.FirstName, o => o.Ignore())
.ForMember(d => d.Gender, o => o.MapFrom(s => s.Gender));