Я пишу простой генератор кода в C# для автоматизации общих задач в приложениях бизнес-процессов, таких как привязка данных, моделирование и создание модели изображений и обновление записей.Каков наилучший способ реализации обновлений записей на ORM?
Сгенерированный код использует преобразователь данных, который реализует equallity путем сравнения ссылок (без id) и свойств флага для состояния переходного процесса (если объект был создан, но не сохраняется).
Для обновления свойств объекта У меня есть 3 варианта:
на свойстве сеттер вызвать UPDATE для одного столбца только немедленно. Это обеспечило бы мгновенную настойчивость без какого-либо другого меканизма, управляемого конечным программистом, но это потребовало бы и ненужного количества вызовов UPDATE.
Mantain a Frozen state на всех объектах, которые предотвратили бы любые свойства, а также методы BeginModification и EndModification, который позволит включить средства создания свойств и ОБНОВИТЬ все измененные столбцы в EndModification. Это требует, чтобы программист вызывал эти методы, которые нежелательны для генератора кода, поскольку его простота и простота в применении к программному обеспечению являются его основной целью.
Mantain таймер для каждого объекта (который может быть реализован как глобальный таймер и локальный счетчики) и давать определенное «грязное время» сущностям, когда свойство задано, его грязное время сбрасывается до 0 и когда его локальные часы получают определенные значения, будут созданы столбцы UPDATE. Для этого не требуется никакого внешнего кода конечного программиста и woud group несколько наборов свойств в одном UPDATE, потому что наборы свойств contiguos имеют почти 0 раз между ними.
Подход таймера может быть объединен с методом CommitChanges, который будет называть UPDATE немедленно при желании
Моего Предпочитаемым способом является локальным загрязнен таймером, так как вешать нулевое вмешательства программиста, кроме наборов свойств, вопрос is: Возможно, что этот таймер aproach приведет к несогласованности данных?
Я не совсем понимаю вашу идею таймера. Почему нужен таймер? –
Imo, если вы можете использовать Microsoft Sql Server, то проект базы данных Visual Studio SQL вместе с PetaPoco - лучшая система, которую вы можете построить с помощью современных технологий без необходимости изобретать любые колеса.Проект базы данных в visual studio позволяет вам 100% контролировать ваши таблицы SQL/хранимые процедуры и т. Д., И это позволяет вам легко развернуть его и обрабатывать обновления/слияния схемы для вас. И peta poco, вероятно, самый быстрый (микроорм), который вы можете использовать. Мы используем этот подход и TT-шаблоны петапоко для создания наших pocos. –
Таймер предназначен для устранения необходимости метода CommitChanges, теперь я понимаю, что это плохая идея и что изменения данных должны быть сделаны явно. Сгенерированный код уже работает бок о бок с Entity Framework и SqlServer .net api и поддерживает схемы схемы базы данных (только таблицы и хранимые процедуры). Поскольку цель состоит в создании многоплатформенного и многорежимного кода RDBMS, мы решили создать нашу собственную простую, но функциональную ORM, чтобы работать со схожими слоями данных на всех из них – rafael