使用变量调用方法
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);
}
}
我正在使用 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);
}
}