Описание атрибутов классов данных и особенности их генерации
Определение атрибута
На диаграмме классов атрибут в классе определяется строкой вида:
[/)[AccessModifier)Name:Type[=DefaultValue)
, что соответствует нотации UML.
+ДатаРегистрации:DateTime=Now
+Статус:Статус=Рег
+idx:int=0
Что генерируется | Генерация в SQL DDL | Генерация в .Net-язык |
---|---|---|
”/” - если указано, атрибут является нехранимым | Если атрибут не является хранимым определение поля в CREATE TABLE не генерируется | Перед определением свойства указывается .Net-атрибут NotStoredAttribute (Namespace: ICSSoft.STORMNET, Assembly:ICSSoft.STORMNET.DataObject (in ICSSoft.STORMNET.DataObject.dll)) |
“AccessModifier” - модификатор сгенерированного в .Net-язык свойства | Никак | соответствующий модификатор свойства (# - protected, + - public, - - private) |
“Name”, “Type”- очевидно | в CREATE TABLE генерируется определение поля с именем атрибута (если другое имя не указано в дополнительном свойстве Storage), с типом, преобразованным от исходного согласно карте отображения типов | Виртуальное свойство с тем же именем и приватный член класса для этого свойства.Тип свойства и приватного члена - тип атрибута, преобразованный от исходного согласно карте отображения типов. |
“DefaultValue” - значение по-умолчанию (инициализатор). | Никак | Приватному члену прописывается инициализатор с указанным значением по-умолчанию. Если указано значение перечислимого типа, то генерируется инициализация значением этого типа. Если тип не перечислимый, то берётся соответствующий .Net-тип и проверяется, есть ли публичное статическое свойство с имением “DefaultValue”. Далее, если тип простой стандартный (из namespace System), генерируется простая инициализация константой (напр: int idx=0). В противном случае генерация останавливается с ошибкой. Замечание: Если вы создаете свой собственный тип на диаграмме (класс со стериотипом “type”), то, прежде чем задавать значение по-умолчанию, необходимо произвести компиляцию объектов. Лишь после компиляции можно задавать значение по-умолчанию и производить генерацию кода. |
Существует возможность указать объект данных в качестве типа атрибута.
Дополнительно редактируемые свойства
Для того чтобы отредактировать дополнительные свойства атрибута необходимо:
- Открыть дополнительные свойства класса;
- Щёлкнуть на закладке “Атрибуты”.
На закладке расположен список всех атрибутов класса:
Свойство-Описание | Генерация в SQL DDL | Генерация в .Net-язык |
AccessModifier - квалификатор доступа к атрибуту (public , private , protected ) |
Генерируется соответствующий квалификатор при объявлении класса (public , private , protected ) |
|
Stored - хранимый или нет атрибут |
Для хранимых атрибутов генерируется DDL-описание, для нехранимых - нет | Если атрибут нехранимый, то генерируется NotSotedAttribute |
Name - название атрибута |
||
Description |
Никак | DocComment перед определением свойства |
Type - тип атрибута |
Отображается в соответствии с картой типов | Отображается в соответствии с картой типов |
DefaultValue - дублирует определение атрибута |
||
NotNull - указывает, что данный атрибут не может иметь пустого (Null) значения. Для данного типа обязательно должно быть указано DefaultValue (значение по умолчанию) |
Если отмечено, то определение поля в CREATE TABLE генерируется как NOT NULL | Перед определением свойства генерируется указание атрибута NotNullAttribute (Namespace: ICSSoft.STORMNET, Assembly: ICSSoft.STORMNET.DataObject (in ICSSoft.STORMNET.DataObject.dll)) |
DataService expression - некоторое выражение, обеспечивающее счёт вычислимого атрибута |
Никак | Перед определением свойства генерируется указание атрибута DataServiceExpressionAttribute (Namespace: ICSSoft.STORMNET, Assembly: ICSSoft.STORMNET.DataObject (in ICSSoft.STORMNET.DataObject.dll)). |
Storage - некоторое логическое имя, под которым хранятся свойства |
Если указано, то такое и будет имя поля | Перед определением свойства генерируется указание атрибута PropertyStorageAttribute (Namespace: ICSSoft.STORMNET, Assembly: ICSSoft.STORMNET.DataObject (in ICSSoft.STORMNET.DataObject.dll)). |
Order - использовать ли упорядочение в случаях, когда объекты являются детейлами. |
Никак | Перед определением свойства генерируется указание атрибута OrderAttribute (Namespace: ICSSoft.STORMNET, Assembly: ICSSoft.STORMNET.DataObject (in ICSSoft.STORMNET.DataObject.dll)) |
Trim - для атрибутов строкового типа, применять ли удаление лишних пробелов в значениях |
Никак | Перед определением свойства генерируется указание атрибута TrimmedStringStorageAttribute (Namespace: ICSSoft.STORMNET, Assembly: ICSSoft.STORMNET.DataObject (in ICSSoft.STORMNET.DataObject.dll)) При установке значений в свойство Flexberry ORM применяет функцию string.Trim(). |
PBCustomAttributes - скобка программиста |
Никак | Если галочка указана - генерируется скобка программиста для “ручного” внесения .Net атрибутов перед кодом свойства. |
PBGetEnd - скобка программиста |
Никак | Если галочка указана - генерируется скобка программиста для “ручного” внесения кода перед концом аксессора get. |
PBGetStart - скобка программиста |
Никак | Если галочка указана - генерируется скобка программиста для “ручного” внесения кода после начала аксессора get. |
PBSetEnd - скобка программиста |
Никак | Если галочка указана - генерируется скобка программиста для “ручного” внесения кода перед концом аксессора set. |
PBSetStart - скобка программиста |
Никак | Если галочка указана - генерируется скобка программиста для “ручного” внесения кода после начала аксессора set. |
Autoincrement - поле является автоинкрементируемым (указание галочки корректно только для атрибутов, которые помечены NotNull и имеют тип, маппируемый на тип int ) |
Если отмечено, то у нового поля в таблице будет генерироваться IDENTITY(Seed,Increment), где Seed - ядро инкремента, Increment - шаг инкремента. По умолчанию Seed и Increment равны единице. Если указано DefaultValue , то в качестве Seed берётся значение DefaultValue . Если галочка указана - у соответствующего элемента добавляется атрибут DisableInsertPropertyAttribute . |
Свойство, для которого указан autoincrement , будет обновлять значения только при записи данных в базу, следовательно, выносить поле для редактирование этого свойства на форму редактирования бессмысленно и даже вредно. |
Hint - подсказка для поля |
Никак. | Никак (свойство используется не во всех плагинах генерации, генерируется подсказка, отображающая рядом с контролом, где представлено значение поля). |
Important: Изменение галочки
Autoincrement
у атрибута, который уже сгенерирован в базу данных, невозможно, поскольку MS SQL Server позволяет выполнить назначение необходимых свойств только путём удаления и повторного создания столбца. Если используется Autoincrement
, то обновление этого поля происходит не сразу, а после записи в БД. Это связано с механизмом работы IDENTITY(Seed,Increment). Как следствие, Вы не увидите изменений, пока не перевычитаете данные из БД.Пример
Если определение свойства выглядит так:
+Название:Строка100
То код будет следующий:
//....
private string fНазвание;
//....
// *** Start programmer edit section *** (Ошибка.Название CustomAttributes)
// *** End programmer edit section *** (Ошибка.Название CustomAttributes)
public virtual string Название
{
get
{
// *** Start programmer edit section *** (Ошибка.Название Get start)
// *** End programmer edit section *** (Ошибка.Название Get start)
string result = this.fНазвание;
// *** Start programmer edit section *** (Ошибка.Название Get end)
// *** End programmer edit section *** (Ошибка.Название Get end)
return result;
}
set
{
// *** Start programmer edit section *** (Ошибка.Название Set start)
// *** End programmer edit section *** (Ошибка.Название Set start)
this.fНазвание = value;
// *** Start programmer edit section *** (Ошибка.Название Set end)
// *** End programmer edit section *** (Ошибка.Название Set end)
}
}