2012-02-19 24 views
0

モデルの変更時にデータをバックアップし、データベース作成後に再作成しようとしました。 これはうまくいっていますが、私はこれを各クラスに書く必要があります。 DbContextですべてのDbSetを取得し、この関数でループする方法はありますか?エンティティフレームワークコードファースト - バックアップと復元DbContext

バックアップ:

XmlSerializer classSerializer = new XmlSerializer(typeof(List<TextComponent>)); 
StreamWriter classComponentWriter = new StreamWriter(Server.MapPath("~/App_Data/backup/TextComponents.xml")); 
classSerializer.Serialize(classComponentWriter, _db.TextComponents.ToList()); 
classComponentWriter.Close(); 

復元:

List<TextComponent> TextComponents = null; 
XmlSerializer TextComponentSerializer = new XmlSerializer(typeof(List<TextComponent>)); 
FileStream TextComponentFileStream = new FileStream(Server.MapPath("~/App_Data/backup//TextComponents.xml"), FileMode.Open); 
TextComponents = (List<TextComponent>)TextComponentSerializer.Deserialize(TextComponentFileStream); 

foreach (TextComponent item in TextComponents) 
{ 
_db.TextComponents.Add(item); 
} 
_db.SaveChanges(); 

答えて

1

あなたはすべてのDBSetプロパティ列挙するためにリフレクションを使用することができます。

properties = typeof(DBContext).GetProperties(); // or this.GetType().GetProperties(); 

foreach (PropertyInfo property in properties) 
{ 
    if (/*Check if property type is DBSet by comparing [property.DeclaringType](http://msdn.microsoft.com/en-us/library/system.type.declaringtype.aspx)*/) 
     // Write backup or restore code here. 
} 

`

関連する問題