/ / cómo crear una instancia de un modelo cuyo nombre se obtiene dinámicamente de la base de datos en c # mvc - c #, asp.net-mvc

cómo crear una instancia de un modelo cuyo nombre se obtiene dinámicamente de la base de datos en c # mvc - c #, asp.net-mvc

Tengo el nombre del modelo guardado en mi base de datos. Lo obtengo utilizando cierta consulta. Ahora necesito mantener el nombre del modelo en cierto tipo de variable e instanciarlo dinámicamente. Así que puedo usarlo para un procesamiento posterior. Quiero algo como esto. ¡Por favor ayuda!

public string Checker(int Id)
{
var dataContext = new PetaPoco.Database("MessageEntity");
var jsonOLD = dataContext.SingleOrDefault<OldData>("Select OldJson from MakerChecker2 where MakerCheckerId=@0", Id);
var jsonNEW = dataContext.SingleOrDefault<NewData>("Select NewJson from MakerChecker2 where MakerCheckerId=@0", Id);
var modelName = dataContext.SingleOrDefault<NameOfModel>("Select ModelName from MakerChecker2 where MakerCheckerId=@0", Id);

MakerCheckerModel mcmodel = new MakerCheckerModel();

mcmodel.OldJson = jsonOLD.OldJson;
mcmodel.NewJson = jsonNEW.NewJson;
mcmodel.ModelName = modelName.ModelName;
var modelname = mcmodel.ModelName;


UserModel olduser = JsonConvert.DeserializeObject<UserModel>(mcmodel.OldJson);
//The way usermodel is hardcoded here. I need it to be dynamic. So that It can work for several data.Something Like this.
mcmodel.ModelName olduser = JsonConvert.DeserializeObject<mcmodel.ModelName>(mcmodel.OldJson);
}

¡¡Por favor ayuda!!

Respuestas

0 para la respuesta № 1

Debe almacenar el nombre completo de su modelo (Namespace.ModelName).

 var myObj = Activator.CreateInstance(Type.GetType("NameSpace.Model"));

Espero que esto ayude.

Mira esto .NetFiddle

Déjame saber si todavía tienes problemas.

Actualizar: Digamos que este es tu código.

var dataContext = new PetaPoco.Database("MessageEntity");
var jsonOLD = dataContext.SingleOrDefault<OldData>("Select OldJson from MakerChecker2 where MakerCheckerId=@0", Id);
var jsonNEW = dataContext.SingleOrDefault<NewData>("Select NewJson from MakerChecker2 where MakerCheckerId=@0", Id);
var modelName = dataContext.SingleOrDefault<NameOfModel>("Select ModelName from MakerChecker2 where MakerCheckerId=@0", Id);

Ahora puedes crear una instancia de tu modelo de esta manera.

var myObj = Activator.CreateInstance(Type.GetType(modelName)); //(Make sure your modelName include namespace eg. NameSpace.ModelName)

0 para la respuesta № 2

Finalmente resolví esto de esta manera.

  public string Checker(int Id)
{


var dataContext = new PetaPoco.Database("MessageEntity");
var jsonOLD = dataContext.SingleOrDefault<OldData>("Select OldJson from MakerChecker2 where MakerCheckerId=@0", Id);
var jsonNEW = dataContext.SingleOrDefault<NewData>("Select NewJson from MakerChecker2 where MakerCheckerId=@0", Id);
var modelName = dataContext.SingleOrDefault<NameOfModel>("Select ModelName from MakerChecker2 where MakerCheckerId=@0", Id);

MakerCheckerModel mcmodel = new MakerCheckerModel();

mcmodel.OldJson = jsonOLD.OldJson;
mcmodel.NewJson = jsonNEW.NewJson;
mcmodel.ModelName = modelName.ModelName;
var modelname = mcmodel.ModelName;
string fullName = "MessageCompose.Models." + modelname;
Type type = Type.GetType(fullName);
Object obj = (Activator.CreateInstance(type));

dynamic olduser = JsonConvert.DeserializeObject(mcmodel.OldJson,obj.GetType());
dynamic newuser = JsonConvert.DeserializeObject(mcmodel.NewJson,obj.GetType());
}

Gracias a todos los que ayudaron. Puede ayudar a otros.