示例#1
0
        protected virtual IModel CreateModel(
            [NotNull] DbContext context,
            [CanBeNull] IConventionSetBuilder conventionSetBuilder,
            [NotNull] IModelValidator validator)
        {
            Check.NotNull(context, nameof(context));
            Check.NotNull(validator, nameof(validator));

            var conventionSet = CreateConventionSet(conventionSetBuilder);
            var model         = new Model();

            var productVersion = typeof(ModelSource).GetTypeInfo().Assembly
                                 .GetCustomAttribute <AssemblyInformationalVersionAttribute>()?.InformationalVersion;

            model[CoreAnnotationNames.ProductVersionAnnotation] = productVersion;

            var modelBuilder = new ModelBuilder(conventionSet, model);

            FindSets(modelBuilder, context);

            OnModelCreating(context, modelBuilder);

            modelBuilder.Validate();

            validator.Validate(model);

            return(model);
        }
        protected virtual IModel CreateModel(
            [NotNull] DbContext context,
            [CanBeNull] IConventionSetBuilder conventionSetBuilder,
            [NotNull] IModelValidator validator)
        {
            Check.NotNull(context, nameof(context));
            Check.NotNull(validator, nameof(validator));

            var conventionSet = CreateConventionSet(conventionSetBuilder);
            var model         = new Model();

            model.SetProductVersion(ProductInfo.GetVersion());

            var modelBuilder = new ModelBuilder(conventionSet, model);

            FindSets(modelBuilder, context);

            OnModelCreating(context, modelBuilder);

            modelBuilder.Validate();

            validator.Validate(model);

            return(model);
        }
        /// <summary>
        ///     <para>
        ///         Creates the service dependencies parameter object for a <see cref="HistoryRepository" />.
        ///     </para>
        ///     <para>
        ///         Do not call this constructor directly from either provider or application code as it may change
        ///         as new dependencies are added. Instead, use this type in your constructor so that an instance
        ///         will be created and injected automatically by the dependency injection container. To create
        ///         an instance with some dependent services replaced, first resolve the object from the dependency
        ///         injection container, then replace selected services using the 'With...' methods. Do not call
        ///         the constructor at any point in this process.
        ///     </para>
        ///     <para>
        ///         This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///         directly from your code. This API may change or be removed in future releases.
        ///     </para>
        /// </summary>
        /// <param name="databaseCreator"> The database creator. </param>
        /// <param name="rawSqlCommandBuilder"> A command builder for building raw SQL commands. </param>
        /// <param name="connection"> The connection to the database. </param>
        /// <param name="options"> Options for the current context instance. </param>
        /// <param name="modelDiffer"> The model differ. </param>
        /// <param name="migrationsSqlGenerator"> The SQL generator for Migrations operations. </param>
        /// <param name="sqlGenerationHelper"> Helpers for generating update SQL. </param>
        /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
        /// <param name="typeMappingSource"> The type mapper. </param>
        /// <param name="modelLogger"> The logger for model building events. </param>
        public HistoryRepositoryDependencies(
            [NotNull] IRelationalDatabaseCreator databaseCreator,
            [NotNull] IRawSqlCommandBuilder rawSqlCommandBuilder,
            [NotNull] IRelationalConnection connection,
            [NotNull] IDbContextOptions options,
            [NotNull] IMigrationsModelDiffer modelDiffer,
            [NotNull] IMigrationsSqlGenerator migrationsSqlGenerator,
            [NotNull] ISqlGenerationHelper sqlGenerationHelper,
            [NotNull] IConventionSetBuilder conventionSetBuilder,
            [NotNull] IRelationalTypeMappingSource typeMappingSource,
            [NotNull] IDiagnosticsLogger <DbLoggerCategory.Model> modelLogger)
        {
            Check.NotNull(databaseCreator, nameof(databaseCreator));
            Check.NotNull(rawSqlCommandBuilder, nameof(rawSqlCommandBuilder));
            Check.NotNull(connection, nameof(connection));
            Check.NotNull(options, nameof(options));
            Check.NotNull(modelDiffer, nameof(modelDiffer));
            Check.NotNull(migrationsSqlGenerator, nameof(migrationsSqlGenerator));
            Check.NotNull(sqlGenerationHelper, nameof(sqlGenerationHelper));
            Check.NotNull(conventionSetBuilder, nameof(conventionSetBuilder));
            Check.NotNull(typeMappingSource, nameof(typeMappingSource));
            Check.NotNull(modelLogger, nameof(modelLogger));

            DatabaseCreator      = databaseCreator;
            RawSqlCommandBuilder = rawSqlCommandBuilder;
            Connection           = connection;
            Options                = options;
            ModelDiffer            = modelDiffer;
            MigrationsSqlGenerator = migrationsSqlGenerator;
            SqlGenerationHelper    = sqlGenerationHelper;
            ConventionSetBuilder   = conventionSetBuilder;
            TypeMappingSource      = typeMappingSource;
            ModelLogger            = modelLogger;
        }
        /// <summary>
        ///     <para>
        ///         Creates the service dependencies parameter object for a <see cref="HistoryRepository" />.
        ///     </para>
        ///     <para>
        ///         Do not call this constructor directly from either provider or application code as it may change
        ///         as new dependencies are added. Instead, use this type in your constructor so that an instance
        ///         will be created and injected automatically by the dependency injection container. To create
        ///         an instance with some dependent services replaced, first resolve the object from the dependency
        ///         injection container, then replace selected services using the 'With...' methods. Do not call
        ///         the constructor at any point in this process.
        ///     </para>
        ///     <para>
        ///         This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///         directly from your code. This API may change or be removed in future releases.
        ///     </para>
        /// </summary>
        /// <param name="databaseCreator"> The database creator. </param>
        /// <param name="rawSqlCommandBuilder"> A command builder for building raw SQL commands. </param>
        /// <param name="connection"> The connection to the database. </param>
        /// <param name="options"> Options for the current context instance. </param>
        /// <param name="modelDiffer"> The model differ. </param>
        /// <param name="migrationsSqlGenerator"> The SQL generator for Migrations operations. </param>
        /// <param name="sqlGenerationHelper"> Helpers for generating update SQL. </param>
        /// <param name="coreConventionSetBuilder"> The core convention set to use when creating the model. </param>
        /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
        public HistoryRepositoryDependencies(
            [NotNull] IRelationalDatabaseCreator databaseCreator,
            [NotNull] IRawSqlCommandBuilder rawSqlCommandBuilder,
            [NotNull] IRelationalConnection connection,
            [NotNull] IDbContextOptions options,
            [NotNull] IMigrationsModelDiffer modelDiffer,
            [NotNull] IMigrationsSqlGenerator migrationsSqlGenerator,
            [NotNull] ISqlGenerationHelper sqlGenerationHelper,
            [NotNull] ICoreConventionSetBuilder coreConventionSetBuilder,
            [NotNull] IConventionSetBuilder conventionSetBuilder)
        {
            Check.NotNull(databaseCreator, nameof(databaseCreator));
            Check.NotNull(rawSqlCommandBuilder, nameof(rawSqlCommandBuilder));
            Check.NotNull(connection, nameof(connection));
            Check.NotNull(options, nameof(options));
            Check.NotNull(modelDiffer, nameof(modelDiffer));
            Check.NotNull(migrationsSqlGenerator, nameof(migrationsSqlGenerator));
            Check.NotNull(sqlGenerationHelper, nameof(sqlGenerationHelper));
            Check.NotNull(coreConventionSetBuilder, nameof(coreConventionSetBuilder));
            Check.NotNull(conventionSetBuilder, nameof(conventionSetBuilder));

            DatabaseCreator      = databaseCreator;
            RawSqlCommandBuilder = rawSqlCommandBuilder;
            Connection           = connection;
            Options                  = options;
            ModelDiffer              = modelDiffer;
            MigrationsSqlGenerator   = migrationsSqlGenerator;
            SqlGenerationHelper      = sqlGenerationHelper;
            CoreConventionSetBuilder = coreConventionSetBuilder;
            ConventionSetBuilder     = conventionSetBuilder;
        }
        /// <summary>
        ///     Returns the model from the cache, or creates a model if it is not present in the cache.
        /// </summary>
        /// <param name="context"> The context the model is being produced for. </param>
        /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
        /// <returns> The model to be used. </returns>
        public virtual IModel GetModel(
            DbContext context,
            IConventionSetBuilder conventionSetBuilder)
        {
            var cache    = Dependencies.MemoryCache;
            var cacheKey = Dependencies.ModelCacheKeyFactory.Create(context);

retry:
            if (!cache.TryGetValue(cacheKey, out Lazy <IModel> model))
            {
                if (!_modelSyncObjects.TryAdd(cacheKey, value: null))
                {
                    goto retry;
                }

                try
                {
                    // Using a Lazy here so that OnModelCreating, etc. really only gets called once, since it may not be thread safe.
                    model = new Lazy <IModel>(
                        () => CreateModel(context, conventionSetBuilder),
                        LazyThreadSafetyMode.ExecutionAndPublication);

                    cache.Set(cacheKey, model, new MemoryCacheEntryOptions {
                        Size = 100, Priority = CacheItemPriority.High
                    });
                }
                finally
                {
                    _modelSyncObjects.TryRemove(cacheKey, out _);
                }
            }

            return(model.Value);
        }
