dotnet ef 没有 db clone 命令。
您可以使用 SSMS 克隆/复制数据库,而不是创建脚本。然后在 asp.net 应用程序中更新连接字符串,测试和部署。
这是 MS SQL 服务器的文档。
https://docs.microsoft.com/en-us/sql/relational-databases/databases/use-the-copy-database-wizard?view=sql-server-ver15
任何数据库都有复制/克隆功能。
如果您首先使用 EF 代码,请检查现有数据库的 ef 迁移。 https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/migrations/existing-database
如果您只需要使用应用程序复制数据库,您可以创建存储过程并从应用程序执行。这是详细信息。
- 使用动态 T-SQL 执行将源数据库备份到文件中
- 然后使用动态 T-SQL 再次使用 RESTORE DATABASE WITH MOVE OPTION 将备份恢复到新数据库
该过程有6个参数(应提供所有参数):
- 源数据库名称
- 源数据库逻辑数据文件名
- 源数据库逻辑日志文件名
- 备份文件名和路径
- 目标数据库名称
- 数据库文件的目标数据库文件夹位置
这里是T-SQL过程源代码:
USE master;
GO
CREATE PROCEDURE dbo.CloneDBUsingBackupRestore (
@SourceDatabaseName VARCHAR(200)
,@SourceDatafileLogicalName VARCHAR(200)
,@SourceLogfileLogicalName VARCHAR(200)
,@BackupFile VARCHAR(2000)
,@TargetDatabaseName VARCHAR(200)
,@TargetDatabaseFolder VARCHAR(2000) )
AS
BEGIN
SET NOCOUNT ON
DECLARE @tsql VARCHAR(2000)
DECLARE @TargetDataFile VARCHAR(2000)
DECLARE @TargetLogFile VARCHAR(2000)
SET @TargetDataFile = @TargetDatabaseFolder + @TargetDatabaseName + '.mdf';
SET @TargetLogFile = @TargetDatabaseFolder + @TargetDatabaseName + '.ldf';
-- Backup the Source Database
IF @SourceDatabaseName IS NOT NULL
BEGIN
SET @tsql = CONCAT ( 'BACKUP DATABASE ' ,@SourceDatabaseName
,' TO DISK = ' ,QUOTENAME(@BackupFile, '''') )
PRINT 'Executing query : ' + @tsql;
EXEC (@tsql)
END
-- Restore database from the Backup File into target Data File and target Log File
SET @tsql = CONCAT ( 'RESTORE DATABASE ' ,@TargetDatabaseName
,' FROM DISK = '
,QUOTENAME(@BackupFile, '''')
,' WITH MOVE '
,QUOTENAME(@SourceDatafileLogicalName, '''') ,
' TO ' ,QUOTENAME(@TargetDataFile, '''') ,'
, MOVE ' ,QUOTENAME(@SourceLogfileLogicalName, '''')
,' TO ' ,QUOTENAME(@TargetLogFile, '''') )
PRINT 'Executing query : ' + @tsql EXEC (@tsql)
SET NOCOUNT OFF
END GO
使用 ASP.Net 代码调用。
using (SqlConnection con = new SqlConnection(connString))
{
using (SqlCommand cmd = new SqlCommand("dbo.CloneDBUsingBackupRestore", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@SourceDatabaseName", SqlDbType.VarChar).Value
="Northwind";
cmd.Parameters.Add("@SourceDatafileLogicalName ", SqlDbType.VarChar).Value
="Northwind_Log";
cmd.Parameters.Add("@BackupFile", SqlDbType.VarChar).Value
="C:\SQL\nw.bak";
cmd.Parameters.Add("@TargetDatabaseName", SqlDbType.VarChar).Value
="NorthwindClone";
cmd.Parameters.Add("@TargetDatabaseFolder ", SqlDbType.VarChar).Value
="C:\SQL";
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}