2015-12-23 2 views
1

У меня есть очень простая студент модель собственность,управления недвижимостью в MVC

public int ID { get; set; } 

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

department id + batch id + its own auto-incremented value 

Должен ли я отключить его личность? Я хочу, чтобы он был сгенерирован автоматически. Как я могу обрабатывать это и где (модель, представление или контроллер)?

ответ

0

You can't update pmk in EF

Вы никогда не должны обновлять ПМК таблицы в любом случае. Если вы хотите автоматически генерировать pmk для поля, просто используйте номер random для каждого учащегося.

+0

Использование случайного числа для генерации ключа для объекта будет работать в течение короткого времени, но создаст столкновения с большей частотой по мере роста таблицы. Наверное, это не лучшее решение. – ohiodoug

+0

вот что я тоже думал @ohiodoug –

0

Есть несколько подходов вы могли бы взять с собой, создав таблицу ...

Можно было бы удалить автоматическое приращение и добавить собственное значение для записи.

Профи: У вас есть полный контроль над идентификатором, который вы собираетесь вставить.

Против: Параллелизм будет проблемой в том, что другой процесс мог бы уже записать идентификатор, который вы собираетесь написать. Кроме того, вам все равно придется держать где-нибудь работающий счетчик или анализировать существующие идентификаторы записей.

Другим подходом является создание дополнительного поля идентификатора на вашей таблице, которое можно заполнить на основе комбинированных значений, которые вы хотите.

Пункты: База данных обрабатывает дополнительные поля для идентификации. Против: Вам нужно будет сделать несколько звонков в базу данных, чтобы вставить новую запись. Предполагая, что дефид и batchid не находятся в таблице (поэтому вы не можете использовать триггер), вам нужно будет вставить, получить идентификатор, а затем запустить инструкцию обновления для заполнения поля нового идентификатора.

Конечно, вы всегда можете иметь отделы и партии в отдельных таблицах с внешними ключами в таблице ваших учеников. Данные по-прежнему сохраняются, и вы можете использовать объединения для отчетов или того, что вам нужно, а не для разбора полей идентификатора.

Что касается того, где этот код принадлежит ..., который зависит от архитектуры вашего приложения. Если у вас есть хороший репозиторий, вы можете инкапсулировать эту логику в свою функцию вставки/создания. Если нет, то я боюсь, что контроллер, вероятно, там, где вам придется придерживаться этой логики, которая будет немного грязной.

Надеюсь, это поможет и удачи!

+0

ну спасибо. если я создаю дополнительное поле для привязки этих идентификаторов, что будет лучшим местом для этого? это контроллер? следует ли использовать var и назначать эти данные и сохранять их вместе с другими? –

+0

Если вы создадите поле таким образом, вам придется сначала вставить свою запись, а затем снова обновить модель, чтобы заполнить второе поле идентификатора.Конечно, не удивительно, но если у вас нет большого количества вставок, вы, вероятно, не заметите много проблем, связанных с производительностью. Если у вас нет менеджера или репозитория, чтобы помочь вам обернуть ваши действия, тогда действие контроллера - это то место, где вы остаетесь делать эту логику. – ohiodoug

+0

Получите ваши ноги влажными, используя действие контроллера сейчас, а затем вернитесь и прочитайте о различных шаблонах архитектуры и посмотрите, как вы могли бы реорганизовать абстрактную эту логику немного лучше. – ohiodoug

Смежные вопросы