发布 WebAPI 时不能将类型 db.entities1 隐式转换为 system.collection.generic.list<aspnetWEBAPI.Home_Visits_Request>

问题描述

我在 WEB-API 项目中创建了 post 操作,这是步骤:

1- 连接到数据库并从数据库更新模型并使用 Data.Edmx

2- 创建模型 homeVisit

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using aspnetWEBAPI;

    public class homeVisit
    {
    public bool Success { get; set; }
    public List<Home_Visits_Request> Data { get; set; }

    public string Message { get; set; }
}

3- 创建控制器并发布操作

[HttpPost]
        [ActionName("posthomevisitrequest")]
        public HttpResponseMessage posthomevisitrequest([FromBody] Home_Visits_Request Labrequest)
        {

            using (DBEntities1 entities = new DBEntities1())
            {

                 entities.Home_Visits_Request.Add(Labrequest);
                 entities.SaveChanges();

                homeVisit homeRequest = new homeVisit
                {
                    Success = true,Data = entities,Message = "Data Inserted "
                };

                FalseStatus falsestat = new FalseStatus
                {
                    Success = false,Message = "Cannot Insert Data "
                };

                if (!entities.Home_Visits_Request.Any())
                {
                    return Request.CreateResponse(HttpStatusCode.NotFound,falsestat);
                }
                else
                {
                    return Request.CreateResponse(HttpStatusCode.OK,homeRequest);
                }

                
            }

此行 Data = entities,

中第 3 步中显示错误
"cannot implicitly convert type db.entities1 to system.collection.generic.list<aspnetWEBAPI.Home_Visits_Request>  

以及此行中的另一个错误 if (!entities.Any())

"DBEntities1 does not contain a deFinition for 'Any' and no extension method Any accepting the first argument for DBEntities1 Could be found are you missing a using directive or assembly reference ? "

我在 Get 方法中使用了相同的代码和结构,但我认为我需要使用 post 方法进行一些更改,请帮助您如何解决错误

解决方法

更改您的代码:



 using (DBEntities1 entities = new DBEntities1())
            {

                 entities.Set<Home_Visits_Request>().Add(Labrequest);
            var result=   entities.SaveChanges();

                
          if (result == 0)
                {
            FalseStatus falsestat = new FalseStatus
                {
                    Success = false,Message = "Cannot Insert Data "
                };

              return Request.CreateResponse(HttpStatusCode.NotFound,falsestat);
                }
              
                 homeVisit homeRequest = new homeVisit
                {
                    Success = true,Data = entities.Set<Home_Visits_Request>().ToList(),Message = "Data Inserted "
                };

                    return Request.CreateResponse(HttpStatusCode.OK,homeRequest);
               
            

并检查您是否使用了 System.Linq;在您的控制器类中。

更新:

如果您只想返回添加的记录,请更改您的模型类

public class homeVisit
    {
    public bool Success { get; set; }
    public Home_Visits_Request Data { get; set; }
    public string Message { get; set; }
}

并使用此代码:

 homeVisit homeRequest = new homeVisit
                {
                    Success = true,Data = Labrequest,Message = "Data Inserted "
                };
 return Request.CreateResponse(HttpStatusCode.OK,homeRequest);

我认为将 save 包装在 try...catch 块中也是个好主意