ASP.net MVC动态地改变数据库结构和更新模型

时间:2014-09-17 05:39:23

标签: asp.net-mvc oracle

我正处于设计Web应用程序架构的阶段。我想在后端使用asp.net mvc5和oracle数据库。

我的项目的一个基本要求是应用程序的管理员用户可以添加/删除表单字段。我想在运行时(而非设计时)在数据库表中物理添加/删除列。

如何在mvc中实现它以及如何在运行时动态更新模型?

我应该使用一些ORM还是我为此设计数据访问层?

我只需要建筑设计方法的建议和提示。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用以下表结构

,而不是在运行时物理添加和删除字段
Field Name              Field Type
CustomField1Name        Nvarchar(256)
CustomField1Value       Nvarchar(Max)
CustomField1IsVisible   Bool
CustomField1FieldType   Nvarchar(32)  [char/numeric/bool etc]
CustomField1Required    Bool

CustomField2Name        Nvarchar(256)
CustomField2Value       Nvarchar(Max)
CustomField2IsVisible   Bool
CustomField2FieldType   Nvarchar(32)
CustomField2Required    Bool

如果您需要更多字段特定信息(如自定义验证),可以在此处添加。

对所需的自定义字段重复此操作。由于这种设计,在运行时,DB级别不会发生结构更改。您可以在编码级别进行的所有更改。

答案 1 :(得分:0)

实体属性值模式是一种方法。在我看来,如果过度使用,这将成为一种反模式。这有一些缺点,例如将每个值存储为字符串。您可能会发现很难解析" true +"作为一个博尔。您也可以使用弱类型的方式或弱类型的数据集来执行此操作。如果你想走这条路线,你实际上就是要创建列。不授予用户创建列的权限,授予他们执行创建列的proc的权限。