示例#6
0
 /// <summary>
 ///     Returns the model from the cache, or creates a model if it is not present in the cache.
 /// </summary>
 /// <param name="context"> The context the model is being produced for. </param>
 /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
 /// <param name="validator"> The validator to verify the model can be successfully used with the context. </param>
 /// <returns> The model to be used. </returns>
 public virtual IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
 => _models.GetOrAdd(
     Dependencies.ModelCacheKeyFactory.Create(context),
     // Using a Lazy here so that OnModelCreating, etc. really only gets called once, since it may not be thread safe.
     k => new Lazy <IModel>(
         () => CreateModel(context, conventionSetBuilder, validator),
         LazyThreadSafetyMode.ExecutionAndPublication)).Value;
示例#7
0
        /// <summary>
        ///     Returns the model from the cache, or creates a model if it is not present in the cache.
        /// </summary>
        /// <param name="context"> The context the model is being produced for. </param>
        /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
        /// <param name="modelDependencies"> The dependencies object for the model. </param>
        /// <returns> The model to be used. </returns>
        public virtual IModel GetModel(
            DbContext context,
            IConventionSetBuilder conventionSetBuilder,
            ModelDependencies modelDependencies)
        {
            var cache    = Dependencies.MemoryCache;
            var cacheKey = Dependencies.ModelCacheKeyFactory.Create(context);

            if (!cache.TryGetValue(cacheKey, out IModel model))
            {
                // Make sure OnModelCreating really only gets called once, since it may not be thread safe.
                lock (_syncObject)
                {
                    if (!cache.TryGetValue(cacheKey, out model))
                    {
                        model = CreateModel(context, conventionSetBuilder, modelDependencies);
                        model = cache.Set(cacheKey, model, new MemoryCacheEntryOptions {
                            Size = 100, Priority = CacheItemPriority.High
                        });
                    }
                }
            }

            return(model);
        }
