【问题标题】:Backup a SQL server localdb with Entity Framework in C#在 C# 中使用实体框架备份 SQL 服务器 localdb
【发布时间】:2016-10-06 18:57:42
【问题描述】:

我正在为我的公司处理一个重要的库存项目,我面临一个我似乎无法解决的问题,这让我有些不眠之夜。

该应用程序旨在在单台计算机上使用,我们有常规的计算机格式化。我选择使用 localdb,因为我们已经缺少专用服务器。 我想保存/备份我的 localdb 和/或实体的数据,并确保它是防篡改的,并且能够在以后恢复或在需要时将其恢复到其他计算机。

我尝试在连接关闭时复制 .mdf 和 .ldf 文件并在需要时恢复它们,但我不确定这是一个好方法。

【问题讨论】:

  • SQL server(2008 和更新版本)有一个内置函数可以做到这一点:BACKUP 和 RESTORE。只需触发适当的 sql 查询。
  • 我尝试这样做,但无法恢复。此外,在我成功备份后,我无法调用 SaveChanges()。我会再试一次并发布任何错误。
  • @DevilSuichiro 另外,是否可以篡改备份文件?我需要加密吗?
  • 我在我的项目中就是这样做的。您是否记得连接到主数据库以进行恢复?此外,备份应该在单独的上下文中完成,因此不需要 SaveChanges() 那里。
  • 如果这很重要,请使用企业级数据库和与之配套的最佳实践。

标签: c# .net entity-framework localdb


【解决方案1】:

我创建自己的控制器

[授权(角色=“管理员”)] 公共类 BackupController : 控制器 { 私有 IConfiguration 配置;

    public BackupController(IConfiguration config)
    {
        configuration = config;
    }

    public ContentResult Backup()
    {
        try
        {
            var filename = BackupRun();
            return Content($"Backup database successfully to {filename}");
        }
        catch (Exception ex)
        {
            return Content("Backup Error database successfully: " + ex.ToString());
        }
    }

    public IActionResult BackupAndDownload()
    {
        var filename = BackupRun();
        var content = System.IO.File.OpenRead(filename); //NOT USE USING
        var contentType = "APPLICATION/octet-stream";
        var fileName = $"VideoKurs_{DateTime.Now.ToString("ddMMyyyy_HHmmss")}.bak";
        return File(content, contentType, fileName);
    }

    public string BackupRun()
    {
        SqlConnection sqlcon = new SqlConnection();
        SqlCommand sqlcmd = new SqlCommand();

       //Get Connection String
        sqlcon.ConnectionString = configuration.GetConnectionString("DefaultConnection");

        //Enter destination directory where backup file stored
        string destdir = "E:\\Backup\\VideoKurs";

        //Environment.GetEnvironmentVariable("LocalAppData") + "\\Backup" ;

        //Check that directory already there otherwise create 
        if (!System.IO.Directory.Exists(destdir))
            System.IO.Directory.CreateDirectory(destdir);

        //Open connection
        sqlcon.Open();
        //query to take backup database
        var filename = destdir + "\\" + DateTime.Now.ToString("ddMMyyyy_HHmmss") + ".Bak";
        sqlcmd = new SqlCommand("backup database [aspnet-SanSoft.Videokurs-D459F243-BB77-45A3-91E6-BD127D86F2C7] to disk='" + filename + "'", sqlcon);
        sqlcmd.ExecuteNonQuery();
        //Close connection
        sqlcon.Close();

        return filename;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多