public void Записать()
{
//Установка блокировки элемента на горизантально масштабированный кластер.
//Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки.
//Выделение сервиса для блокировки элемента и генерации кода
//Выполнение операций контроля без обращений к sql-серверу.
//Контроль конфликта блокировок.
//Контроль загрузки булкинсертом гетерогенной коллекции.
//Контроль уникальности кода для Документов.
//Контроль уникальности номера для документов, в границах префикса.
//Контроль владельца, он не может быть группой.
//Контроль владельца он должен быть задан.
//Контроль родителя он должен быть группой.
//Контроль количества уровней, должен соотвествовать метаданным.
//Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника.
//Контроль уникальности ссылки
//Контроль зацикливания
//Опционально контроль битых ссылок.
//Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента.
using (var Подключение = new SqlConnection(СтрокаСоединения))
{
Подключение.Open();
using (var Команда = Подключение.CreateCommand())
{
if(_ЭтоНовый)
{
Команда.CommandText = @"
Insert Into _Document294(
_IDRRef
/*,_Version*/
,_Marked
,_IsMetadata
,_Number
,_Fld5341RRef
,_Fld5342RRef
,_Fld5343
,_Fld5344
,_Fld5345RRef
,_Fld5346
,_Fld5347
,_Fld26788RRef
,_Fld5349
,_Fld5350
,_Fld26789RRef
,_Fld5354
,_Fld5355
,_Fld26790RRef
,_Fld26791RRef
,_Fld26792RRef
,_Fld26793
,_Fld26794
,_Fld5352RRef
,_Fld5353
,_Fld5348
,_Fld26795
,_Fld5351)
Values(
@Ссылка
/*,@Версия*/
,@ПометкаУдаления
,@Номер
,@Физлицо
,@Организация
,@ВидИсполнительногоДокумента
,@РеквизитыИсполнительногоДокумента
,@Получатель
,@ДатаНачала
,@ДатаОкончания
,@СпособРасчетаУдержания
,@Размер
,@Предел
,@ПрожиточныйМинимум
,@ДатаДействия
,@ПроцентПочтовогоСбора
,@Тариф
,@СпособПеречисленияПоИсполнительномуЛисту
,@ТарифБанкаНаДенежныеПереводы
,@ПочтовыйСборРассчитыватьПроцентом
,@ДанныеПрошлойВерсии
,@Ответственный
,@Комментарий
,@УдалитьСпособРасчетаИЛ
,@УдалитьСпособРасчетаПС
,@УдалитьУчитыватьБольничныеЛисты)";
}
else
{
Команда.CommandText = @"
Update _Document294
Set
/*_IDRRef = @Ссылка*/
/*,_Version = @Версия*/
_Marked = @ПометкаУдаления
,_Number = @Номер
,_Fld5341RRef = @Физлицо
,_Fld5342RRef = @Организация
,_Fld5343 = @ВидИсполнительногоДокумента
,_Fld5344 = @РеквизитыИсполнительногоДокумента
,_Fld5345RRef = @Получатель
,_Fld5346 = @ДатаНачала
,_Fld5347 = @ДатаОкончания
,_Fld26788RRef = @СпособРасчетаУдержания
,_Fld5349 = @Размер
,_Fld5350 = @Предел
,_Fld26789RRef = @ПрожиточныйМинимум
,_Fld5354 = @ДатаДействия
,_Fld5355 = @ПроцентПочтовогоСбора
,_Fld26790RRef = @Тариф
,_Fld26791RRef = @СпособПеречисленияПоИсполнительномуЛисту
,_Fld26792RRef = @ТарифБанкаНаДенежныеПереводы
,_Fld26793 = @ПочтовыйСборРассчитыватьПроцентом
,_Fld26794 = @ДанныеПрошлойВерсии
,_Fld5352RRef = @Ответственный
,_Fld5353 = @Комментарий
,_Fld5348 = @УдалитьСпособРасчетаИЛ
,_Fld26795 = @УдалитьСпособРасчетаПС
,_Fld5351 = @УдалитьУчитыватьБольничныеЛисты
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("Предел", Предел);
Команда.Parameters.AddWithValue("ДатаДействия", ДатаДействия);
Команда.Parameters.AddWithValue("ПроцентПочтовогоСбора", ПроцентПочтовогоСбора);
Команда.Parameters.AddWithValue("СпособПеречисленияПоИсполнительномуЛисту", СпособПеречисленияПоИсполнительномуЛисту.Ключ());
Команда.Parameters.AddWithValue("ПочтовыйСборРассчитыватьПроцентом", ПочтовыйСборРассчитыватьПроцентом);
Команда.Parameters.AddWithValue("ДанныеПрошлойВерсии", ДанныеПрошлойВерсии);
Команда.Parameters.AddWithValue("Комментарий", Комментарий);
Команда.Parameters.AddWithValue("УдалитьСпособРасчетаИЛ", УдалитьСпособРасчетаИЛ);
Команда.Parameters.AddWithValue("УдалитьСпособРасчетаПС", УдалитьСпособРасчетаПС);
Команда.Parameters.AddWithValue("УдалитьУчитыватьБольничныеЛисты", УдалитьУчитыватьБольничныеЛисты);
Команда.ExecuteNonQuery();
}
}
}