示例#8
0
        /// <summary>
        ///     Creates the model. This method is called when the model was not found in the cache.
        /// </summary>
        /// <param name="context"> The context the model is being produced for. </param>
        /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
        /// <param name="validator"> The validator to verify the model can be successfully used with the context. </param>
        /// <returns> The model to be used. </returns>
        protected virtual IModel CreateModel(
            [NotNull] DbContext context,
            [CanBeNull] IConventionSetBuilder conventionSetBuilder,
            [NotNull] IModelValidator validator)
        {
            Check.NotNull(context, nameof(context));
            Check.NotNull(validator, nameof(validator));

            var conventionSet = CreateConventionSet(conventionSetBuilder);

            var modelBuilder         = new ModelBuilder(conventionSet);
            var internalModelBuilder = ((IInfrastructure <InternalModelBuilder>)modelBuilder).Instance;

            internalModelBuilder.Metadata.SetProductVersion(ProductInfo.GetVersion());

            FindSets(modelBuilder, context);

            ModelCustomizer.Customize(modelBuilder, context);

            internalModelBuilder.Validate();

            validator.Validate(modelBuilder.Model);

            return(modelBuilder.Model);
        }
            protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
            {
                var model = base.CreateModel(context, conventionSetBuilder, validator) as Model;

                model["AllYourModelAreBelongTo"] = "Us!";

                return model;
            }
