Объектный доступ к Cache из среды.NET Александр Харитонов, InterSystems
Предпосылки Много разработчиков приложений в среде.NET Много разработчиков приложений в среде.NET Необходимость предоставить возможность объектного доступа к Cache из.NET-приложений Необходимость предоставить возможность объектного доступа к Cache из.NET-приложений
Разработка приложений для Cache
Работа со статическими объектами Классы описываются в Caché Studio. Классы описываются в Caché Studio. - хранимые классы / классы для описания бизнес-логики в Caché Caché Object Binding Wizard создает.NET прокси-классы на основе классов, определенных в библиотеке классов Caché. Caché Object Binding Wizard создает.NET прокси-классы на основе классов, определенных в библиотеке классов Caché. - содержат вызовы методов и ссылки на свойства объектов Caché. Во время выполнения.NET-приложение подключается к серверу Caché, при этом можно создавать экземпляры.NET-объектов, которые связаны с объектами на сервере Caché. Во время выполнения.NET-приложение подключается к серверу Caché, при этом можно создавать экземпляры.NET-объектов, которые связаны с объектами на сервере Caché. - объекты используются также, как и другие объекты.NET.
Унифицированная архитектура
Cache Object Binding Wizard
Что нужно для работы Ссылка в проекте на CacheClient.dll Ссылка в проекте на CacheClient.dll Использование пространств имен Использование пространств имен –using InterSystems.Data.CacheClient; –using InterSystems.Data.CacheTypes; Добавление в проект описания.NET-классов, созданных Cache Object Binding Wizard Добавление в проект описания.NET-классов, созданных Cache Object Binding Wizard
Добавление ссылки
Подключение к серверу Cache CacheConnection CacheConnect; CacheConnection CacheConnect; try { CacheConnect = new CacheConnection(); CacheConnect.ConnectionString ="Server = localhost; Port = 56772; Namespace = SAMPLES;« + " Password = SYS; User ID = _SYSTEM;"; /* CacheConnect.ConnectionString = CacheConnection.ConnectDlg(); */ CacheConnect.Open(); } try { CacheConnect = new CacheConnection(); CacheConnect.ConnectionString ="Server = localhost; Port = 56772; Namespace = SAMPLES;« + " Password = SYS; User ID = _SYSTEM;"; /* CacheConnect.ConnectionString = CacheConnection.ConnectDlg(); */ CacheConnect.Open(); } catch (Exception eConn) { System.Console.WriteLine("Ошибка подключения: " + eConn.Message); } catch (Exception eConn) { System.Console.WriteLine("Ошибка подключения: " + eConn.Message); } System.Console.WriteLine("Подключение успешно."); System.Console.WriteLine("Подключение успешно.");
Базовые операции c Proxy-объектами Создание объекта Создание объекта –Sample.Person person = new Sample.Person(CacheConnect); Открытие объекта Открытие объекта –Sample.Person person = Sample.Person.OpenId(CacheConnect, "1"); Сохранение/удаление Сохранение/удаление –Save, DeleteId
Работа с коллекциями Можно использовать foreach Можно использовать foreach Привычные методы, такие как add, insert, и т.д. Привычные методы, такие как add, insert, и т.д. На примере работы с FavoriteColors, типа CacheListOfStrings На примере работы с FavoriteColors, типа CacheListOfStrings –foreach (string color in ColorList) { }
Исполнение запроса CacheConnect.Open(); string SQLtext = "SELECT * FROM Sample.Person WHERE ID = 1"; string SQLtext = "SELECT * FROM Sample.Person WHERE ID = 1"; CacheCommand Command = new CacheCommand(SQLtext, CacheConnect); CacheCommand Command = new CacheCommand(SQLtext, CacheConnect); CacheDataReader Reader = Command.ExecuteReader(); CacheDataReader Reader = Command.ExecuteReader(); while (Reader.Read()) { while (Reader.Read()) { Console.WriteLine(Reader[Reader.GetOrdinal("ID")] + ": " Console.WriteLine(Reader[Reader.GetOrdinal("ID")] + ": " + Reader[Reader.GetOrdinal("Name")]); + Reader[Reader.GetOrdinal("Name")]); }; }; Reader.Close(); Reader.Close(); Command.Dispose(); Command.Dispose(); CacheConnect.Close(); CacheConnect.Close();
Транзакции CacheTransaction Trans = CacheConnect.BeginTransaction(); CacheTransaction Trans = CacheConnect.BeginTransaction(); Trans.Commit Trans.Commit Trans.RollBack([savepoint]) Trans.RollBack([savepoint])
Спасибо за внимание