Вы должны установить исходный каталог в строке подключения в app.config:
<add name="SalaryAndBenefitsEntities" connectionString="metadata=res://*/SalaryAndBenefitsModel.csdl|res://*/SalaryAndBenefitsModel.ssdl|res://*/SalaryAndBenefitsModel.msl;provider=System.Data.SqlClient;provider connection string="data source=.\sqlexpress;attachdbfilename=|DataDirectory|SalaryAndBenefits.mdf;Initial Catalog=SalaryAndBenefit;user instance=true;password=ca;integrated security=SSPI;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
Для резервного копирования. Ниже:
создать содержимое команды sql
public string BackUpCommand(string databaseName, string fileAddress)
{
string command = @"BACKUP DATABASE " + databaseName + @"
TO DISK = '" + fileAddress + "' WITH FORMAT";
return command;
}
Метод записи резервной копии:
public class ActionResult
{
public bool Result { get; set; }
public string Message { get; set; }
}
public ActionResult BackUpDatabase(string filePath)
{
ActionResult res = new ActionResult { Result = true };
using (SalaryAndBenefitsEntities _context = new SalaryAndBenefitsEntities())
{
string command = "select db_name()";
string databaseName = _context.Database.SqlQuery(typeof(string), command).ToListAsync().Result.FirstOrDefault().ToString();
string backUpQuery = BackUpCommand(databaseName, filePath);
var result = _context.Database.SqlQuery<List<string>>(backUpQuery).ToList();
if (result.Count() > 0)
{
res.Result = false;
result.ForEach(x =>
{
res.Message += x.ToString();
});
}
return res;
}
}
если возвращено истинное резервное копирование базы данных успешно, иначе нет
Для восстановления. Следуйте ниже:
создать содержимое команды sql
public string RestoreCommand(string databaseName, string fileAddress)
{
string command = @"use [master]
ALTER DATABASE " + databaseName + @"
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
RESTORE DATABASE " + databaseName + @"
FROM DISK = N'" + fileAddress + "'";
return command;
}
Метод восстановления записи:
public ActionResult RestoreDatabase(string filePath)
{
ActionResult res = new ActionResult { Result = true };
using (SalaryAndBenefitsEntities _context = new SalaryAndBenefitsEntities())
{
string command = "select db_name()";
string databaseName = _context.Database.SqlQuery(typeof(string), command).ToListAsync().Result.FirstOrDefault().ToString();
string restoreQuery = RestoreCommand(databaseName, filePath);
var result = _context.Database.SqlQuery<List<string>>(restoreQuery).ToList();
if (result.Count() > 0)
{
res.Result = false;
result.ForEach(x =>
{
res.Message += x.ToString();
});
}
return res;
}
}
если возвращено истинное восстановление базы данных успешно, иначе нет
filePath Как: C: \ Temp \ backup.bak
Каталог filePath (C: \ Temp) должен быть создан вручную перед использованием этого метода