示例#10
0
            protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
            {
                var model = base.CreateModel(context, conventionSetBuilder, validator) as Model;

                model["AllYourModelAreBelongTo"] = "Us!";

                return(model);
            }
示例#11
0
        /// <summary>
        ///     Creates the convention set to be used for the model. Uses the <see cref="CoreConventionSetBuilder" />
        ///     if <paramref name="conventionSetBuilder" /> is null.
        /// </summary>
        /// <param name="conventionSetBuilder"> The convention set builder to be used. </param>
        /// <returns> The convention set to be used. </returns>
        protected virtual ConventionSet CreateConventionSet([CanBeNull] IConventionSetBuilder conventionSetBuilder)
        {
            var conventionSet = CoreConventionSetBuilder.CreateConventionSet();

            return(conventionSetBuilder == null
                ? conventionSet
                : conventionSetBuilder.AddConventions(conventionSet));
        }
        protected IModel CreateModel(
            DbContext context,
            IConventionSetBuilder conventionSetBuilder)
        {
            var modelBuilder = new ModelBuilder(conventionSetBuilder.CreateConventionSet());

            _dependencies.ModelCustomizer.Customize(modelBuilder, context);
            return(modelBuilder.Model);
        }
        /// <summary>
        ///     Returns the model from the cache, or creates a model if it is not present in the cache.
        /// </summary>
        /// <param name="context"> The context the model is being produced for. </param>
        /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
        /// <returns> The model to be used. </returns>
        public virtual IModel GetModel(
            DbContext context,
            IConventionSetBuilder conventionSetBuilder)
        {
            var modelBuilder = new ModelBuilder(conventionSetBuilder.CreateConventionSet());

            Dependencies.ModelCustomizer.Customize(modelBuilder, context);
            return(modelBuilder.FinalizeModel());
        }
 /// <summary>
 ///     Clones this dependency parameter object with one service replaced.
 /// </summary>
 /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
 /// <returns> A new parameter object with the given service replaced. </returns>
 public HistoryRepositoryDependencies With([NotNull] IConventionSetBuilder conventionSetBuilder)
 => new HistoryRepositoryDependencies(
     DatabaseCreator,
     RawSqlCommandBuilder,
     Connection,
     Options,
     ModelDiffer,
     MigrationsSqlGenerator,
     SqlGenerationHelper,
     CoreConventionSetBuilder,
     conventionSetBuilder);
示例#15
0
        protected override IModel CreateModel(
            DbContext context, IConventionSetBuilder conventionSetBuilder, ModelDependencies modelDependencies)
        {
            var modelBuilder = new ModelBuilder(conventionSetBuilder.CreateConventionSet(), modelDependencies);

            Dependencies.ModelCustomizer.Customize(modelBuilder, context);

            _onModelCreating(modelBuilder, context);

            return(modelBuilder.FinalizeModel());
        }
示例#16
0
 /// <summary>
 ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
 ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
 ///     any release. You should only use it directly in your code with extreme caution and knowing that
 ///     doing so can result in application failures when updating to a new Entity Framework Core release.
 /// </summary>
 public SnapshotModelProcessor(
     [NotNull] IOperationReporter operationReporter,
     [NotNull] IConventionSetBuilder conventionSetBuilder)
 {
     _operationReporter = operationReporter;
     _relationalNames   = new HashSet <string>(
         typeof(RelationalAnnotationNames)
         .GetRuntimeFields()
         .Where(p => p.Name != nameof(RelationalAnnotationNames.Prefix))
         .Select(p => ((string)p.GetValue(null)).Substring(RelationalAnnotationNames.Prefix.Length - 1)));
     _conventionSetBuilder = conventionSetBuilder;
 }
