如何在运行时使用C#动态创建模型

时间:2019-01-09 10:16:34

标签: c# .net dictionary model-view-controller reflection

我必须创建一个方法来对我的所有表执行crud操作。

EntitySave()
EntityUpdate()
EntityGetList()

创建此方法后,我想对该方法中的所有表执行所有操作。 因此,当我必须从客户端保存数据时。我只需要传递表名和参数中的值以将数据保存到该特定表中即可(我想在运行时创建模型)。用技术术语来说,我已经创建了通用的Crud方法来进行插入更新删除,因此只能使用一种方法我可以在不同的表上执行所有这些操作。

 public ActionResult method()
    {

        var Dict =  HttpContext.Application["SiteSettings"] as Dictionary<string, Dictionary<string, Dictionary<string, string>>>;
        string value = "";
        foreach(var key in Dict.Keys)
        {
              value = key;
        }

        Assembly Exectuteassembly = Assembly.GetExecutingAssembly();
        Type Etity = Exectuteassembly.GetType(value);
        object TGalaxyUserInstance = Activator.CreateInstance(Etity);
        PropertyInfo[] properties = Etity.GetProperties(
   BindingFlags.NonPublic | // Include protected and private properties
   BindingFlags.Public | // Also include public properties
   BindingFlags.Instance // Specify to retrieve non static properties
   );

        string[] values = new string[4];
        values[0] = "0";
        values[1] = "ThisTesting";
        values[2] = "Howto";
        values[3] = "UseInstance";
        for (int i = 0, j = 0; j < properties.Length; j++, i++)
        {
            if(i==0 && j == 0)
            {
                properties[i].SetValue(TGalaxyUserInstance, j, null);
            }
            else
            {
                properties[i].SetValue(TGalaxyUserInstance,values[j], null);
            }

        }


        using (var _mSession = ApplicationCore.Instance.SessionFactory.OpenSession())
        {
            using (var transaction = _mSession.BeginTransaction())
            {

                _mSession.Save(TGalaxyUserInstance);
                transaction.Commit();
            }
        }
        return RedirectToAction("List", "Home");


    }

1 个答案:

答案 0 :(得分:0)

您要应用存储库模式。下面的链接提供了一个可以帮助您的示例。 https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design 通过使用泛型解决了传递表的问题,示例也表明了这一点。