EF6入门求助:数据库列表生成及ProductSearchList对象映射问题
问题解决步骤
1. 修正ProductSearchList的定义
你当前的ProductSearchList写法完全错误,会触发无限递归实例化(类内部直接new自身),根本无法用来存储产品列表。正确的定义应该让它包含一个用于存储产品的集合属性:
// 改为public方便外部赋值,属性命名用有意义的名称 public class ProductSearchList { // 初始化空列表避免空引用问题 public IList<Product> Products { get; set; } = new List<Product>(); }
如果需要返回给Postman的是精简的产品信息(而非完整的Product实体),可以先定义一个DTO类:
// 只保留需要对外暴露的字段 public class ProductDto { public int Id { get; set; } public string ProductCode { get; set; } public string ProductName { get; set; } // 按需添加其他字段 } // 对应的ProductSearchList改为存储DTO列表 public class ProductSearchList { public IList<ProductDto> Products { get; set; } = new List<ProductDto>(); }
2. 将查询结果映射到ProductSearchList
从_productRepo查询到产品列表后,直接赋值给ProductSearchList的集合属性即可。如果用DTO,通过LINQ的Select完成字段映射:
直接使用Product实体的场景
public Response SearchProduct(ProductSearchRequest ProductSearch) { // 执行查询并转为List IList<Product> products = _productRepo.Find(x => x.ProductCode.StartsWith("WTP")).ToList(); // 实例化并赋值 var productSearchList = new ProductSearchList { Products = products }; // 后续处理响应 }
使用ProductDto的场景
public Response SearchProduct(ProductSearchRequest ProductSearch) { var products = _productRepo.Find(x => x.ProductCode.StartsWith("WTP")) .Select(p => new ProductDto { Id = p.Id, ProductCode = p.ProductCode, ProductName = p.ProductName // 映射其他需要的字段 }) .ToList(); var productSearchList = new ProductSearchList { Products = products }; }
3. 格式化CreateResponse返回结果
假设Response.CreateResponse支持传入状态码、消息和数据参数,将productSearchList作为响应数据传入,Postman就能拿到结构化的产品列表:
public Response SearchProduct(ProductSearchRequest ProductSearch) { var products = _productRepo.Find(x => x.ProductCode.StartsWith("WTP")).ToList(); var productSearchList = new ProductSearchList { Products = products }; // 返回带状态、消息和数据的成功响应 return Response.CreateResponse(200, "查询成功", productSearchList); }
如果CreateResponse仅接受数据对象,直接传入即可:
return Response.CreateResponse(productSearchList);
这样Postman调用接口后,就能看到包含产品列表的结构化响应体,可直接查看或填充数据。
内容的提问来源于stack exchange,提问作者K Henry
相关产品推荐
相关产品推荐