示例#17
0
        /// <summary>
        ///     Creates the model. This method is called when the model was not found in the cache.
        /// </summary>
        /// <param name="context"> The context the model is being produced for. </param>
        /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
        /// <returns> The model to be used. </returns>
        protected virtual IModel CreateModel(
            [NotNull] DbContext context,
            [NotNull] IConventionSetBuilder conventionSetBuilder)
        {
            Check.NotNull(context, nameof(context));

            var modelBuilder = new ModelBuilder(conventionSetBuilder.CreateConventionSet());

            Dependencies.ModelCustomizer.Customize(modelBuilder, context);

            return(modelBuilder.FinalizeModel());
        }
示例#18
0
        /// <summary>
        ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
        ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
        ///     any release. You should only use it directly in your code with extreme caution and knowing that
        ///     doing so can result in application failures when updating to a new Entity Framework Core release.
        /// </summary>
        public ModelCreationDependencies(
            [NotNull] IModelSource modelSource,
            [NotNull] IConventionSetBuilder conventionSetBuilder,
            [NotNull] ModelDependencies modelDependencies)
        {
            Check.NotNull(modelSource, nameof(modelSource));
            Check.NotNull(conventionSetBuilder, nameof(conventionSetBuilder));
            Check.NotNull(modelDependencies, nameof(modelDependencies));

            ModelSource          = modelSource;
            ConventionSetBuilder = conventionSetBuilder;
            ModelDependencies    = modelDependencies;
        }
 /// <summary>
 ///     Clones this dependency parameter object with one service replaced.
 /// </summary>
 /// <param name="conventionSetBuilder"> The core convention set to use when creating the model. </param>
 /// <returns> A new parameter object with the given service replaced. </returns>
 public HistoryRepositoryDependencies With([NotNull] IConventionSetBuilder conventionSetBuilder)
 => new HistoryRepositoryDependencies(
     DatabaseCreator,
     RawSqlCommandBuilder,
     Connection,
     Options,
     ModelDiffer,
     MigrationsSqlGenerator,
     SqlGenerationHelper,
     conventionSetBuilder,
     TypeMappingSource,
     CurrentContext,
     ModelLogger,
     CommandLogger);
示例#20
0
        protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
        {
            var conventionSet = CreateConventionSet(conventionSetBuilder);

            conventionSet.ModelBuiltConventions.Add(new ValidatingConvention(validator));

            var modelBuilder = new ModelBuilder(conventionSet);

            Dependencies.ModelCustomizer.Customize(modelBuilder, context);

            _onModelCreating(modelBuilder, context);

            return(modelBuilder.FinalizeModel());
        }
        protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
        {
            var conventionSet = CreateConventionSet(conventionSetBuilder);
            var model = new Model();
            var modelBuilder = new ModelBuilder(conventionSet, model);

            FindSets(modelBuilder, context);

            _onModelCreating(modelBuilder);

            validator.Validate(model);

            return model;
        }
示例#22
0
        protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
        {
            var conventionSet = CreateConventionSet(conventionSetBuilder);
            var model         = new Model();
            var modelBuilder  = new ModelBuilder(conventionSet, model);

            FindSets(modelBuilder, context);

            _onModelCreating(modelBuilder);

            validator.Validate(model);

            return(model);
        }
