将数据添加到Entity Framework中的动态表

时间:2018-10-31 13:26:46

标签: c# excel entity-framework

我想基于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              
}

1 个答案:

答案 0 :(得分:0)

您可以使用Set()方法添加到动态表类型。

var query = context.Set(type);
query.Add(obj);
context.SaveChanges();

唯一的不足是AddOrUpdate()方法不可用,因此在运行程序之前需要清空表。该应用程序也很慢,但这是另一篇文章。