C# 以Web形式创建Web API以从SQL数据库表中提取
我正在尝试为ASP.NET应用程序创建web API。我将遵循本教程: 我遇到的问题是,我试图使用现有数据库,并从数据库中的特定表中提取数据。在上面提供的链接中,它将介绍如何在本地数据库中创建一个表并为其创建API 然而,在我的场景中,我试图使用一个包含数百个表的现有数据库,但只想从2-3个表中获取数据 注意:我非常确定我的连接字符串设置正确(当我在SQLConnection类型对象中使用它时,它会适当地拉入) 代码如何知道我要从哪个表中提取?是否有某种方法可以让我使用存储过程来提取我想要的数据 以下是我的代码示例: Models.cs: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类型对象中使用它时,它会适当地拉入) 代码如何知道我要从哪个表中提取?是否有某种方法可以让我使用存储过程来提取我想要的数据
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控制器返回数据,转到浏览器,查看它是否返回数据。应该很简单。谢谢!这帮助我找到了其中的一些原因。我还使用了本演练的部分内容:它帮助我以一种有效的方式重新生成控制器。