我有一个使用EF的MVC 3应用程序。在我的用户登录时,我使用ajax对用户进行身份验证,我想返回一些我需要他们选择的内容。我有一个IEnumerable的ViewModelLogin。我使用AutoMapper从EF实体填充ViewModel,然后将ViewModel作为JSON返回。
[HttpPost]
public ActionResult Login(ViewModelLogin login)
{
Mapper.CreateMap<ViewModelLogin, User>()
.ForMember(dest => dest.Email, opt => opt.MapFrom(src => src.Email))
.ForMember(dest => dest.Password, opt => opt.MapFrom(src => src.Password));
var user = _userService.GetUser(Mapper.Map<ViewModelLogin, User>(login));
if (user != null && CreatePasswordHash(login.Password, user.Salt) == user.Password)
{
var ticket = new FormsAuthenticationTicket(1, login.Email, DateTime.Now, DateTime.Now.AddMinutes(20), false, "");
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
Response.Cookies.Add(cookie);
Mapper.CreateMap<User, ViewModelLogin>()
.ForMember(dest => dest.Things, opt => opt.MapFrom(src => src.Things))
.ForMember(dest => dest.Password, opt => opt.Ignore());
var returnLogin = Mapper.Map<User, ViewModelLogin>(user);
returnLogin.Success = true;
return Json(returnLogin);
}
return Json(new ViewModelLogin { Success = false, Message = "Test Message"});
}
当我这样做时,当序列化程序尝试将实体转换为JSON时出现错误。这个问题是一个循环依赖,因为该集合保留了EF的关系信息(在我的情况下是多对多的关系)除了手动执行它还有其他人解决了这个问题吗?
由于
答案 0 :(得分:0)
您应该从视图模型中删除循环依赖项,或者希望能够将其序列化为JSON。也不要在控制器中调用Mapper.CreateMap<TSource, TDest>
。理想情况下,此方法只应在Application_Start
中调用一次。