示例#23
0
        protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
        {
            var conventionSet = CreateConventionSet(conventionSetBuilder);

            var modelBuilder = new ModelBuilder(conventionSet);
            var model = (Model)modelBuilder.Model;
            model.SetProductVersion(ProductInfo.GetVersion());

            FindSets(modelBuilder, context);

            _onModelCreating(modelBuilder);

            model.Validate();
            validator.Validate(model);

            return model;
        }
        protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
        {
            var conventionSet = CreateConventionSet(conventionSetBuilder);

            var modelBuilder = new ModelBuilder(conventionSet);
            var model        = (Model)modelBuilder.Model;

            model.SetProductVersion(ProductInfo.GetVersion());

            FindSets(modelBuilder, context);

            _onModelCreating(modelBuilder);

            model.Validate();
            validator.Validate(model);

            return(model);
        }
        protected override IModel CreateModel(
            DbContext context,
            IConventionSetBuilder conventionSetBuilder,
            IModelValidator validator,
            IDiagnosticsLogger <DbLoggerCategory.Model.Validation> validationLogger)
        {
            var conventionSet = conventionSetBuilder.CreateConventionSet();

            conventionSet.ModelFinalizedConventions.Add(new ValidatingConvention(validator, validationLogger));

            var modelBuilder = new ModelBuilder(conventionSet);

            Dependencies.ModelCustomizer.Customize(modelBuilder, context);

            _onModelCreating(modelBuilder, context);

            return(modelBuilder.FinalizeModel());
        }
        /// <summary>
        ///     Creates the model. This method is called when the model was not found in the cache.
        /// </summary>
        /// <param name="context"> The context the model is being produced for. </param>
        /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
        /// <param name="validator"> The validator to verify the model can be successfully used with the context. </param>
        /// <returns> The model to be used. </returns>
        protected virtual IModel CreateModel(
            [NotNull] DbContext context,
            [NotNull] IConventionSetBuilder conventionSetBuilder,
            [NotNull] IModelValidator validator)
        {
            Check.NotNull(context, nameof(context));
            Check.NotNull(validator, nameof(validator));

            var conventionSet = CreateConventionSet(conventionSetBuilder);

            conventionSet.ModelBuiltConventions.Add(new ValidatingConvention(validator));

            var modelBuilder = new ModelBuilder(conventionSet);

            Dependencies.ModelCustomizer.Customize(modelBuilder, context);

            return(modelBuilder.FinalizeModel());
        }
示例#27
0
        /// <summary>
        ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
        ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
        ///     any release. You should only use it directly in your code with extreme caution and knowing that
        ///     doing so can result in application failures when updating to a new Entity Framework Core release.
        /// </summary>
        public Migrator(
            [NotNull] IMigrationsAssembly migrationsAssembly,
            [NotNull] IHistoryRepository historyRepository,
            [NotNull] IDatabaseCreator databaseCreator,
            [NotNull] IMigrationsSqlGenerator migrationsSqlGenerator,
            [NotNull] IRawSqlCommandBuilder rawSqlCommandBuilder,
            [NotNull] IMigrationCommandExecutor migrationCommandExecutor,
            [NotNull] IRelationalConnection connection,
            [NotNull] ISqlGenerationHelper sqlGenerationHelper,
            [NotNull] ICurrentDbContext currentContext,
            [NotNull] IConventionSetBuilder conventionSetBuilder,
            [NotNull] IDiagnosticsLogger <DbLoggerCategory.Migrations> logger,
            [NotNull] IDiagnosticsLogger <DbLoggerCategory.Database.Command> commandLogger,
            [NotNull] IDatabaseProvider databaseProvider)
        {
            Check.NotNull(migrationsAssembly, nameof(migrationsAssembly));
            Check.NotNull(historyRepository, nameof(historyRepository));
            Check.NotNull(databaseCreator, nameof(databaseCreator));
            Check.NotNull(migrationsSqlGenerator, nameof(migrationsSqlGenerator));
            Check.NotNull(rawSqlCommandBuilder, nameof(rawSqlCommandBuilder));
            Check.NotNull(migrationCommandExecutor, nameof(migrationCommandExecutor));
            Check.NotNull(connection, nameof(connection));
            Check.NotNull(sqlGenerationHelper, nameof(sqlGenerationHelper));
            Check.NotNull(currentContext, nameof(currentContext));
            Check.NotNull(conventionSetBuilder, nameof(conventionSetBuilder));
            Check.NotNull(logger, nameof(logger));
            Check.NotNull(commandLogger, nameof(commandLogger));
            Check.NotNull(databaseProvider, nameof(databaseProvider));

            _migrationsAssembly       = migrationsAssembly;
            _historyRepository        = historyRepository;
            _databaseCreator          = (IRelationalDatabaseCreator)databaseCreator;
            _migrationsSqlGenerator   = migrationsSqlGenerator;
            _rawSqlCommandBuilder     = rawSqlCommandBuilder;
            _migrationCommandExecutor = migrationCommandExecutor;
            _connection           = connection;
            _sqlGenerationHelper  = sqlGenerationHelper;
            _currentContext       = currentContext;
            _conventionSetBuilder = conventionSetBuilder;
            _logger         = logger;
            _commandLogger  = commandLogger;
            _activeProvider = databaseProvider.Name;
        }
        protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
        {
            var conventionSet = CreateConventionSet(conventionSetBuilder);

            var modelBuilder = new ModelBuilder(conventionSet);
            var model        = modelBuilder.GetInfrastructure().Metadata;

            model.SetProductVersion(ProductInfo.GetVersion());

            Dependencies.ModelCustomizer.Customize(modelBuilder, context);

            _onModelCreating(modelBuilder, context);

            model.Validate();

            validator.Validate(model);

            return(model);
        }
