public static Guid Ссылка(this Занятость Значение) { switch (Значение) { case Занятость.Свободно: return(Свободно); case Занятость.Занято: return(Занято); case Занятость.Недоступно: return(Недоступно); } return(Guid.Empty); }
public static Занятость Получить(this Занятость Значение, Guid Ссылка) { if (Ссылка == Свободно) { return(Занятость.Свободно); } else if (Ссылка == Занято) { return(Занятость.Занято); } else if (Ссылка == Недоступно) { return(Занятость.Недоступно); } return(Занятость.ПустаяСсылка); }
public void Записать() { //Установка блокировки элемента на горизантально масштабированный кластер. //Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки. //Выделение сервиса для блокировки элемента и генерации кода //Выполнение операций контроля без обращений к sql-серверу. //Контроль конфликта блокировок. //Контроль загрузки булкинсертом гетерогенной коллекции. //Контроль уникальности кода для Документов. //Контроль уникальности номера для документов, в границах префикса. //Контроль владельца, он не может быть группой. //Контроль владельца он должен быть задан. //Контроль родителя он должен быть группой. //Контроль количества уровней, должен соотвествовать метаданным. //Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника. //Контроль уникальности ссылки //Контроль зацикливания //Опционально контроль битых ссылок. //Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента. using (var Подключение = new SqlConnection(СтрокаСоединения)) { Подключение.Open(); using (var Команда = Подключение.CreateCommand()) { if (_ЭтоНовый) { Команда.CommandText = @" Insert Into _Document445( _IDRRef /*,_Version*/ ,_Marked ,_IsMetadata ,_Number ,_Fld11319RRef ,_Fld11320 ,_Fld11321 ,_Fld11322 ,_Fld11323RRef ,_Fld22027RRef) Values( @Ссылка /*,@Версия*/ ,@ПометкаУдаления ,@Номер ,@Занятость ,@Комментарий ,@ДатаНачала ,@ДатаОкончания ,@Ответственный ,@Помещение)" ; } else { Команда.CommandText = @" Update _Document445 Set /*_IDRRef = @Ссылка*/ /*,_Version = @Версия*/ _Marked = @ПометкаУдаления ,_Number = @Номер ,_Fld11319RRef = @Занятость ,_Fld11320 = @Комментарий ,_Fld11321 = @ДатаНачала ,_Fld11322 = @ДатаОкончания ,_Fld11323RRef = @Ответственный ,_Fld22027RRef = @Помещение Where _IDRRef = @Ссылка" ; } Команда.Parameters.AddWithValue("Ссылка", Ссылка.ToByteArray()); /*Команда.Parameters.AddWithValue("Версия", Версия);*/ Команда.Parameters.AddWithValue("ПометкаУдаления", ПометкаУдаления); Команда.Parameters.AddWithValue("Номер", Номер); Команда.Parameters.AddWithValue("Занятость", Занятость.Ключ()); Команда.Parameters.AddWithValue("Комментарий", Комментарий); Команда.Parameters.AddWithValue("ДатаНачала", ДатаНачала); Команда.Parameters.AddWithValue("ДатаОкончания", ДатаОкончания); Команда.ExecuteNonQuery(); } } }
public static byte[] Ключ(this Занятость Значение) { return(Ссылка(Значение).ToByteArray()); }
public static Занятость Получить(this Занятость Значение, byte[] Ссылка) { return(Получить(Значение, new Guid(Ссылка))); }