值的映射不起作用

时间:2015-05-14 11:03:53

标签: c# asp.net automapper asp.net-web-api2

我正在尝试按照此book创建Web API。我到了第5章的末尾,当我发送一个应该在那时工作的POST请求时,我收到HTTP 500错误。我发送以下请求:

POST http://localhost:1424/api/v1/tasks HTTP/1.1
User-Agent: Fiddler
Content-Type: text/json
Host: localhost:1424
Content-Length: 38
{"Subject": "Fix something important"}

我尝试在TasksController AddTask方法的开头调试一个设置断点:

public IHttpActionResult AddTask(HttpRequestMessage requestMessage, NewTask newTask)
        {
            var task = _addTaskMaintenanceProcessor.AddTask(newTask);
            var result = new TaskCreatedActionResult(requestMessage, task);
            return result;
        }

此时一切似乎都很好newTask.Subject ='修复重要的事情'。然后它进入AddTaskMaintenanceProcessor.AddTask:

public Task AddTask(NewTask newTask)
        {
            var taskEntity = _autoMapper.Map<Data.Entities.Task>(newTask);
            _queryProcessor.AddTask(taskEntity);
            var task = _autoMapper.Map<Task>(taskEntity);
            // TODO: Implement link service
            task.AddLink(new Link
            {
                Method = HttpMethod.Get.Method,
                Href = "http://localhost:1424/api/v1/tasks/" + task.TaskId,
                Rel = Constants.CommonLinkRelValues.Self
            });
            return task;
        }

这里newTask是好的。然后进入这个:

public class AutoMapperAdapter : IAutoMapper
    {
        public T Map<T>(object objectToMap)
        {
            return Mapper.Map<T>(objectToMap);
        }
    }

但是当我进入下一步行动时,我得到了:

  

未找到Mapper.cs

     

找不到MapperEngince.cs    等等。

当它执行这些消息时,它会在AddTaskMaintenanceProcessor.AddTask中向taskEntity返回null。它进入

public void AddTask(Task task)
        {
            task.CreatedDate = _dateTime.UtcNow;
            task.Status = _session.QueryOver<Status>().Where(
            x => x.Name == "Not Started").SingleOrDefault();
          /*  task.CreatedBy = _session.QueryOver<User>().Where(
            x => x.Username == _userSession.Username).SingleOrDefault();*/
            task.CreatedBy = _session.Get<User>(1L); // HACK: All tasks created by user 1 for now
            if (task.Users != null && task.Users.Any())
            {
                for (var i = 0; i < task.Users.Count; ++i)
                {
                    var user = task.Users[i];
                    var persistedUser = _session.Get<User>(user.UserId);
                    if (persistedUser == null)
                    {
                        throw new ChildObjectNotFoundException("User not found");
                    }
                    task.Users[i] = persistedUser;
                }
            }
            _session.SaveOrUpdate(task);
        }

_session.SaveOrUpdate(任务)失败的地方;有消息

  

NHibernate.Exceptions.GenericADOException:无法插入:   [WebApi2Book.Data.Entities.Task] [SQL:INSERT INTO [任务](主题,   StartDate,DueDate,CompletedDate,CreatedDate,StatusId,   CreatedUserId)VALUES(?,?,?,?,?,?,?);选择SCOPE_IDENTITY()]   ---&GT; System.Data.SqlClient.SqlException:无法将值NULL插入“StatusId”列,表'WebApi2BookDb.dbo.Task';专栏   不允许空值。 INSERT失败。

我的猜测是,自动播放器设置中缺少某些内容,这就是所有值都为空的原因,但我刚开始使用它,所以我不知道。

该项目可以从here下载,它是第5章。在原始资料中,我没有收到缺少信息的消息,但

0 个答案:

没有答案