【问题标题】:dynamically generate a model based on a SQL Table in ASP.Net在 ASP.Net 中基于 SQL 表动态生成模型
【发布时间】:2018-06-20 03:56:28
【问题描述】:

我正在尝试创建一个可以基于 SQL 表动态构建的模型。我不会事先知道 SQL 表,所以模型需要是动态的。可能的表太多,无法为每个表预先构建模型。我希望用户能够通过,从列表中选择一个表,然后根据该表生成一个模型。任何见解或方向将不胜感激。谢谢

【问题讨论】:

  • 模型通常是强类型的,因此在构建时是已知的。你的用户是谁?开发者还是应用程序用户?
  • 您是否意识到添加(模型)类需要重新构建应用程序?您是否考虑过 Entity Framework DB First 开发?
  • 这是一个相当广泛的问题,所以这里有一个同样广泛的建议(不回答):许多 CMS(例如 Sitefinity)允许为网络创建自定义内容类型。然后它会创建某种模式文档,每次应用程序启动时都会持久化和加载,以便能够引用表。他们使用 Open Access 作为 ORM。我不确定此功能是否是 Open Access 的一项功能,或者它们是否只是建立在它之上。其他 CMS 必须做类似的事情(动态内容类型)。所有此类创建的模型都必须继承自同一类型的 CRUD

标签: c# asp.net asp.net-mvc model-view-controller


【解决方案1】:

我能想到几种略有不同的方法。所有人都会考虑使用代码生成器(例如 T4 文本模板工具)

我们使用的一种方法是将所有 Columnsdefinition 和 Tabledefinition 映射到数据库中单独的自己的表中。这并不是非常必要的,因为您可以使用数据库的 Information_Schema 来检索简单模型所需的信息。但!一旦您需要列和表的其他信息(这种情况更可能发生),我会考虑将它们映射为自己的表中的自己的数据记录。

具体我的意思是列和表定义是创建模型所需的信息。 例如。表 DialogColumn 具有像 Columnname (nVarchar)、displayname (nVarchar)、recordhistory (bit)、UID_Dialogtable 和其他一些表示模型属性的“元”数据列。一个表,让我们将其命名为 Dialogtable,然后提供所有属性,例如。表名、显示名、onsavingscript 等。

利用这些信息,您可以生成类型包装器作为模型。 您最好将它们创建为编译器构建过程中的前一步,或者只创建一次(取决于您的架构)。 为了扩展和更改模型结构,您可以编写一个单独的工具,为您管理数据库中的表和列条目并编译您需要的程序集。

等等等等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多