public void Записать()
{
//Установка блокировки элемента на горизантально масштабированный кластер.
//Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки.
//Выделение сервиса для блокировки элемента и генерации кода
//Выполнение операций контроля без обращений к sql-серверу.
//Контроль конфликта блокировок.
//Контроль загрузки булкинсертом гетерогенной коллекции.
//Контроль уникальности кода для справочников.
//Контроль уникальности номера для документов, в границах префикса.
//Контроль владельца, он не может быть группой.
//Контроль владельца он должен быть задан.
//Контроль родителя он должен быть группой.
//Контроль количества уровней, должен соотвествовать метаданным.
//Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника.
//Контроль уникальности ссылки
//Контроль зацикливания
//Опционально контроль битых ссылок.
//Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента.
using (var Подключение = new SqlConnection(СтрокаСоединения))
{
Подключение.Open();
using (var Команда = Подключение.CreateCommand())
{
if(_ЭтоНовый)
{
Команда.CommandText = @"
Insert Into _Reference23119(
_IDRRef
/*,_Version*/
,_Marked
,_IsMetadata
,_Description
,_Fld23699
,_Fld23700
,_Fld23701
,_Fld23702
,_Fld23703RRef
,_Fld23704
,_Fld23705RRef
,_Fld23706RRef
,_Fld23707)
Values(
@Ссылка
/*,@Версия*/
,@ПометкаУдаления
,@Предопределенный
,@Наименование
,@ВерсияКомпоненты
,@ИдентификаторУстройства
,@УстройствоОтключено
,@УстройствоИспользуется
,@ОбработчикДрайвера
,@Параметры
,@РабочееМесто
,@ТипОборудования
,@ТребуетсяПереустановка)";
}
else
{
Команда.CommandText = @"
Update _Reference23119
Set
/*_IDRRef = @Ссылка*/
/*,_Version = @Версия*/
_Marked = @ПометкаУдаления
,_IsMetadata = @Предопределенный
,_Description = @Наименование
,_Fld23699 = @ВерсияКомпоненты
,_Fld23700 = @ИдентификаторУстройства
,_Fld23701 = @УстройствоОтключено
,_Fld23702 = @УстройствоИспользуется
,_Fld23703RRef = @ОбработчикДрайвера
,_Fld23704 = @Параметры
,_Fld23705RRef = @РабочееМесто
,_Fld23706RRef = @ТипОборудования
,_Fld23707 = @ТребуетсяПереустановка
Where _IDRRef = @Ссылка";
}
Команда.Parameters.AddWithValue("Ссылка", Ссылка.ToByteArray());
/*Команда.Parameters.AddWithValue("Версия", Версия);*/
Команда.Parameters.AddWithValue("ПометкаУдаления", ПометкаУдаления);
Команда.Parameters.AddWithValue("Предопределенный", Предопределенный);
Команда.Parameters.AddWithValue("Наименование", Наименование);
Команда.Parameters.AddWithValue("ВерсияКомпоненты", ВерсияКомпоненты);
Команда.Parameters.AddWithValue("ИдентификаторУстройства", ИдентификаторУстройства);
Команда.Parameters.AddWithValue("УстройствоОтключено", УстройствоОтключено);
Команда.Parameters.AddWithValue("УстройствоИспользуется", УстройствоИспользуется);
Команда.Parameters.AddWithValue("ОбработчикДрайвера", ОбработчикДрайвера.Ключ());
Команда.Parameters.AddWithValue("Параметры",new byte[0]);
Команда.Parameters.AddWithValue("РабочееМесто", РабочееМесто.Ссылка);
Команда.Parameters.AddWithValue("ТипОборудования", ТипОборудования.Ключ());
Команда.Parameters.AddWithValue("ТребуетсяПереустановка", ТребуетсяПереустановка);
Команда.ExecuteNonQuery();
}
}
}