Я выполнил этот урок (http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api) для настройки веб-API в мое веб-приложение ASP.NET. Однако он не говорит о том, как извлекать записи из базы данных. Это вместо этого жестко закодированные фиктивные данные в контроллере, например:
Product[] products = new Product[]
{
new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
};
Скажем, у меня есть таблица в моей SQL DB под названием "Продукты", как бы я мог получить данные о продукте оттуда вместо этого? Если бы кто-нибудь мог указать мне в правильном направлении, я был бы признателен.
Я попытался использовать функцию, но она не работала.
DataTable dbProducts = new DataTable();
dbProducts = Wrapper.getProducts();
Если соединение не работает, проверьте этот сайт http://www.sqlstrings.com/ и измените строку подключения на нужный тип. Если это нечто большее, чем учебный опыт, я рекомендую использовать linq для sql или фреймворка сущности (обновление 2018: Dapper - мой предпочтительный способ сделать это)
Копировать код макаронных изделий:
// Create a connection to the database
SqlConnection conn = new SqlConnection("Data Source=MyDBServer;Initial Catalog=MyDB;Integrated Security=True");
// Create a command to extract the required data and assign it the connection string
SqlCommand cmd = new SqlCommand("SELECT * FROM Product", conn);
cmd.CommandType = CommandType.Text;
// Create a DataAdapter to run the command and fill the DataTable
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataTable dt = new DataTable();
da.Fill(dt);
List<Product> products = new List<Product>();
foreach(DataRow row in dt.Rows)
{
products.add(New Product{ row["Id"], row["Name"], row["Category"], row["Price"]});
}
Вы можете использовать сущность framework + репозиторий для быстрого получения данных из базы данных.
Если в вашей базе данных SQl уже есть таблица под названием Product, сделайте свой EF настроенным, и у вас есть все ссылки EF, доступные в вашем проекте.
Я не видел этого учебника, но просто чтобы дать вам краткую и грубую идею...
public class Product
{
public string Id {get;set;}
public Name {get;set;}
public string Category {get;set;}
public decimal Price {get;set;}
}
public AppContext : DbContext
{
public DbSet<Product> Products {get;set;}
}
public class IProductRepository
{
public IQuerable<Product> Products{get;}
}
public class ProductRepository : IProductRepository
{
private AppContext context = new DBContext();
public IQuerable<Product> Products
{
get
{
context.Products;
}
}
}
Now in your Web Api method & controller....
public class ProductController
{
private IProductRepository repo;
public ProductController()
{
repo = new ProductRepository(); // or use DI
}
public List<Product> Get()
{
return repo.Products.ToList();
}
}