在第10章已经实现了在手动新建数据库中自动生成相应表的操作,本章将会按照自顶向下的开发模式来解释,在程序执行后,远程页面通过怎样的操作才能够在服务器相应的数据库软件中自动新建数据库,并自动生成相应的表及其字段。
(1)、修改Controllers.ViewModel.InstallModel类的定义,添加属性定义:
public bool SqlServerCreateDatabase { get; set; }
(2)、根据InstallModel重新生成默认页面:Nop.Web.Views.Install.Index.cshtml,并重新设计它。
(3)、修改Controllers.InstallController.Index()方法的定义,添加语句:
SqlServerCreateDatabase = false,
(4)、修改Controllers.InstallController.CreateDatabase方法的定义,把返回值由string修改为bool
(5)、修改Controllers.InstallController.Index(InstallModel model)方法的定义,添加语句:
if (model.SqlServerCreateDatabase)
{
if (!SqlServerDatabaseExists(connectionString))
{
//通过一个数据库连接字符串,尝试在Microsoft SQL Server数据库软件中自动新建一个指定数据库、表及其字段。
var collation = string.Empty;
var errorCreatingDatabase = CreateDatabase(connectionString, collation);
if (!errorCreatingDatabase)
throw new Exception($"通过一个数据库连接字符串,尝试连接Microsoft SQL Server数据库软件中相应数据库失败!");
}
}
(6)、准备工作:
1、如果使用SQL Service身份验证,“zz”用户则需要对Microsoft SQL Server数据库软件中内置系统数据“master”进行“安全对象”->“创建做任意数据库”,否则在自动生成数据库时“nopCommerce”会出现异常“Setup failed: An error occurred while creating the database: 在数据库 'master' 中拒绝了 CREATE DATABASE 权限。”,具体操作见下图:
2、如果使用SQL Service身份验证,“zz”用户则需要对Microsoft SQL Server数据库软件中内置系统数据“master”进行“服务器角色”全部授权操作,否则在自动生成数据库时“nopCommerce4.3、nopCommerce4.4”会出现异常“Setup failed: An exception was thrown while activating Nop.Data.Migrations.MigrationManager -> λ:FluentMigrator.Runner.IVersionLoader.”,具体操作见下图:
(7)、按F5执行程序,如果选择复选框,通过远程默认页面的输入数据,在Microsoft SQL Server数据库软件中会自动
新建一个指定数据库、表及其字段;如果不选择复选框那么就需手动的在Microsoft SQL Server数据库软件新建nop4.4数据库,如果使用SQL Service身份验证,还需要为该数据库, 手动的配置“zz”用户和“zz”密码,自动新建数据库、表及其字段具体操作见下图:
(8)、程序执行后Microsoft SQL Server数据库软件变化,见下图:
(9)、手动新建数据库、表及其字段具体操作见下图:
对以上功能更为具体实现和注释见:21-05-27_Nop4.4(015_执行默认页面,启动项中自动新建数据库连接文件,同时自动生成数据库中及其相应的表)。