使用实体框架中的字段子集出错

本文关键字:字段 子集 出错 实体 框架 | 更新日期: 2023-09-27 18:02:13

我是第一次在WebAPI服务中使用EF 4。我了解EF的基本知识,但当我习惯使用ADO时,它仍然有一点学习曲线。

我只想返回表中超过100个字段的子集(5)。

模型(EF生成):

public partial class ITEM_MASTER
{
    public string IM_ITEM_CODE { get; set; }
    public string IM_UPC { get; set; }
    public string IM_SUBDEPARTMENT { get; set; }
    public string IM_DESC { get; set; }
    ...
}

Get方法在我的控制器:

// GET api/Products
public IQueryable<ITEM_MASTER> GetProduct()
{
    // return db.ITEM_MASTER;
    return db.ITEM_MASTER.Select(x => new ProductList { ItemCode = x.IM_ITEM_CODE });
}

return db.ITEM_MASTER工作,但使用。select方法我得到错误:

不能隐式转换类型'System.Linq.IQueryable<JWebAPI.Models.ProductList>''System.Linq.IQueryable<JWebAPI.Models.ITEM_MASTER>'。一个显式的存在转换(您是否缺少强制类型转换?)

public class ProductList
{
    public string ItemCode {get; set;}
}

ProductList类充当占位符对象,因为使用. select返回的是DBQuery而不是原始对象类型。我读到这是处理这种情况的理想方法。当我让它工作时,我会给它添加更多的属性。我有一个下载的样本,结构相同的方式,并工作。

这是做我需要的最好的方法,只返回EF字段的一个子集吗?如何解决转换错误?

使用实体框架中的字段子集出错

这个错误很明显,你的方法应该返回IQueryable<ITEM_MASTER>,但你试图返回'System.Linq.IQueryable<JWebAPI.Models.ProductList>'

既然您将查询的结果投射到'System.Linq.IQueryable<JWebAPI.Models.ProductList>',您需要将其作为返回类型。

// GET api/Products
public IQueryable<ProductList> GetProduct() //Change return type
{
    // return db.ITEM_MASTER;
    return db.ITEM_MASTER.Select(x => new ProductList { ItemCode = x.IM_ITEM_CODE });
}

因为你只选择了原始实体的一个子集,你不能投影到实体映射到实体框架中的表,这就是为什么你需要一个占位符类ProductList