我想基于Excel输入文件更新数据库。该文件的工作表名称与db中的表名称相对应。每个数据库表包含不同的列,但与Excel列的顺序相同。有没有办法动态选择要向其添加新实体的表?
到目前为止,我具有动态创建实体的代码(未经测试,所以我希望如此):
int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;
for (int r = 7; r < rowCount; r++)
{
var obj = Activator.CreateInstance(Type.GetType("DataGrabber." + xlWorksheet.Name.Remove(xlWorksheet.Name.Length - 1)));
Type type = obj.GetType();
IList<PropertyInfo> properties = new List<PropertyInfo>(type.GetProperties());
int c = 1;
foreach (PropertyInfo property in properties)
{
try
{
property.SetValue(obj, (int)xlRange.Cells[r, c].Value2());
} catch
{
property.SetValue(obj, (decimal)xlRange.Cells[r, c].Value2());
}
c++;
}
context.[dynamic table name].AddOrUpdate(obj); ///// This is my DbContext, how to select the right table based on the type of ob
}
答案 0 :(得分:0)
您可以使用Set()方法添加到动态表类型。
var query = context.Set(type);
query.Add(obj);
context.SaveChanges();
唯一的不足是AddOrUpdate()方法不可用,因此在运行程序之前需要清空表。该应用程序也很慢,但这是另一篇文章。