使用实体框架还原和备份

时间:2012-12-19 06:14:26

标签: c# entity-framework

我在项目中使用C#,。net 4,Entity Framework和SQL Server 2008 R2。

我不熟悉Entity Framework从数据库备份和恢复。请帮我在Entity Framework中编写恢复和备份代码

3 个答案:

答案 0 :(得分:11)

实体框架是一种ORM - 对象 - 关系映射器 - 旨在处理与单个实体和/或实体的短列表的交互。它既不是为批量操作而设计的,也不是服务器管理框架。所以不 - 我不认为你可以使用实体框架做到这一点 - 这不是它的工作。

使用合适的工具完成工作!使用SQL Server Management Studio来处理备份/还原 - 或者如果必须以编程方式执行,请使用SMO(服务器管理对象),这些用于这些类型的作业

答案 1 :(得分:5)

对有这个问题的其他朋友.... 使用ExecuteSqlCommand可以在EF 6+中备份db 例如:(此代码创建了数据库的备份,我测试了它。)

string dbname = db.Database.Connection.Database;
string sqlCommand = @"BACKUP DATABASE [{0}] TO  DISK = N'{1}' WITH NOFORMAT, NOINIT,  NAME = N'MyAir-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10";
db.Database.ExecuteSqlCommand(System.Data.Entity.TransactionalBehavior.DoNotEnsureTransaction, string.Format(sqlCommand,dbname, "Amin9999999999999"));

备份保存在C:\ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ Backup
中 REF => https://entityframework.codeplex.com/discussions/454994

  

但我不建议使用此方法!

我强烈建议您使用以下文章:
http://www.c-sharpcorner.com/Blogs/8679/backup-and-restore-the-database-in-Asp-Net-web-application.aspx

答案 2 :(得分:0)

这应该让你进入恢复方面:

void LoadDB(
    System.Data.Entity.DbContext context,
    string backup_filename,
    string orig_mdf, // the original LogicalName name of the data (also called the MDF) file within the backup file
    string orig_ldf, // the original LogicalName name of the log (also called the LDF) file within the backup file
    string new_database_name
)
{
    var database_dir = System.IO.Path.GetTempPath();
    var temp_mdf = $"{database_dir}{new_database_name}.mdf";
    var temp_ldf = $"{database_dir}{new_database_name}.ldf";
    var query = @"RESTORE DATABASE @new_database_name FROM DISK = @backup_filename
        WITH MOVE @orig_mdf TO @temp_mdf,
        MOVE @orig_ldf TO  @temp_ldf,
        REPLACE;";
    context.Database.ExecuteSqlCommand(
        // Do not use a transaction for this query so we can load without getting an exception:
        // "cannot perform a backup or restore operation within a transaction"
        TransactionalBehavior.DoNotEnsureTransaction,
        query,
        new[] {
        new SqlParameter("@backup_filename", backup_filename),
        new SqlParameter("@database_dir", database_dir),
        new SqlParameter("@new_database_name", new_database_name),
        new SqlParameter("@orig_mdf", orig_mdf),
        new SqlParameter("@orig_ldf", orig_ldf),
        new SqlParameter("@temp_mdf", temp_mdf),
        new SqlParameter("@temp_ldf", temp_ldf),
        }
    );
}

如果您事先不了解它们,可以通过以下查询获取MDF和LDF LogicalName值manuallyprogrammatically

RESTORE FILELISTONLY FROM DISK @backup_filename
相关问题