C# 如何在c mvc中实例化从数据库中动态获取名称的模型
我已将模型名称保存在数据库中。我通过某种查询获得它。现在我需要将模型的名称保存在某种类型的变量中,并动态地实例化它,以便我可以使用它进行进一步的处理。我想要这样的东西。请帮忙C# 如何在c mvc中实例化从数据库中动态获取名称的模型,c#,asp.net-mvc,C#,Asp.net Mvc,我已将模型名称保存在数据库中。我通过某种查询获得它。现在我需要将模型的名称保存在某种类型的变量中,并动态地实例化它,以便我可以使用它进行进一步的处理。我想要这样的东西。请帮忙 public string Checker(int Id) { var dataContext = new PetaPoco.Database("MessageEntity"); var jsonOLD = dataContext.SingleOrDefault<OldData>("Select
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);
}
请帮忙 您需要存储模型名称空间的全名。ModelName
var myObj = Activator.CreateInstance(Type.GetType("NameSpace.Model"));
希望这有帮助
检查这个
如果你还面临任何问题,请告诉我
更新:
假设这是你的代码
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);
我最终以这种方式解决了这个问题
var myObj = Activator.CreateInstance(Type.GetType(modelName)); //(Make sure your modelName include namespace eg. NameSpace.ModelName)
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());
}
感谢所有帮助过你的人。它可能会帮助其他人你必须有一本字典,其中包含你从数据库中得到的字符串和方法实例化。这样你就可以通过字符串动态地实例化相关的方法。@SemiDemented你能帮我举个简单的例子吗?如果我的答案有帮助,那么把它标记为已回答,这样它也可以帮助其他人。谢谢你的回复。但是,当我以这种方式从db动态获取模型名称时,如何硬编码模型名称insideNameSpace.model呢。var modelName=dataContext.singleOrdefault从MakerChecker2中选择modelName,其中MakerCheckerId=@0,Id;我希望我理解了你的建议。是的,我检查了modelName包含名称空间,但var myObj=Activator.CreateInstanceType.GetTypemodelName;表示参数类型无效。GetType需要字符串参数。我不能简单地通过我的变量我仍然困在这里有人请帮忙