我正在以这种方式创建一个对象:
var assembly = typeof (Cliente).Assembly;
var Tipo = assembly.GetType("Datos." + tipoItem);
var item = Activator.CreateInstance(Tipo);
其中tipoItem 是类的名称,Datos 是相应的命名空间。
Cliente 是同一个命名空间中的一个类。
要将对象存储在数据库中,我有这个通用方法:
public void AddItem<TItem>(TItem item) where TItem : class
{
db.Set<TItem>().Add(item);
db.SaveChanges();
}
调试时,item对象的类型是对的。如果tipoItem 为“EmailCliente”,则项目类型为Datos.EmailCliente。
AddItem 方法将项目作为 Datos.EmailCliente 对象接收,但引发异常:
“实体类型 Object 不是当前上下文模型的一部分”
调试时,TItem 的类型是 object 而不是 Datos.EmailCliente,这就是问题所在。
我确实尝试使用 (Tipo) 将项目转换为 Tipo,如 Tipo, Convert.ChangeType(item, Tipo) 但这些都不起作用。
如何转换项目以便 AddItem 方法接受它。
TIA
编辑:
根据安德烈的回答,这是有效的代码。
MethodInfo method = typeof(ControlDatos).GetMethod("AddItem");
MethodInfo generic = method.MakeGenericMethod(new[] { Tipo });
generic.Invoke(cd, new object[] { item });
其中 cd 是定义了 AddItem 方法的 ControlDatos 类的实例。