1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public void ImportEntitiesFromXml<T>(DbSet<T> table, string fileName) where T : class
{
XmlSerializer xs = new XmlSerializer(typeof(List<T>));
using (var reader = XmlReader.Create(fileName))
{
var list = (List<T>)xs.Deserialize(reader);
foreach (var item in list)
{
table.Add(item);
}
}
}
public void ImportAllEntitiesFromXml(string directory)
{
using (var context = new MyDbContext())
{
var tableProperties = typeof(MyDbContext).GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.PropertyType.IsGenericType && p.PropertyType.GetGenericTypeDefinition() == typeof(DbSet<>))
.ToArray();
foreach(var prop in tableProperties)
{
Type entityType = prop.PropertyType.GetGenericArguments()[0];
var table = prop.GetValue(context, null);
var method = this.GetType().GetMethod("ImportEntitiesFromXml").MakeGenericMethod(entityType);
string fileName = string.Format("{0}.xml", prop.Name);
method.Invoke(table, Path.Combine(directory, fileName))
}
context.SaveChanges();
}
} |