代码
数据驱动的应用程序
定义Model
代码: MenuCard.cs
代码: Menu.cs
代码: MenuCardsContext.cs
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<Applicationdbcontext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDbContext<MenuCardsContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
//...
}
appsettings.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=
(localdb)\\mssqllocaldb;Database=MenuPlanner;
Trusted_Connection=True;MultipleActiveResultSets=true"
},
//...
}
创建数据库
cd C:\Users\Stone\Source\Repos\Professional_Web_Demo\ASPCoreMvcSamples\MenuPlanner
dotnet ef migrations add InitMenuCards ––context MenuCardsContext
如果出现Build failed.可以重新生成项目
执行完命令后,会创建InitMenuCards类,Up方法创建数据库表,使用Down方法再次删除更改。
创建MenuCardDatabaseInitializer初始化数据库。
public class MenuCardDatabaseInitializer
{
private static bool s_databaseChecked = false;
private readonly MenuCardsContext _context;
public MenuCardDatabaseInitializer(MenuCardsContext context)
=> _context = context;
public async Task CreateAndSeedDatabaseAsync()
{
if (! s_databaseChecked)
{
s_databaseChecked = true;
//启动迁移
await _context.Database.MigrateAsync();
//MigrateAsync会检查—连接字符串关联的数据库和迁移中制定的数据库是否是相同的版本,如果不同,则调用Up方法获得相同的版本
//如果无数据,填充数据库
if (await _context.MenuCards.CountAsync() == 0)
{
var menuCards = new List<MenuCard>() {
new MenuCard { Name = "Breakfast", Active = true,Order = 1 },
new MenuCard { Name = "Vegetarian", Active =true, Order = 2 },
new MenuCard { Name = "Steaks", Active = true, Order = 3 }
};
_context.MenuCards.AddRange(menuCards);
await _context.SaveChangesAsync();
}
}
}
}
创建服务
创建IMenuCardsService接口
代码: IMenuCardsService.cs
实现MenuCardsService
代码: MenuCardsService.cs
通过依赖注入使服务可用,使用AddScoped方法。
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddScoped<IMenuCardsService, MenuCardsService>();
//...
}
创建控制器
当您使用Web API时,通常使用HTTP DELETE动词来删除资源。对于访问页面的浏览器,情况并非如此。 DeleteConfirmed方法需要使用HTTP POST动词(由HttpPost属性定义)请求。