@ Ответ Jean-Bernard Pellerin определенно будет работать. Но то, что мне не нравится в этом подходе, состоит в том, что все столбцы, кроме идентификатора, должны иметь значение NULL или иметь значения по умолчанию, которые могут не иметь смысла для объекта. Из-за этого я стараюсь не требовать резервирования кода или идентификатора для объекта до его создания.
Но иногда вы не можете этого избежать. В этом случае я разделил объект на два разных объекта - один для фактического объекта, а другой - для отслеживания процесса его создания. Например, если ваша запись является объектом Record
, у вас также будет объект RecordCreation
. RecordCreation
имеет свойство для вашего зарезервированного значения кода, а также имеет свойство DateTime с нулевым значением с именем DateComplete
. Когда вы идете создать новый объект, вы фактически создаете объект RecordCreation
и задаете его значение кода - это сохраняет его код. Затем, когда вы будете готовы создать реальный объект, вы также обновите столбец DateComplete
. Это имеет ряд преимуществ:
- У вас нет частично завершенных объектов, которые никогда не заканчивались, создавая вашу базу данных.
- У вас есть запись о попытках создать сущность, которая никогда не завершалась, и у вас есть запись о попытках, которые преуспели.
Если вы думаете об этом, эти сущности действительно служат двум отдельным деловым целям. Поэтому имеет смысл иметь две сущности.
Заключительное примечание. Конечно, вы можете просто удалить объект RecordCreation
после завершения объекта Record
. Но тогда у вас нет регистрации, поэтому устранение неполадок приложения сложнее. Я предпочитаю отмечать его датой.
Что вы подразумеваете под кодом? Вы хотите сказать, что хотите сохранить значение PK для записи, прежде чем вставлять ее? – Jim
@ Jim Нет кода - это другое поле в моей таблице –
Если вы используете SQL Server ** 2012 **, вы можете посмотреть на ['SEQUENCE'] (http://msdn.microsoft.com/ru -us/library/ff878091.aspx), чтобы достичь этого. В противном случае вам придется подождать, пока строка ** IS ** не будет вставлена и не будет использоваться столбец «INT IDENTITY», который автоматически получает значение при вставке. –