示例#29
0
 public TemporalTableMigrator(
     IMigrationsAssembly migrationsAssembly,
     IHistoryRepository historyRepository,
     IDatabaseCreator databaseCreator,
     IEnumerable <IMigrationsSqlGenerator> migrationsSqlGenerators,
     IRawSqlCommandBuilder rawSqlCommandBuilder,
     IMigrationCommandExecutor migrationCommandExecutor,
     IRelationalConnection connection,
     ISqlGenerationHelper sqlGenerationHelper,
     ICurrentDbContext currentDbContext,
     IConventionSetBuilder conventionSetBuilder,
     IDiagnosticsLogger <DbLoggerCategory.Migrations> logger,
     IDiagnosticsLogger <DbLoggerCategory.Database.Command> commandLogger,
     IDatabaseProvider databaseProvider,
     ITemporalTableSqlExecutor <TContext> temporalTableSqlExecutor)
     : base(migrationsAssembly, historyRepository, databaseCreator, resolveMigrationsSqlGenerator(migrationsSqlGenerators), rawSqlCommandBuilder, migrationCommandExecutor, connection, sqlGenerationHelper, currentDbContext, conventionSetBuilder, logger, commandLogger, databaseProvider)
 {
     this.temporalTableSqlExecutor = temporalTableSqlExecutor;
 }
示例#30
0
        protected override IModel CreateModel(
            [NotNull] DbContext context,
            [NotNull] IConventionSetBuilder conventionSetBuilder,
            [NotNull] IModelValidator validator)
        {
            var conventionSet = CreateConventionSet(conventionSetBuilder);

            var modelBuilder = new BorlandModelBuilder(conventionSet, context);
            var model        = modelBuilder.GetInfrastructure().Metadata;

            model[CoreAnnotationNames.ProductVersionAnnotation] = ProductInfo.GetVersion();

            Dependencies.ModelCustomizer.Customize(modelBuilder, context);

            model.Validate();

            validator.Validate(model);

            return(model);
        }
示例#31
0
        /// <summary>
        ///     Creates the model. This method is called when the model was not found in the cache.
        /// </summary>
        /// <param name="context"> The context the model is being produced for. </param>
        /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
        /// <param name="validator"> The validator to verify the model can be successfully used with the context. </param>
        /// <param name="validationLogger"> The validation loggers to use. </param>
        /// <returns> The model to be used. </returns>
        protected virtual IModel CreateModel(
            [NotNull] DbContext context,
            [NotNull] IConventionSetBuilder conventionSetBuilder,
            [NotNull] IModelValidator validator,
            [NotNull] IDiagnosticsLogger <DbLoggerCategory.Model.Validation> validationLogger)
        {
            Check.NotNull(context, nameof(context));
            Check.NotNull(validator, nameof(validator));
            Check.NotNull(validationLogger, nameof(validationLogger));

            var conventionSet = conventionSetBuilder.CreateConventionSet();

            conventionSet.ModelFinalizedConventions.Add(new ValidatingConvention(validator, validationLogger));

            var modelBuilder = new ModelBuilder(conventionSet);

            Dependencies.ModelCustomizer.Customize(modelBuilder, context);

            return(modelBuilder.FinalizeModel());
        }
