C# 为什么即使AssertConfigurationValid通过,我的Automapper配置也不起作用?
我拥有以下实体:C# 为什么即使AssertConfigurationValid通过,我的Automapper配置也不起作用?,c#,automapper,C#,Automapper,我拥有以下实体: public class ContactDetailsJson { public string Zip { get; set; } public string Phone { get; set; } public string AreaCode { get; set; } public DateTime UpdatedDate { get; set; } public string SeoContactUrl { get; set; }
public class ContactDetailsJson
{
public string Zip { get; set; }
public string Phone { get; set; }
public string AreaCode { get; set; }
public DateTime UpdatedDate { get; set; }
public string SeoContactUrl { get; set; }
public string State { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string CompanyName { get; set; }
public string ContactUrl { get; set; }
public string Country { get; set; }
public bool Owned { get; set; }
public string City { get; set; }
public string Title { get; set; }
public string Email { get; set; }
public string Address { get; set; }
public string CompanyId { get; set; }
public string ContactId { get; set; }
}
public class ExternalContactSearchResultsViewModel
{
public int DisplayedPageNumber { get; set; }
public int TotalResultsCount { get; set; }
public int PageSize { get; set; }
public IList<ContactResultViewModel> Results { get; set; }
public class ContactResultViewModel
{
public string ContactId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Headline { get; set; }
public string Company { get; set; }
public string PublicUrl { get; set; }
public bool HasAccess { get; set; }
public DateTime LastUpdatedDate { get; set; }
}
}
公共类ContactDetailsJson
{
公共字符串Zip{get;set;}
公用字符串电话{get;set;}
公共字符串区域代码{get;set;}
公共日期时间更新日期{get;set;}
公共字符串SeoContactUrl{get;set;}
公共字符串状态{get;set;}
公共字符串LastName{get;set;}
公共字符串名{get;set;}
公共字符串CompanyName{get;set;}
公共字符串ContactUrl{get;set;}
公共字符串国家{get;set;}
公共布尔拥有{get;set;}
公共字符串City{get;set;}
公共字符串标题{get;set;}
公共字符串电子邮件{get;set;}
公共字符串地址{get;set;}
公共字符串CompanyId{get;set;}
公共字符串ContactId{get;set;}
}
公共类ExternalContactSearchResultsViewModel
{
public int DisplayedPageNumber{get;set;}
公共int TotalResultCount{get;set;}
公共int PageSize{get;set;}
公共IList结果{get;set;}
公共类ContactResultViewModel
{
公共字符串ContactId{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串标题{get;set;}
公共字符串公司{get;set;}
公共字符串PublicUrl{get;set;}
公共bool HasAccess{get;set;}
公共日期时间LastUpdateDate{get;set;}
}
}
为了支持转换,我创建了以下映射,我已验证这些映射正在运行:
Mapper.CreateMap<ContactDetailsJson, ExternalContactSearchResultsViewModel.ContactResultViewModel>()
.ForMember(dest => dest.Company, opt => opt.MapFrom(src => src.CompanyName))
.ForMember(dest => dest.ContactId, opt => opt.MapFrom(src => src.ContactId))
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.FirstName))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.LastName))
.ForMember(dest => dest.HasAccess, opt => opt.MapFrom(src => src.Owned))
.ForMember(dest => dest.Headline, opt => opt.MapFrom(src => src.Title))
.ForMember(dest => dest.LastUpdatedDate, opt => opt.MapFrom(src => src.UpdatedDate))
.ForMember(dest => dest.PublicUrl, opt => opt.Ignore());
Mapper.CreateMap()
.ForMember(dest=>dest.Company,opt=>opt.MapFrom(src=>src.CompanyName))
.FormMember(dest=>dest.ContactId,opt=>opt.MapFrom(src=>src.ContactId))
.ForMember(dest=>dest.FirstName,opt=>opt.MapFrom(src=>src.FirstName))
.ForMember(dest=>dest.LastName,opt=>opt.MapFrom(src=>src.LastName))
.ForMember(dest=>dest.HasAccess,opt=>opt.MapFrom(src=>src.Owned))
.ForMember(dest=>dest.Headline,opt=>opt.MapFrom(src=>src.Title))
.FormMember(dest=>dest.lastUpdateDate,opt=>opt.MapFrom(src=>src.UpdateDate))
.ForMember(dest=>dest.PublicUrl,opt=>opt.Ignore());
不幸的是,这种映射导致所有属性都为null(或默认值),这可以从下面的单元测试中看出
[TestMethod]
public void Automapper_Contact_Details_Json_Can_Be_Mapped()
{
// Setup
EntityMapLoader.LoadEntityMappings();
DateTime testDate = DateTime.Now;
var json = new ContactDetailsJson
{
CompanyName = "company",
ContactId = "12345",
FirstName = "first",
LastName = "last",
Owned = true,
Title = "title",
UpdatedDate = testDate
};
// Act
var result = Mapper.Map<ContactDetailsJson, ExternalContactSearchResultsViewModel.ContactResultViewModel>(json);
// Verify
Assert.IsNotNull(result, "result was null");
Assert.AreEqual("company", result.Company);
Assert.AreEqual("12345", result.ContactId);
Assert.AreEqual("first", result.FirstName);
Assert.AreEqual("last", result.LastName);
Assert.AreEqual(true, result.HasAccess);
Assert.AreEqual("title", result.Headline);
Assert.AreEqual(testDate, result.LastUpdatedDate);
}
[TestMethod]
public void Automapper\u Contact\u Details\u Json\u Can\u Be\u Mapped()
{
//设置
LoadEntityMappings();
DateTime testDate=DateTime.Now;
var json=new ContactDetailsJson
{
CompanyName=“公司”,
ContactId=“12345”,
FirstName=“first”,
LastName=“last”,
拥有=真实,
Title=“Title”,
updateDate=testDate
};
//表演
var result=Mapper.Map(json);
//核实
IsNotNull(结果,“结果为null”);
断言.平等(“公司”,结果.公司);
Assert.AreEqual(“12345”,result.ContactId);
Assert.AreEqual(“first”,result.FirstName);
Assert.AreEqual(“last”,result.LastName);
aresequal(true,result.HasAccess);
Assert.AreEqual(“标题”,result.Headline);
AreEqual(testDate、result.lastUpdateDate);
}
我想不出是怎么回事。其他人看到什么了吗?我试过这个,它对我很有效,我认为在加载映射或检查是否使用最新版本的automapper时出现了问题
[TestFixture]
public class UnitTest
{
[Test]
public void Automapper_Contact_Details_Json_Can_Be_Mapped()
{
// Setup
DateTime testDate = DateTime.Now;
var json = new ContactDetailsJson
{
CompanyName = "company",
ContactId = "12345",
FirstName = "first",
LastName = "last",
Owned = true,
Title = "title",
UpdatedDate = testDate
};
Mapper.CreateMap<ContactDetailsJson, ExternalContactSearchResultsViewModel.ContactResultViewModel>()
.ForMember(dest => dest.Company, opt => opt.MapFrom(src => src.CompanyName))
.ForMember(dest => dest.ContactId, opt => opt.MapFrom(src => src.ContactId))
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.FirstName))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.LastName))
.ForMember(dest => dest.HasAccess, opt => opt.MapFrom(src => src.Owned))
.ForMember(dest => dest.Headline, opt => opt.MapFrom(src => src.Title))
.ForMember(dest => dest.LastUpdatedDate, opt => opt.MapFrom(src => src.UpdatedDate))
.ForMember(dest => dest.PublicUrl, opt => opt.Ignore());
// Act
var result = Mapper.Map<ContactDetailsJson, ExternalContactSearchResultsViewModel.ContactResultViewModel>(json);
// Verify
Assert.IsNotNull(result, "result was null");
Assert.AreEqual("company", result.Company);
Assert.AreEqual("12345", result.ContactId);
Assert.AreEqual("first", result.FirstName);
Assert.AreEqual("last", result.LastName);
Assert.AreEqual(true, result.HasAccess);
Assert.AreEqual("title", result.Headline);
Assert.AreEqual(testDate, result.LastUpdatedDate);
}
}
[TestFixture]
公共类单元测试
{
[测试]
public void Automapper\u Contact\u Details\u Json\u Can\u Be\u Mapped()
{
//设置
DateTime testDate=DateTime.Now;
var json=new ContactDetailsJson
{
CompanyName=“公司”,
ContactId=“12345”,
FirstName=“first”,
LastName=“last”,
拥有=真实,
Title=“Title”,
updateDate=testDate
};
Mapper.CreateMap()
.ForMember(dest=>dest.Company,opt=>opt.MapFrom(src=>src.CompanyName))
.FormMember(dest=>dest.ContactId,opt=>opt.MapFrom(src=>src.ContactId))
.ForMember(dest=>dest.FirstName,opt=>opt.MapFrom(src=>src.FirstName))
.ForMember(dest=>dest.LastName,opt=>opt.MapFrom(src=>src.LastName))
.ForMember(dest=>dest.HasAccess,opt=>opt.MapFrom(src=>src.Owned))
.ForMember(dest=>dest.Headline,opt=>opt.MapFrom(src=>src.Title))
.FormMember(dest=>dest.lastUpdateDate,opt=>opt.MapFrom(src=>src.UpdateDate))
.ForMember(dest=>dest.PublicUrl,opt=>opt.Ignore());
//表演
var result=Mapper.Map(json);
//核实
IsNotNull(结果,“结果为null”);
断言.平等(“公司”,结果.公司);
Assert.AreEqual(“12345”,result.ContactId);
Assert.AreEqual(“first”,result.FirstName);
Assert.AreEqual(“last”,result.LastName);
aresequal(true,result.HasAccess);
Assert.AreEqual(“标题”,result.Headline);
AreEqual(testDate、result.lastUpdateDate);
}
}
我尝试了这个方法,它对我很有效,我认为在加载映射或检查是否使用最新版本的automapper时出现了问题
[TestFixture]
public class UnitTest
{
[Test]
public void Automapper_Contact_Details_Json_Can_Be_Mapped()
{
// Setup
DateTime testDate = DateTime.Now;
var json = new ContactDetailsJson
{
CompanyName = "company",
ContactId = "12345",
FirstName = "first",
LastName = "last",
Owned = true,
Title = "title",
UpdatedDate = testDate
};
Mapper.CreateMap<ContactDetailsJson, ExternalContactSearchResultsViewModel.ContactResultViewModel>()
.ForMember(dest => dest.Company, opt => opt.MapFrom(src => src.CompanyName))
.ForMember(dest => dest.ContactId, opt => opt.MapFrom(src => src.ContactId))
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.FirstName))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.LastName))
.ForMember(dest => dest.HasAccess, opt => opt.MapFrom(src => src.Owned))
.ForMember(dest => dest.Headline, opt => opt.MapFrom(src => src.Title))
.ForMember(dest => dest.LastUpdatedDate, opt => opt.MapFrom(src => src.UpdatedDate))
.ForMember(dest => dest.PublicUrl, opt => opt.Ignore());
// Act
var result = Mapper.Map<ContactDetailsJson, ExternalContactSearchResultsViewModel.ContactResultViewModel>(json);
// Verify
Assert.IsNotNull(result, "result was null");
Assert.AreEqual("company", result.Company);
Assert.AreEqual("12345", result.ContactId);
Assert.AreEqual("first", result.FirstName);
Assert.AreEqual("last", result.LastName);
Assert.AreEqual(true, result.HasAccess);
Assert.AreEqual("title", result.Headline);
Assert.AreEqual(testDate, result.LastUpdatedDate);
}
}
[TestFixture]
公共类单元测试
{
[测试]
public void Automapper\u Contact\u Details\u Json\u Can\u Be\u Mapped()
{
//设置
DateTime testDate=DateTime.Now;
var json=new ContactDetailsJson
{
CompanyName=“公司”,
ContactId=“12345”,
FirstName=“first”,
LastName=“last”,
拥有=真实,
Title=“Title”,