【发布时间】:2019-05-07 00:04:49
【问题描述】:
我已将存储过程附加到数据库,该数据库应仅通过简单的搜索即可返回结果。查询被添加到我的实体并调用常规方法。我面临的问题是将这个过程的结果作为列表存储到特定的 DTO 中。
有什么方法可以有效地将这个存储过程的结果作为列表存储到 DTO 中?
以下是我目前所拥有的
Controller:
[Produces("application/json")]
[RoutePrefix("api/jobs")]
public class OutputController : ApiController
{
private TestCoastalToolsEntities _output;
public OutputController()
{
_output = new TestCoastalToolsEntities();
_output.Configuration.ProxyCreationEnabled = false;
}
/**Search**/
// POST: api/postsearch
[System.Web.Http.HttpPost, System.Web.Http.Route("postsearch")]
public async Task<IHttpActionResult> PostSearch(SearchInputDTO srequest)
{
OutputDTO<SearchInputDTO> output = new OutputDTO<SearchInputDTO>();
SearchInputDTO SearchInput = null;
var searchString = srequest.SearchValue.ToString();
SearchInput.Results = _output.searchLog2(searchString);
if (_oput != null)
{
output.Success = true;
output.Results = _SearchInput.Results;
var json = new JavaScriptSerializer().Serialize(output);
return Ok(json);
}
return Ok(_ot);
}
}
}
-------------------------------------
Search DTO:
namespace toolPortal.API.Data.DTO
{
public class SearchInputDTO
{
public List<object> Results { get; set; }
public SearchInputDTO(output output) {
this.ID = output.ID;
this.Name = output.Name;
this.Job = output.Job;
this.Start = output.Start;
this.End = output.End;
this.Logs = output.Logs;
}
}
}
预期结果是存储过程运行并将结果列表存储到 SearchInputResults。从那里,这些结果应该存储在另一个 DTO 中,以便在返回时传递出去。
【问题讨论】:
-
您的搜索查询返回什么?确定返回记录类型后,您需要将每个项目的属性映射到 DTO 属性,例如
result.Name = dto.Name。然后将List<object> Results更改为List<MyDTOtype> Results。 AutoMapper 是帮助映射模型的有用工具。 -
搜索应该返回与传递给它的字符串匹配的行。我正在研究自动映射器,但不确定实现需要什么。
标签: c# entity-framework asp.net-mvc-4 asp.net-web-api2