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需要字符串参数。我不能简单地通过我的变量我仍然困在这里有人请帮忙