如何在运行时在MVC中切换表?

时间:2016-02-04 21:05:50

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

在具有Entity Framework的MVC项目中,Model具有类:

[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功能。将有一个DropDown列表控件显示可用月份,用户选择月份, 特定表已加载并可以修改/保存。这可能吗?

尝试过使用

中的Sql命令
 using System.Data.SqlClient;

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

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

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

1 个答案:

答案 0 :(得分:0)

  • 在表格中添加一个月份列:"—-"(字符串列)。 这不是一个好的数据类型,但它与表的其他部分一致,我现在不想引入其他概念。
  • 在表格中添加年份列:Month NVARCHAR(128) NOT NULL

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

Year INT NOT NULL

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

例如: ExistingTableJan2015

  

ID,数据......
  1,什么
  2,别的什么

和ExistingTableMar2015

  

ID,数据......
  4,yadda
  5,yada yada

将合并到NewT​​able

  

ID,月,年,数据
  1,2015年1月,有事   2,2015年1月,其他内容
  4,2015年3月,yada
  5,2015年3月,yada yada

所以现在你有一个存储所有数据的表,而且不需要在运行时切换表。