Я хочу обновить базу данных на основе входного файла 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
}





Вы можете использовать метод Set () для добавления к динамическому типу таблицы.
var query = context.Set(type);
query.Add(obj);
context.SaveChanges();
Единственным недостатком является то, что метод AddOrUpdate () недоступен, поэтому перед запуском программы необходимо очистить таблицу. Приложение тоже чертовски медленное, но это уже тема для отдельного поста.