Ter*_*ato 3 c# asp.net-mvc entity-framework automapper asp.net-mvc-5
规格: .NET 4.5.1 - MVC 5.2.2 - EF 6.0 - AutoMapper 3.2.1
我第一次遇到Proxy对象错误但是能够通过执行以下操作来解决它:AutoMapper 3.1.1和Entity Framework 6.1 Proxy对象
一旦我修复了该错误,我立即收到以下错误消息:
出于某种原因,它表示从Pages到PagesViewModel的地图不存在,即使它确实存在.这是我的代码:
在Global.asax.cs中:
protected void Application_Start()
{
ConfigureAutomapper.Configure();
....
Run Code Online (Sandbox Code Playgroud)
在AutoMapper.cs(更新)
public static class ConfigureAutomapper
{
public static void Configure()
{
ConfigurePublications();
ConfigureBlog();
ConfigureBasic();
ConfigureLists();
}
public static void ConfigurePublications()
{
Mapper.Initialize(x =>
{
x.AddProfile<PublicationsMappings>();
});
}
public static void ConfigureBlog()
{
Mapper.Initialize(x =>
{
x.AddProfile<BlogMappings>();
});
}
public static void ConfigureBasic()
{
Mapper.Initialize(x =>
{
x.AddProfile<BasicMappings>();
});
}
public static void ConfigureLists()
{
Mapper.Initialize(x =>
{
x.AddProfile<ListMappings>();
});
}
}
Run Code Online (Sandbox Code Playgroud)
...
public class BasicMappings : Profile
{
public override string ProfileName
{
get
{
return "BasicMappings";
}
}
protected override void Configure()
{
Mapper.CreateMap<Pages, PagesViewModel>();
Mapper.CreateMap<PagesViewModel, Pages>();
...
Run Code Online (Sandbox Code Playgroud)
我已经跟踪它,它进入并创建了地图.当它使用转换时,它不起作用.
对于model和viewModel,所有变量名都是相同的.我只添加了数据注释和一些清理类set { pageDescription = value.StringSanitizer(); }
声明链接对象/表时会出现差异:
模型:
public virtual PageType PageTypes { get; set; }
public virtual SiteMap SiteMap { get; set; }
public virtual ICollection<Rows> Row { get; set; }
public virtual Track Tracks { get; set; }
Run Code Online (Sandbox Code Playgroud)
而我的ViewModel:
public PageTypeViewModel PageTypes { get; set; }
public SiteMapViewModel SiteMap { get; set; }
public ICollection<RowsViewModel> Row { get; set; }
public TrackViewModel Tracks { get; set; }
Run Code Online (Sandbox Code Playgroud)
连接到这些模型的viewModels.所有这些都映射到AutoMapper.cs中
更新: 我已经在项目中进行了单元测试:
[TestMethod]
public void AutoMapper_Basic_Configuration_IsValid()
{
//Arrange
//Act
ConfigureAutomapper.ConfigureBasic();
//Assert
Mapper.AssertConfigurationIsValid();
}
Run Code Online (Sandbox Code Playgroud)
它通过了所有测试,没有映射错误.
谁能给我一些关于这个问题的见解?如果您需要更多信息,请与我们联系.谢谢!
而不是Mapper.CreateMap<Pages, PagesViewModel>();,使用CreateMap<Pages, PagesViewModel>();.
protected override void Configure()
{
CreateMap<Pages, PagesViewModel>();
CreateMap<PagesViewModel, Pages>();
...
Run Code Online (Sandbox Code Playgroud)
内部配置文件,您需要参考的实例Mapper是this.CreateMap或干脆CreateMap.
更新 更新我的答案,以便未来的读者不必趟过评论来找出问题.
问题是多次调用Mapper.Initialize.每个新调用都将清除先前的初始化.解决方法是进行一次初始化调用并在其中添加所有配置文件.
| 归档时间: |
|
| 查看次数: |
6312 次 |
| 最近记录: |