使用变量调用方法

Use a variable to call a method

我正在使用 Entity framework 来操作数据库,我想知道是否可以使用变量来调用方法

我试过这种方式:

string name = "tableName";
db.[name].AddRange(dates.[name]);

但是没用

我想以这种方式调用方法,因为我要在不同的表中进行多次插入。我想使用一个数组或一些包含所有表名的集合。

然后迭代集合

public ActionResult MetodoRecibe(Reporte datas)
{
   string name = "tableName";
   db.tableName.AddRange(datos.tableName);
   db.SaveChanges();
   return Json(datas, JsonRequestBehavior.AllowGet);
 }

我的变量数据是Json,结构如下:

datas{
nameTable1[],
nameTable2[],
nameTable3[],
.
.
.
.
nameTable13
}

我曾考虑使用 switch case 作为最后的手段,但由于表格的数量,我更愿意使用第一个选项。

我不太明白你在做什么背后的想法,但我猜你想通过一个字符串来调用一个方法。你可以通过反思来做到这一点。

类似

MethodInfo myFunc = GetType().GetMethod("MyMethodName");
myFunc.Invoke(this, <MyMethodName arguments>);

您将需要使用反射来进行此类操作。 尝试如下:

public ActionResult MetodoRecibe(Reporte datas)
{
  string name = "TableName"; // This has to be exact with EF entity name
  var type = ((IQueryable)efContext.GetType().GetProperty("TableName").GetValue(efContext)).ElementType;
  var dbSet = efContext.Set(type); 
  dbset.AddRange(dates.[name]);
  efContext.SaveChanges();
}

EF 核心的 DbContext 有一个 AddRange<T> 方法,EF6 没有。但当然,添加一个或几个是相当容易的:

class MyContext : DbContext
{
    ...
    // In case your nameTable1[] arrays are of type object[]
    public void AddRange(params object[] data)
    {
        if (!data.Any()) return;

        var entityType = data[0].GetType();
        Set(entityType).AddRange(data);
    }

    public void AddRange<T>(params T[] data)
        where T : class
    {
        Set<T>().AddRange(data);
    }

    public void AddRange<T>(IEnumerable<T> data)
        where T : class
    {
        Set<T>().AddRange(data);
    }

}