示例#32
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PluginHistoryRepositoryDependencies"/> class.
 /// </summary>
 /// <param name="rawSqlCommandBuilder">The raw SQL command builder.</param>
 /// <param name="connection">The connection.</param>
 /// <param name="currentContext">The current context.</param>
 /// <param name="conventionSetBuilder">The convention set builder.</param>
 /// <param name="modelDiffer">The model differ.</param>
 /// <param name="migrationsSqlGenerator">The migrations SQL generator.</param>
 /// <param name="sqlGenerationHelper">The SQL generation helper.</param>
 /// <param name="typeMappingSource">The type mapping source.</param>
 /// <param name="commandLogger">The command logger.</param>
 public PluginHistoryRepositoryDependencies(
     IRawSqlCommandBuilder rawSqlCommandBuilder,
     IRelationalConnection connection,
     ICurrentDbContext currentContext,
     IConventionSetBuilder conventionSetBuilder,
     IMigrationsModelDiffer modelDiffer,
     IMigrationsSqlGenerator migrationsSqlGenerator,
     ISqlGenerationHelper sqlGenerationHelper,
     IRelationalTypeMappingSource typeMappingSource,
     IDiagnosticsLogger <DbLoggerCategory.Database.Command> commandLogger)
 {
     RawSqlCommandBuilder   = rawSqlCommandBuilder;
     Connection             = connection;
     CurrentContext         = currentContext;
     ConventionSetBuilder   = conventionSetBuilder;
     ModelDiffer            = modelDiffer;
     MigrationsSqlGenerator = migrationsSqlGenerator;
     SqlGenerationHelper    = sqlGenerationHelper;
     TypeMappingSource      = typeMappingSource;
     CommandLogger          = commandLogger;
 }
        protected override IModel CreateModel(
            DbContext context,
            IConventionSetBuilder conventionSetBuilder,
            IModelValidator validator)
        {

            var conventionSet = CreateConventionSet(conventionSetBuilder);

            var modelBuilder = new MaterializingModelBuilder(conventionSet);
            var internalModelBuilder = ((IInfrastructure<InternalModelBuilder>)modelBuilder).Instance;

            internalModelBuilder.Metadata.SetProductVersion(ProductInfo.GetVersion());

            FindSets(modelBuilder, context);

            ModelCustomizer.Customize(modelBuilder, context);

            internalModelBuilder.Validate();

            validator.Validate(modelBuilder.Model);

            return modelBuilder.Model;
        }
示例#34
0
        /// <summary>
        ///     Creates the model. This method is called when the model was not found in the cache.
        /// </summary>
        /// <param name="context"> The context the model is being produced for. </param>
        /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
        /// <param name="validator"> The validator to verify the model can be successfully used with the context. </param>
        /// <returns> The model to be used. </returns>
        protected virtual IModel CreateModel(
            [NotNull] DbContext context,
            [NotNull] IConventionSetBuilder conventionSetBuilder,
            [NotNull] IModelValidator validator)
        {
            Check.NotNull(context, nameof(context));
            Check.NotNull(validator, nameof(validator));

            var conventionSet = CreateConventionSet(conventionSetBuilder);

            var modelBuilder = new ModelBuilder(conventionSet);
            var model        = modelBuilder.GetInfrastructure().Metadata;

            model.SetProductVersion(ProductInfo.GetVersion());

            Dependencies.ModelCustomizer.Customize(modelBuilder, context);

            model.Validate();

            validator.Validate(model);

            return(model);
        }
示例#35
0
 /// <summary>
 ///     Returns the model from the cache, or creates a model if it is not present in the cache.
 /// </summary>
 /// <param name="context"> The context the model is being produced for. </param>
 /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
 /// <param name="validator"> The validator to verify the model can be successfully used with the context. </param>
 /// <returns> The model to be used. </returns>
 public virtual IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
     => _models.GetOrAdd(ModelCacheKeyFactory.Create(context), k => CreateModel(context, conventionSetBuilder, validator));
示例#36
0
 public virtual IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator = null)
 {
     return null;
 }
示例#37
0
 public virtual IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
     => _models.GetOrAdd(context.GetType(), k => CreateModel(context, conventionSetBuilder, validator));
 public override IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator) 
     => _testModelSource.GetModel(context, conventionSetBuilder, validator);