C# 以Web形式创建Web API以从SQL数据库表中提取

C# 以Web形式创建Web API以从SQL数据库表中提取,c#,asp.net,asp.net-web-api,webforms,C#,Asp.net,Asp.net Web Api,Webforms,我正在尝试为ASP.NET应用程序创建web API。我将遵循本教程: 我遇到的问题是,我试图使用现有数据库,并从数据库中的特定表中提取数据。在上面提供的链接中,它将介绍如何在本地数据库中创建一个表并为其创建API 然而,在我的场景中,我试图使用一个包含数百个表的现有数据库,但只想从2-3个表中获取数据 注意:我非常确定我的连接字符串设置正确(当我在SQLConnection类型对象中使用它时,它会适当地拉入) 代码如何知道我要从哪个表中提取?是否有某种方法可以让我使用存储过程来提取我想要的数据

我正在尝试为ASP.NET应用程序创建web API。我将遵循本教程:

我遇到的问题是,我试图使用现有数据库,并从数据库中的特定表中提取数据。在上面提供的链接中,它将介绍如何在本地数据库中创建一个表并为其创建API

然而,在我的场景中,我试图使用一个包含数百个表的现有数据库,但只想从2-3个表中获取数据

注意:我非常确定我的连接字符串设置正确(当我在SQLConnection类型对象中使用它时,它会适当地拉入)

代码如何知道我要从哪个表中提取?是否有某种方法可以让我使用存储过程来提取我想要的数据

以下是我的代码示例:

Models.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace Test_Site_1.Models
{
public class Review
    {
        [Key]
        public int Rating_id { get; set; }
        public int site_id { get; set; }
        public int usr_id { get; set; }
        public string valid { get; set; }
        public DateTime review_date { get; set; }
        public float score { get; set; }
        public string terminal { get; set; }
        public string gate_info { get; set; }
        public string deparr { get; set; }
        public string comments { get; set; }
    }
}
ReviewContext.cs

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace Test_Site_1.Models
{
    public class ReviewsContext : DbContext
    {
        public ReviewsContext() : base("name=ECConnectionString")
        {
        }

        public System.Data.Entity.DbSet<Test_Site_1.Models.Review> Reviews { get; set; }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Data.Entity;
使用System.Linq;
使用System.Web;
名称空间测试站点1.0模型
{
公共类ReviewContext:DbContext
{
public ReviewsContext():base(“name=ECConnectionString”)
{
}
public System.Data.Entity.DbSet检查{get;set;}
}
}
ReviewController.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;
using Test_Site_1.Models;

namespace Test_Site_1.Controllers
{
    public class ReviewsController : ApiController
    {
        private ReviewsContext db = new ReviewsContext();

        // GET: api/Reviews
        public IQueryable<Review> GetReviews()
        {
            return db.Reviews;
        }

        public List<Review> GetReviews(int? id=null)
        {
            ReviewsContext db = new ReviewsContext();
            //var reviews = db.UserProfiles.ToList();
            return db.Reviews.ToList();
        }
使用系统;
使用System.Collections.Generic;
使用系统数据;
使用System.Data.Entity;
使用System.Data.Entity.Infrastructure;
使用System.Linq;
Net系统;
使用System.Net.Http;
使用System.Web.Http;
使用System.Web.Http.Description;
使用测试站点模型;
命名空间测试\u站点\u 1.0控制器
{
公共类ReviewController:ApicController
{
private ReviewContext db=新建ReviewContext();
//获取:api/评论
公共IQueryable GetReviews()
{
返回db.Reviews;
}
公共列表GetReviews(int?id=null)
{
ReviewContext db=新建ReviewContext();
//var reviews=db.UserProfiles.ToList();
返回db.Reviews.ToList();
}

我认为最好的方法是首先对数据库进行实体框架代码的反向工程

请参阅此链接:

这将对数据库进行反向工程,在实体框架的帮助下,您将能够非常轻松地查询数据库

注意,我看到您在API中返回了一个IQueryable。我猜您希望返回一个IEnumerable

    public IQueryable<Review> GetReviews()
    {
        return db.Reviews.AsEnumerable();
    }
publicIQueryable GetReviews()
{
返回db.Reviews.AsEnumerable();
}

实体数据模型能与我的Web表单应用程序配合使用吗?(这是一个遗留应用程序,我们现在没有人力更新到任何更新的应用程序)。我认为最好的方法是在这个库中创建一个类库,使用EF查询您的数据库。将其添加为引用,并从web窗体控制器调用这些方法。好的,我浏览了您给我看的指南,但除了重新创建我已经拥有的类之外,它没有做任何事情。我仍然不确定如何从中将其转换为API这里。:/您有一个API控制器,使用您的API控制器返回数据,转到浏览器,查看它是否返回数据。应该很简单。谢谢!这帮助我找到了其中的一些原因。我还使用了本演练的部分内容:它帮助我以一种有效的方式重新生成控制器。