我试图使用与AutoMapper嵌套映射,使用映射器的实例版本 - 但它似乎并不奏效。
这里有两种模式我使用:
public class User
{
[Key]
public string Email { get; set; }
public string Hash { get; set; }
public string Salt { get; set; }
public string Name { get; set; }
public virtual ICollection<TaskTime> TaskTimes { get; set; }
public virtual ICollection<Role> Roles { get; set; }
public virtual ICollection<HistoricalEstimation> HistoricalEstimations { get; set; }
}
public class TaskTime
{
public int Id { get; set; }
public User User { get; set; }
public Task Task { get; set; }
public TimeSpan Duration { get; set; }
public DateTime Date { get; set; }
}
而我使用此代码映射它们:
public static class UserViewConfiguration
{
private static ConfigurationStore configuration;
public static MappingEngine Engine { get; private set; }
static UserViewConfiguration()
{
configuration = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.AllMappers());
Engine = new MappingEngine(configuration);
configuration.CreateMap<User, UserFull>();
configuration.CreateMap<TaskTime, UserTaskTime>();
/* snip... */
configuration.AssertConfigurationIsValid();
}
}
到这些的ViewModels:
public class UserFull
{
public string Email { get; set; }
public string Name { get; set; }
public virtual ICollection<TaskTime> TaskTimes { get; set; }
}
public class UserTaskTime
{
public int Id { get; set; }
public Task Task { get; set; }
public TimeSpan Duration { get; set; }
public DateTime Date { get; set; }
}
问题是,一个User
包含TaskTime
和TaskTime
包含一个User
。 这个周期需要,因为有越来越到每个项目,具体取决于哪个对象您最初要求(这就是为什么我使用AutoMapper的实例版本)的几种不同的方式存在。 我序列化这些通过ASP.NET MVC应用程序的API送他们,所以周期是一个大问题。
我读过使用嵌套映射与AutoMapper的这个例子 ,从我可以告诉我这样做是正确的。 但上面的映射,我得到一个自引用循环误差User
的路径[0].TaskTimes[0].User.TaskTimes
。 如果我注释掉TaskTimes
财产UserFull
,我没有得到一个错误,所以我知道的User->UserFull
测绘工作-但由于某些原因, TaskTime->UserTaskTime
不工作。
我能做什么?
编辑:我这样的映射:
// GET api/Users
public IEnumerable<UserFull> GetUsers()
{
//var query = SelectUsers(db.Users.ToList());
return UserViewConfiguration.Engine.Map<IEnumerable<UserFull>>(db.Users);
}