【问题标题】:How to Switch between Tables in MVC at runtime?如何在运行时在 MVC 中的表之间切换?
【发布时间】:2016-02-04 21:05:50
【问题描述】:

在带有实体框架的 MVC 项目中,模型具有类:

[Table("astrTableJan16")]
public class astrTable
{
[Key]
    public int ID { get; set; }   (...rest of variables)

在数据库中每个月有一个表,所以 astrTableJan16,astrTableFeb16,然后返回,astrTableDec15 等。我从 SQL Management Studio 手动创建表,复制原始表,

 SELECT * INTO astrTableNov15 FROM dbo.astrTable

目前要使用不同的月份,手动修改 [Table("")] 条目,并且项目运行(在调试器中),然后 CRUD 函数应用于该表。

目标是能够在运行时在这些表之间切换,以便在用户选择的月份为用户提供 CRUD 功能。将有一个下拉列表控件显示可用月份,用户选择月份,特定表已加载并可修改/保存。这可能吗?

已尝试使用来自

的 Sql 命令
 using System.Data.SqlClient;

目前可以读入数据,但必须重新定义 db.SaveChanges()。

如果可能的话,希望它只需要保留 ONE Model 类定义,否则该项目将需要每个月一个 Model 引用,如果是 10 年,则需要定义许多 Model;可以这样做,但我想以可靠性为主要目标正确设计它。

可以在运行时动态切换表吗?还是应该每月有一个模型,应用程序以这种方式直接引用该表?

【问题讨论】:

  • 这比添加月份列容易吗?.. 如果您想继续这样做,您可能只想使用存储过程
  • 我可以添加一列,但每个月大约有 400 列和近 100 条记录,每月
  • 你说表名变了但属性不变,所以每个月表都有相同的列?因此,如果您只是在一个表中添加了一个月列,那么您将拥有 401 列并且只有 12000 条记录?
  • 即使您将列拆分为一个键/值表,该表在 10 年内只有大约 480 万条记录.. 这不是很多
  • 听起来您将数据库用作电子表格的集合。你会让自己的生活变得非常困难。听听其他评论者......当“啊哈!”时刻到了,你就再也回不去了。

标签: c# sql-server asp.net-mvc entity-framework


【解决方案1】:
  • 在表中添加月份列:Month NVARCHAR(128) NOT NULL(字符串列)。 这不是一个好的数据类型,但它与您的表的其余部分一致,我现在不想介绍其他概念。
  • 在表格中添加年份列:Year INT NOT NULL

然后,当您想使用特定的月份/年份时,您可以像这样向数据库询问它:(例如 2016 年 1 月)

SELECT * FROM table WHERE Month = 'January' AND Year = 2016

添加列后,您需要将每个现有表合并到一个表中。因此,假设您的表现在存在,每个表都有(相同的)400 列。您的新表将有 402 列。每个现有表中的数据将在新表中按行堆叠。

例如: 现有表 2015 年 1 月

ID、数据 ...
1、某事
2、其他的

和 ExistingTableMar2015

ID、数据 ...
4、雅达
5、亚达亚达

将合并到 NewTable 中

ID、月、年、数据
2015 年 1 月 1 日,某事
2015 年 1 月 2 日,其他
2015年3月4日,雅达
5、2015年3月,亚达亚达

所以现在您有了一个存储所有数据的表,并且无需在运行时切换表。

【讨论】:

  • 好的,差不多是啊哈时刻;我添加了这 2 列。使用 SELECT 命令,它将读取该表,但我如何将更改写回同一张表? Edit [HttpPost] 方法具有 db.SaveChanges();我怎样才能将它指向正确的表?对不起,如果我很慢。
  • 它不会让我将非空列添加到现有表中,但这是一个小细节,我让 SELECT * 部分首先工作
  • 已编辑答案。如果您需要更多帮助,请继续提问。
  • 您将使用两个新列创建一个新表,而不是将它们添加到现有表中。
  • 是的,很好,但是 ID 将是重复的,我开始得到它,所以 402 列,每个表有 100 个(比如说)记录,每个记录的 ID 为 1 到 100;您是说将这些全部堆叠起来,每个月都放在一张表中,但是每个月的 ID 都是相同的,它们如何分组?希望不是手动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 2016-12-03
相关资源
最近更新 更多