如何解决使用代码优先方法无法在blazor中创建数据库
我正在与blazor合作,并且正在采用代码优先方法
但是问题是我的数据库没有创建
我首先创建一个项目,然后选择 visual studio 2019-> blazor应用程序-> blazor服务器应用程序
然后
我在appsetting.json中添加了connetionstring
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=servername;Initial Catalog=databasename;User ID=userid;Password=password"
},"Logging": {
"LogLevel": {
"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"
}
},"AllowedHosts": "*"
}
然后
上方的连接字符串名称在startup.cs中初始化
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
然后,我创建一个Emp类
Emp.cs
namespace BlazorServerApp.Pages
{
public class Emp:ComponentBase
{
public int empid { get; set; }
public string empname { get; set; }
public string empcountry { get; set; }
}
}
然后,我创建一个mydbcontext类
MyDbContext.cs
namespace BlazorServerApp.Pages
{
public class MyDbContext:DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options)
: base(options)
{ }
public DbSet<Emp> emps { get; set; }
}
}
然后,我在pags文件夹中创建了一个剃须刀组件(EmployeeList)
EmployeeList.razor
@page "/"
@inherits Emp
<h3>EmployeeList</h3>
<div>
<div>
<h3>@empname @empcountry</h3>
</div>
</div>
然后运行项目,但未创建数据库
是否未创建数据库问题?
帮助
解决方法
您可以先安装以下软件包,然后通过添加迁移来运行您想要的数据库。请按照以下步骤操作:
首先,安装以下软件包:
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.SqlServer
在 Startup.cs 中添加两个:
using Microsoft.EntityFrameworkCore;
services.AddDbContext<Dbcontext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DatabaseConnection")));
然后在包管理器控制台中添加:
Add-Migration
Update-Datatbase
,
您需要在软件包管理器中修整cammand“ add-migration [MigrationName]”(选择您的项目)。成功执行add migration命令后,它将在项目中创建一个名为“ Migration”的文件夹,并创建与我们使用相同名称执行add migration命令时提供的名称[MigrationName]相同的类。
我们仅创建了负责创建数据库及其表的迁移脚本。但是我们还没有创建实际的数据库和表。因此,让我们执行迁移脚本并生成数据库和表。因此,在执行迁移脚本时,我们必须执行“ update-database [MigrationName]”命令。
,只需将它添加到configure.startup.cs中
var context = serviceScope.ServiceProvider.GetRequiredService<MyDbContext>();
context.Database.EnsureCreated();
Startup.cs
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
var context = serviceScope.ServiceProvider.GetRequiredService<MyDbContext>();
context.Database.EnsureCreated();
}
MyDbContext.cs
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
//using System.Data.Entity;
//using System.Data.Entity;
//using System.Data.Entity;
//using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
namespace BlazorServerApp.Pages
{
public class MyDbContext: DbContext
{
public MyDbContext(Microsoft.EntityFrameworkCore.DbContextOptions<MyDbContext> options)
: base(options)
{
//System.Data.Entity.Database.SetInitializer<MyDbContext>(new CreateDatabaseIfNotExists<MyDbContext>());
}
public DbSet<Emp> emps { get; set; }
}
}
只需在startup.cs页面中添加此功能
,dotnet tool install --global dotnet-ef
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet ef migrations add InitialCreate
dotnet ef database update
请在此处参考官方文档:https://docs.microsoft.com/en-us/ef/core/get-started/?tabs=netcore-cli#create-the-database
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。