Восстановление базы данных SQL Server в Entity Framework - PullRequest
0 голосов
/ 07 мая 2018

Я создаю резервную копию базы данных с помощью этой команды

<add name="WindingContext" 
     connectionString="Data Source=.;Initial Catalog=Winding;Integrated Security=True;" 
     providerName="System.Data.SqlClient" />

В виду модель

WindingContext _db = new WindingContext();
BackupCommand = new RelayCommand(() =>
 {
   string command = @"BACKUP DATABASE Winding
                       TO DISK = '" + FilePath + "'";
   _db.Database.SqlQuery<List<string>>(command).ToList();}

и в представлении восстановления модели.

RestoreCommand = new RelayCommand(() =>
 {
   var command = "RESTORE DATABASE Winding FROM DISK = '"+FilePath+
            "' WITH REPLACE, NOUNLOAD,  STATS = 10";
   _db.Database.SqlQuery<List<string>>(command).ToList();}

но я получаю ошибку:

RESTORE не может обработать базу данных 'Winding', поскольку она используется этим сеансом. Рекомендуется использовать главную базу данных при выполнении этой операции.
ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ завершается ненормально.

Обновление

Я использую этот код, но получаю ошибку

SqlConnection connection = new SqlConnection("Data Source=.;Initial Catalog=Master;Integrated Security=True;");
SqlCommand cmd = new SqlCommand(@" Restore Database Winding From Disk='" + FilePath + "'", connection);

try
{
    cmd.Connection.Open();
    cmd.ExecuteNonQuery(); 
}

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

У вас есть две разные строки подключения. Один из кода, а другой из App.Config.

Вы должны убедиться, что в обоих местах база данных, которая должна быть восстановлена, не упоминается. В противном случае у вас будет активное соединение с этой базой данных, и восстановление будет прервано.

<add name="WindingContext" 
 connectionString="Data Source=.YOUR-COMPUTER\INSTANCE-OF-DATABASE; Integrated Security=True;" 
 providerName="System.Data.SqlClient" />  // REMOVED Catalog=Wind...

Только что протестировал с этим, и все заработало:

class Program
{
    private static masterEntities _db;
    static void Main(string[] args)
    {
        _db = new masterEntities();

        try
        {
            Backup(@"C:\Temp\Test\Test123.bak");

            Console.Read();

            Restore(@"C:\Temp\Test\Test123.bak");

        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

        Console.Read();
    }

    static void Backup(string filePath)
    {
        var command = @"BACKUP DATABASE Test
                   TO DISK = '" + filePath + "'";
        var list = _db.Database.SqlQuery<List<string>>(command).ToList();
        _db.SaveChanges();
    }

    static void Restore(string filePath)
    {
        var command = "RESTORE DATABASE Test FROM DISK = '" + filePath +
                      "' WITH REPLACE, NOUNLOAD,  STATS = 10";
       var list = _db.Database.SqlQuery<List<string>>(command).ToList();

        _db.SaveChanges();
    }
}
0 голосов
/ 07 мая 2018

Эта ошибка возникает, когда база данных, которую вы пытаетесь восстановить, является базой данных по умолчанию.
Зайдите в Security> Logins> ваш логин. Щелкните правой кнопкой мыши и выберите свойства. Обновите базу данных по умолчанию до master.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...