Зачем использовать ECM7?
Всю информацию можно узнать на сайте проекта ECM7.Migrator ссылка на NuGet. Тут я опишу почему мы его стали использовать на работе. В решениях используем EntityFramework с Code First подход при работе с базой данных. Для этого EntityFramework умеет создавать, на основе объектной модели, сущности в базе данных. Данные об этих сущностях хранятся в миграциях, а их применением и версионностью занимается DbMigrator. Все было бы хорошо, но есть одно ограничение - все миграции должны находиться в проекте с DbContext. И в ситуации, если решение состоит из плагинов, каждому из которых требуется своя структура в базе, это ограничение требует, что бы все миграции до подключения плагина уже были применены к базе. Но в этом случае теряется смысл в выделении модулей и подключении только нужных.
Для решения мы использовали ECM7.Migrator, на который пришлось переписать создание базы данных решения, а модульные миграции без проблем перенесли в другие сборки.
Работа с DateTime2.
Решения из коробки у версии ECM7 2.8.0.0, для работы с типом DateTime2, найдено не было, но это лечится простым добавлением типа в карту типов SqlServerTransformationProvider.
using System.Data; using System.Data.SqlClient; namespace ECM7.Migrator.Providers.SqlServer { /// <summary> /// Extended <see cref="SqlServerTransformationProvider"/> MSSQL provider. /// </summary> internal class ExtendedSqlServerTransformationProvider : SqlServerTransformationProvider { /// <summary> /// <see cref="ExtendedSqlServerTransformationProvider"/> constructor. /// </summary> public ExtendedSqlServerTransformationProvider(SqlConnection connection, int commandTimeout) : base(connection, commandTimeout) { typeMap.Put(DbType.DateTime2, "DATETIME2"); } } }
Комментариев нет:
Отправить комментарий