我使用此文档在ASP.NET WEB API中创建了一个oData。 OData in ASP.NET Web API。我的EF在另一个项目上,因此我只将引用添加到我的WEB API项目中。创建端点后。
public class ItemController : ODataController
{
SAP_PORTALEntities db = new SAP_PORTALEntities();
private bool ItemExists(string key)
{
return db.sap_item.Any(s => s.ItemCode == key);
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
[EnableQuery]
public IQueryable<Item> Get()
{
return db.sap_item;
}
[EnableQuery]
public SingleResult<sap_item> Get([FromODataUri] string key)
{
var item = db.sap_item.Where(s => s.ItemCode == key);
IQueryable<sap_item> itemModel;
itemModel = item;
return SingleResult.Create(itemModel);
}
public async Task<IHttpActionResult> Post(sap_item item)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.sap_item.Add(item);
await db.SaveChangesAsync();
return Created(item);
}
}
此行出现错误: IQueryable Get()
Cannot implicitly convert type 'System.Data.Entity.DbSet<sap_dataaccess.sap_item>' to 'System.Linq.IQueryable<sap_portal.Models.Item>'. An explicit conversion exists
项目是我的模型。
public class Item
{
public string ItemCode { get; set; }
public string Dscription { get; set; }
public string ItemGroup { get; set; }
public string InvItem { get; set; }
public string PurItem { get; set; }
public string SalItem { get; set; }
public string UOMGroup { get; set; }
public string Manufacturer { get; set; }
public string Active { get; set; }
public string PurUOM { get; set; }
public Nullable<decimal> QtyPurUOM { get; set; }
}
答案 0 :(得分:1)
您可以尝试使用linq AsQueryable
,否则您将只返回DbSet<sap_dataaccess.sap_item>
,但转换类型将失败。
[EnableQuery]
public IQueryable<Item> Get()
{
return db.sap_item.AsQueryable();
}