2016-02-04 3 views
1

В проекте MVC с Entity Framework, модель имеет класс:Как переключаться между таблицами в 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 для пользователя в течение месяца, который они выбирают. Появится элемент управления DropDown, показывающий доступные месяцы, пользователь выбирает месяц, а - определенная таблица загружается и может быть изменена/сохранена. Это возможно?

Пытались с помощью Sql команды из

using System.Data.SqlClient; 

До сих пор данные могут быть считаны в, но db.SaveChanges() должен быть переопределен.

И, надеюсь, для этого необходимо сохранить только определение класса ОДНОЙ модели, иначе для проекта потребуется одна ссылка на модель за каждый месяц, и если в течение 10 лет существует множество моделей для определения; Это можно сделать таким образом, но я хочу правильно его спроектировать с надежностью в качестве основной цели.

Можно ли переключить стол на лету во время работы? Или должна быть одна Модель в месяц, и приложение напрямую ссылается на таблицу таким образом?

+2

Это проще, чем добавление столбца месяца? .. Возможно, вы просто хотите использовать хранимую процедуру, если хотите продолжать делать это таким образом. – JamieD77

+0

Я могу добавить столбец, но для каждого месяца есть около 400 столбцов и почти 100 записей, в месяц –

+1

вы говорите, что имя таблицы меняется, но не свойства, поэтому каждая таблица месяца имеет одинаковые столбцы? поэтому, если вы просто добавили столбец месяца в одну таблицу, у вас было бы 401 столбцов и всего 12000 записей? – JamieD77

ответ

0
  • Добавить колонку месяца в таблицу: Month NVARCHAR(128) NOT NULL (строка колонка). Это не очень хороший тип данных, но он согласуется с остальной частью таблицы, и я не хочу вводить дополнительные понятия прямо сейчас.
  • Добавить колонку в год: Year INT NOT NULL.

Затем, когда вы хотите работать с определенным месяц/год вы спрашиваете базу данных для него следующим образом: (например, январь 2016)

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

После добавления столбцов, вы хотите объединить каждая из существующих таблиц в одну таблицу. Так что скажем, что ваши таблицы, как они существуют сейчас, имеют (то же самое) 400 столбцов. В вашей новой таблице будет 402 столбца. Данные из каждой из существующих таблиц будут складываться в строки в новой таблице.

Например: ExistingTableJan2015

ID, данные ...
1, что-то
2, что-то еще

и ExistingTableMar2015

ID, данные. ..
4, ядда
5, болтовня

сливаться бы в Новая_таблица

ID, месяц, год, данные
1, январь, 2015, что-то
2, январь, 2015 , что-то еще
4, март, 2015, yada
5 марта 2015 года, yada yada

Итак, теперь у вас есть одна таблица, в которой хранятся все ваши данные, и нет необходимости переключать таблицы во время выполнения.

+0

Хорошо, почти момент ах-ха; Я добавляю эти 2 столбца. С помощью команды SELECT она будет читать эту таблицу, но как я могу записать изменения обратно в ту же таблицу? Метод Edit [HttpPost] имеет db.SaveChanges(); Как я могу указать его на правую таблицу? Извините, если я медленно. –

+0

Это не позволило мне добавить не существующие столбцы в существующую таблицу, но это небольшая деталь, я получаю SELECT * часть, обрабатывающую сначала –

+0

отредактированный ответ. Если вам нужна дополнительная помощь, продолжайте задавать вопросы. –