我有一个指向我的API的“ GET”请求,该请求指向“ MapController”,它促进了“ GetAllProducts”方法。
我希望该方法检索数据库中的所有记录,然后将这些数据作为对象列表返回,然后将其提供给客户端。
我在弄清楚如何将数据库模式映射到我的模型时遇到了一些麻烦。这是我目前的尝试。
控制器类:
public class MapController : ApiController
{
private string SQLServerToUse = "34.255.206.221";
private string SQLServerDB = "HCT";
private string SQLServerPWD = "pass";
private string SQLServerUser = "user";
public IEnumerable<Map> GetAllProducts()
{
//set the connection string
string connString = "Data Source=" + SQLServerToUse + ";Initial Catalog=" + SQLServerDB + ";User ID=" + SQLServerUser + ";Password=" + SQLServerPWD + ";";
//variables to store the query results
List<Map> maps = new List<Map>();
//sql connection object
using (SqlConnection connection = new SqlConnection(connString))
{
connection.Open(); Console.WriteLine("connection open");
string query = @"SELECT * FROM dbo.Map";
using (SqlCommand cmd = new SqlCommand(query, connection))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var map = new Map();
map.Map_Data_ID = reader.GetInt32("Map_Data_ID");
map.County = reader.GetString("County");
map.Color = reader.GetString("Color");
maps.Add(map);
}
}
}
}
return maps;
}
}
}
型号:
public class Map
{
public string Map_Data_ID { get; set; }
public string County { get; set; }
public string Color { get; set; }
}
数据库架构:
呈现给用户界面的预期格式:
[
{
"Map_Data_ID": 122,
"County": "West Yorkshire",
"Color": "#d45faa"
},
{
"Map_Data_ID": 167,
"County": "Wiltshire",
"Color": "#d45faa"
}
]
如您所见,
答案 0 :(得分:3)
根据您的评论,我需要注意一些事项:
ID
列是INT
类型的事实,但是在Map
类中,您的类型为string
,这是一个问题。将其更改为int
,即可解决该错误。GetInt32
类型的GetString
和SqlDataReader
方法接受int
作为参数引起的,这是列的序数。因此,如果列0为ID
,则将0
传递给reader.GetInt32
,依此类推。参见here。答案 1 :(得分:0)
如果使用的是Entity Framework,则应首先创建与数据库关联的DbContext
,并以正确的方式定义模型类,然后在上下文中创建DbSet
。完成所有这些操作后,您可以使用上下文对数据进行CRUD,而不必编写SQL。
有关详细信息,您可以选中here