2012-12-19 2 views
2

J'utilise C#, .net 4, Entity Framework et SQL Server 2008 R2 dans un projet.Restauration et sauvegarde avec Entity Framework

Je n'ai aucune connaissance de la sauvegarde et de la restauration de la base de données par Entity Framework. Aidez-moi à écrire le code de restauration et de sauvegarde dans Entity Framework

Répondre

7

Entity Framework est un mappeur ORM - objet-relationnel - conçu pour gérer les interactions avec des entités uniques et/ou des listes courtes d'entités. Il n'est ni conçu pour les opérations en bloc, ni pour l'administration de serveur. Donc non - je ne pense pas que vous pouvez le faire en utilisant Entity Framework - ce n'est pas son travail.

Utilisez un outil approprié pour le travail! Utilisez SQL Server Management Studio pour gérer la sauvegarde/restauration - ou si vous devez le faire par programme, utilisez le SMO (Server Management Objects) qui est destiné exactement à ce genre de tâches

5

À d'autres amis qui ont ce problème ..
L'utilisation d'ExecuteSqlCommand peut sauvegarder la base de données dans EF 6+.
Par exemple: (ce code créer une sauvegarde de votre base de données, je l'avais testé.)

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")); 

sauvegarde enregistré dans C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ Backup
ref =>https://entityframework.codeplex.com/discussions/454994

mais je ne recommande pas de travailler avec cette méthode!

Je recommande fortement l'utilisation de l'article ci-dessous:
http://www.c-sharpcorner.com/Blogs/8679/backup-and-restore-the-database-in-Asp-Net-web-application.aspx

0

Cela devrait vous permettre de continuer sur le côté restauration:

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), 
     } 
    ); 
} 

Si vous ne les connaissez pas à l'avance , les valeurs MDF et LDF LogicalName peuvent être obtenues manually ou programmatically à partir d'une requête comme celle-ci:

RESTORE FILELISTONLY FROM DISK @backup_filename 
Questions connexes