Exemplo n.º 1
0
        public EntityMapper(IDbConnection dbConnection, IEnumerable <Database> targetDatabases, Assembly[] assembliesOfModelTypes = null,
                            IDatabaseMapper defaultDatabaseMapper = null, Action onPostEntityMapping = null, ISqlGenerator sqlGenerator = null)
        {
            if (dbConnection == null)
            {
                throw new ArgumentNullException("Database connection can not be null.");
            }

            if (sqlGenerator != null)
            {
                SqlGenerator = sqlGenerator;
            }
            else
            {
                SetDefaultSqlGenerator();
            }

            DefaultDatabaseMapper = defaultDatabaseMapper ?? new SqlServerDatabaseMapper();
            TargetDatabases       = targetDatabases;

            if (dbConnection.State == ConnectionState.Closed)
            {
                dbConnection.Open();
            }

            MapTablesToEntities(dbConnection, assembliesOfModelTypes);

            onPostEntityMapping?.Invoke();
        }
        public void UseConverter()
        {
            var idColumn = new ColumnInfo()
            {
                Name         = nameof(ConverterDto.Id),
                PropertyInfo = GetPropertyInfo <ConverterDto>(nameof(ConverterDto.Id))
            };
            var nameColumn = new ColumnInfo()
            {
                Name         = nameof(ConverterDto.Name),
                PropertyInfo = GetPropertyInfo <ConverterDto>(nameof(ConverterDto.Name)),
                Converter    = new NullToStringConverter()
            };
            var tableInfo = new TableInfo(new[] { idColumn, nameColumn }, new List <PropertyInfo>(), null)
            {
                Name = nameof(ConverterDto)
            };

            KORM.Query.IQueryProvider queryProvider = Substitute.For <KORM.Query.IQueryProvider>();
            IDatabaseMapper           mapper        = Substitute.For <IDatabaseMapper>();

            mapper.GetTableInfo <ConverterDto>().Returns(tableInfo);
            var query = new Query <ConverterDto>(mapper, queryProvider);

            var generator = new CommandGenerator <ConverterDto>(tableInfo, queryProvider, query);
            var dto       = new ConverterDto()
            {
                Id = 1, Name = null
            };
            var convertedValue = generator.GetColumnValue(nameColumn, dto);

            convertedValue.Should().Be("NULL");
        }
Exemplo n.º 3
0
        /// <summary>
        /// Inherits the properties from the selected <paramref name="inheritMapper"/>.
        /// </summary>
        /// <param name="inheritMapper">The <see cref="IDatabaseMapper"/> to inherit from.</param>
        public void InheritPropertiesFrom <T>(IDatabaseMapper <T> inheritMapper) where T : class, new()
        {
            if (inheritMapper == null)
            {
                throw new ArgumentNullException(nameof(inheritMapper));
            }

            if (!SrceType.GetTypeInfo().IsSubclassOf(typeof(T)))
            {
                throw new ArgumentException($"Type {typeof(T).Name} must inherit from {SrceType.Name}.");
            }

            var pe   = Expression.Parameter(SrceType, "x");
            var type = typeof(DatabaseMapper <>).MakeGenericType(SrceType);

            foreach (var p in inheritMapper.Mappings.OfType <IDatabasePropertyMapper>())
            {
                var lex  = Expression.Lambda(Expression.Property(pe, p.SrcePropertyName), pe);
                var pmap = (IDatabasePropertyMapper)type
                           .GetMethod("Property", BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)
                           .MakeGenericMethod(p.SrcePropertyType)
                           .Invoke(this, new object[] { lex, p.DestPropertyName, p.OperationTypes });

                if (p.IsUniqueKey)
                {
                    pmap.SetUniqueKey(p.IsUniqueKeyAutoGeneratedOnCreate);
                }

                pmap.DestDbType = p.DestDbType;
                pmap.SetConverter(p.Converter);
                pmap.SetMapper(p.Mapper);
            }
        }
Exemplo n.º 4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="QueryProvider" /> class.
 /// </summary>
 /// <param name="connection">The connection.</param>
 /// <param name="sqlGeneratorFactory">The SQL generator factory.</param>
 /// <param name="modelBuilder">The model builder.</param>
 /// <param name="logger">The logger.</param>
 /// <param name="databaseMapper">The Database mapper.</param>
 public SqlServerQueryProvider(
     DbConnection connection,
     ISqlExpressionVisitorFactory sqlGeneratorFactory,
     IModelBuilder modelBuilder,
     ILogger logger,
     IDatabaseMapper databaseMapper)
     : base(connection, sqlGeneratorFactory, modelBuilder, logger, databaseMapper)
 {
 }
Exemplo n.º 5
0
 private void Init(DbConnection activeConnection,
     IQueryProviderFactory queryProviderFactory,
     IDatabaseMapper databaseMapper,
     IModelFactory defaultModelFactory)
 {
     _databaseMapper = databaseMapper;
     _modelBuilder = new ModelBuilder(defaultModelFactory);
     _queryProvider = queryProviderFactory.Create(activeConnection, _modelBuilder, databaseMapper);
 }
Exemplo n.º 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Database" /> class.
        /// </summary>
        /// <param name="connectionString">The connection string settings.</param>
        /// <param name="queryProviderFactory">The query provider factory, which know create query provider.</param>
        public Database(ConnectionStringSettings connectionString, IQueryProviderFactory queryProviderFactory)
        {
            Check.NotNull(connectionString, nameof(connectionString));
            Check.NotNull(queryProviderFactory, nameof(queryProviderFactory));

            _databaseMapper = DatabaseMapper;
            _modelBuilder = new ModelBuilder(Database.DefaultModelFactory);
            _queryProvider = queryProviderFactory.Create(connectionString, _modelBuilder, Database.DatabaseMapper);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Query{T}"/> class.
        /// </summary>
        /// <param name="databaseMapper">The database mapper.</param>
        /// <param name="provider">The provider for executing query.</param>
        internal Query(IDatabaseMapper databaseMapper, IQueryProvider provider)
        {
            Check.NotNull(provider, nameof(provider));
            Check.NotNull(databaseMapper, nameof(databaseMapper));

            _databaseMapper = databaseMapper;
            _provider       = provider;

            _expression = SelectExpression.Constant(_databaseMapper.GetTableInfo <T>(), this);
        }
Exemplo n.º 8
0
 /// <summary>
 /// Creates the SqlServer query provider.
 /// </summary>
 /// <param name="connectionString">The connection string.</param>
 /// <param name="modelBuilder">The model builder.</param>
 /// <param name="databaseMapper">Database mapper.</param>
 /// <returns>
 /// Instance of <see cref="SqlServerQueryProvider"/>.
 /// </returns>
 public IQueryProvider Create(
     KormConnectionSettings connectionString,
     IModelBuilder modelBuilder,
     IDatabaseMapper databaseMapper)
 => new SqlServerQueryProvider(
     connectionString,
     new SqlServerSqlExpressionVisitorFactory(databaseMapper),
     modelBuilder,
     new Logger(),
     databaseMapper);
Exemplo n.º 9
0
        private CommandGenerator <T> CreateCommandGenerator <T>(TableInfo tableInfo)
        {
            IDatabaseMapper mapper = Substitute.For <IDatabaseMapper>();

            mapper.GetTableInfo <T>().Returns(tableInfo);
            KORM.Query.IQueryProvider queryProvider = Substitute.For <KORM.Query.IQueryProvider>();
            var query = new Query <T>(mapper, queryProvider);

            return(new CommandGenerator <T>(tableInfo, queryProvider, query));
        }
Exemplo n.º 10
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Database" /> class.
        /// </summary>
        /// <param name="connectionString">The connection string settings.</param>
        /// <param name="queryProviderFactory">The query provider factory, which know create query provider.</param>
        public Database(KormConnectionSettings connectionString, IQueryProviderFactory queryProviderFactory)
        {
            Check.NotNull(connectionString, nameof(connectionString));
            Check.NotNull(queryProviderFactory, nameof(queryProviderFactory));
            Check.NotNullOrWhiteSpace(connectionString.ConnectionString, nameof(connectionString), Resources.Error_ConnectionStringNotSet);
            Check.NotNullOrWhiteSpace(connectionString.KormProvider, nameof(connectionString), Resources.Error_KormProviderNotSet);

            _databaseMapper = DatabaseMapper;
            _modelBuilder   = new ModelBuilder(Database.DefaultModelFactory);
            _queryProvider  = queryProviderFactory.Create(connectionString, _modelBuilder, Database.DatabaseMapper);
        }
Exemplo n.º 11
0
 public FakeQueryProvider(
     DbConnection sqlConnection,
     ISqlExpressionVisitorFactory visitorFactory,
     IDatabaseMapper databaseMapper)
     : base(sqlConnection,
            visitorFactory,
            Substitute.For <IModelBuilder>(),
            Substitute.For <ILogger>(),
            databaseMapper)
 {
     _sqlConnection  = sqlConnection;
     _visitorFactory = visitorFactory;
 }
Exemplo n.º 12
0
        /// <summary>
        /// Initializes a new instance of the <see cref="QueryProvider" /> class.
        /// </summary>
        /// <param name="externalConnection">The connection.</param>
        /// <param name="sqlGeneratorFactory">The SQL generator factory.</param>
        /// <param name="modelBuilder">The model builder.</param>
        /// <param name="logger">The logger.</param>
        /// <param name="databaseMapper">The Database mapper.</param>
        public QueryProvider(
            DbConnection externalConnection,
            ISqlExpressionVisitorFactory sqlGeneratorFactory,
            IModelBuilder modelBuilder,
            ILogger logger,
            IDatabaseMapper databaseMapper)
        {
            _connection     = Check.NotNull(externalConnection, nameof(externalConnection));
            _modelBuilder   = Check.NotNull(modelBuilder, nameof(modelBuilder));
            _logger         = Check.NotNull(logger, nameof(logger));
            _databaseMapper = Check.NotNull(databaseMapper, nameof(databaseMapper));

            InitSqlExpressionVisitor(Check.NotNull(sqlGeneratorFactory, nameof(sqlGeneratorFactory)));
            IsExternalConnection = true;
            _transactionHelper   = new Lazy <TransactionHelper>(() => new TransactionHelper(Connection));
        }
Exemplo n.º 13
0
        /// <summary>
        /// Initializes a new instance of the <see cref="QueryProvider" /> class.
        /// </summary>
        /// <param name="connectionSettings">The connection string settings.</param>
        /// <param name="sqlGeneratorFactory">The SQL generator factory.</param>
        /// <param name="modelBuilder">The model builder.</param>
        /// <param name="logger">The logger.</param>
        /// <param name="databaseMapper">The Database mapper.</param>
        public QueryProvider(
            KormConnectionSettings connectionSettings,
            ISqlExpressionVisitorFactory sqlGeneratorFactory,
            IModelBuilder modelBuilder,
            ILogger logger,
            IDatabaseMapper databaseMapper)
        {
            _logger             = Check.NotNull(logger, nameof(logger));
            _databaseMapper     = Check.NotNull(databaseMapper, nameof(databaseMapper));
            _connectionSettings = Check.NotNull(connectionSettings, nameof(connectionSettings));

            InitSqlExpressionVisitor(Check.NotNull(sqlGeneratorFactory, nameof(sqlGeneratorFactory)));
            IsExternalConnection = false;
            _modelBuilder        = Check.NotNull(modelBuilder, nameof(modelBuilder));
            _transactionHelper   = new Lazy <TransactionHelper>(() => new TransactionHelper(Connection));
        }
Exemplo n.º 14
0
        void IQueryBaseInternal.ApplyQueryFilter(IDatabaseMapper databaseMapper, ISqlExpressionVisitor expressionVisitor)
        {
            SelectExpression   select = SelectExpression;
            IQueryBaseInternal query  = select?.OriginalQuery;

            if (query != null && !query.IgnoreQueryFilters)
            {
                TableInfo tableInfo = databaseMapper.GetTableInfo(select.EntityType);
                if (tableInfo.QueryFilter != null)
                {
                    WhereExpression queryFilter =
                        expressionVisitor.GenerateWhereCondition(tableInfo.QueryFilter, DefaultQueryFilterParameterNamePrefix);
                    select.SetWhereExpression(queryFilter);
                }
            }
        }
Exemplo n.º 15
0
 /// <summary>
 /// Executes a query command using a <paramref name="mapper"/>; whilst also outputing the resulting <see cref="ParameterDirection.ReturnValue"/>.
 /// </summary>
 /// <typeparam name="TItem">The record <see cref="Type"/>.</typeparam>
 /// <param name="mapper">The <see cref="IDatabaseMapper{T}"/>.</param>
 /// <param name="returnValue">The resultant return value.</param>
 /// <returns>An <see cref="IEnumerable{TItem}"/>.</returns>
 public IEnumerable <TItem> SelectQuery <TItem>(IDatabaseMapper <TItem> mapper, out int returnValue) where TItem : class, new()
 {
     return(SelectQuery((dr) => mapper.MapFromDb(dr, OperationTypes.Get, null), out returnValue));
 }
 public IQueryProvider Create(DbConnection connection, IModelBuilder modelBuilder, IDatabaseMapper databaseMapper)
 => new CustomQueryProvider(
     connection, new SqlServerSqlExpressionVisitorFactory(databaseMapper), modelBuilder, new Logger());
Exemplo n.º 17
0
 /// <summary>
 /// Creates an instance with specified database mapper <paramref name="databaseMapper"/>.
 /// </summary>
 /// <param name="databaseMapper">Database mapper.</param>
 public SqlServerSqlExpressionVisitorFactory(IDatabaseMapper databaseMapper)
 {
     _databaseMapper = Check.NotNull(databaseMapper, nameof(databaseMapper));
 }
Exemplo n.º 18
0
 /// <summary>
 /// Creates an instance of the generator with specified database mapper <paramref name="databaseMapper"/>.
 /// </summary>
 /// <param name="databaseMapper">Database mapper</param>
 public SqlServer2008SqlGenerator(IDatabaseMapper databaseMapper) : base(databaseMapper)
 {
 }
Exemplo n.º 19
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DatabaseArgs{T}"/> class.
 /// </summary>
 /// <param name="mapper">The <see cref="IDatabaseMapper{T}"/>.</param>
 /// <param name="storedProcedure">The stored procedure name.</param>
 /// <param name="paging">The <see cref="PagingArgs"/>.</param>
 public DatabaseArgs(IDatabaseMapper <T> mapper, string storedProcedure, PagingArgs paging)
     : this(mapper, storedProcedure, new PagingResult(paging ?? throw new ArgumentNullException(nameof(paging))))
Exemplo n.º 20
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DatabaseArgs{T}"/> class.
 /// </summary>
 /// <param name="mapper">The <see cref="IDatabaseMapper{T}"/>.</param>
 /// <param name="storedProcedure">The stored procedure name.</param>
 public DatabaseArgs(IDatabaseMapper <T> mapper, string storedProcedure)
 {
     Mapper          = mapper ?? throw new ArgumentNullException(nameof(mapper));
     StoredProcedure = !string.IsNullOrEmpty(storedProcedure) ? storedProcedure : throw new ArgumentNullException(nameof(storedProcedure));
 }
Exemplo n.º 21
0
 /// <summary>
 /// Selects first item or default using a <paramref name="mapper"/>.
 /// </summary>
 /// <typeparam name="T">The resultant <see cref="Type"/>.</typeparam>
 /// <param name="mapper">The <see cref="IDatabaseMapper{T}"/>.</param>
 /// <returns>The single item.</returns>
 public async Task <T?> SelectFirstOrDefaultAsync <T>(IDatabaseMapper <T> mapper) where T : class, new()
 {
     Check.NotNull(mapper, nameof(mapper));
     return(await SelectFirstOrDefaultAsync((dr) => mapper.MapFromDb(dr, OperationTypes.Get, null !) ?? throw new InvalidOperationException(_mapperNullResultMessage)).ConfigureAwait(false));
 }
Exemplo n.º 22
0
 public KORM.Query.IQueryProvider Create(KormConnectionSettings connectionString, IModelBuilder modelBuilder, IDatabaseMapper databaseMapper)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 23
0
 /// <summary>
 /// Selects first item or default using a <paramref name="mapper"/>.
 /// </summary>
 /// <typeparam name="T">The resultant <see cref="Type"/>.</typeparam>
 /// <param name="mapper">The <see cref="IDatabaseMapper{T}"/>.</param>
 /// <returns>The single item.</returns>
 public T SelectFirstOrDefault <T>(IDatabaseMapper <T> mapper) where T : class, new()
 {
     Check.NotNull(mapper, nameof(mapper));
     return(SelectFirstOrDefault((dr) => mapper.MapFromDb(dr, OperationTypes.Get, null)));
 }
Exemplo n.º 24
0
 /// <summary>
 /// Creates the SqlServer query provider.
 /// </summary>
 /// <param name="connectionString">The connection string.</param>
 /// <param name="modelBuilder">The model builder.</param>
 /// <param name="databaseMapper">Database mapper.</param>
 /// <returns>
 /// Instance of <see cref="SqlServerQueryProvider"/>.
 /// </returns>
 public IQueryProvider Create(ConnectionStringSettings connectionString, IModelBuilder modelBuilder, IDatabaseMapper databaseMapper) =>
 new SqlServerQueryProvider(connectionString, new SqlServerQuerySqlGenerator(databaseMapper), modelBuilder, new Logger());
Exemplo n.º 25
0
 /// <summary>
 /// Executes a query command using a <paramref name="mapper"/> creating a resultant collection; whilst also outputing the resulting <see cref="ParameterDirection.ReturnValue"/>.
 /// </summary>
 /// <typeparam name="TColl">The collection <see cref="Type"/>.</typeparam>
 /// <typeparam name="TItem">The item <see cref="Type"/>.</typeparam>
 /// <param name="returnValue">The resultant return value.</param>
 /// <param name="mapper">The <see cref="IDatabaseMapper{T}"/>.</param>
 /// <returns>The resultant collection.</returns>
 public TColl SelectQuery <TColl, TItem>(IDatabaseMapper <TItem> mapper, out int returnValue) where TItem : class, new() where TColl : ICollection <TItem>, new()
 {
     return(SelectQuery <TColl, TItem>((dr) => mapper.MapFromDb(dr, OperationTypes.Get, null), out returnValue));
 }
Exemplo n.º 26
0
 public KORM.Query.IQueryProvider Create(DbConnection connection, IModelBuilder modelBuilder, IDatabaseMapper databaseMapper)
 => new FakeQueryProvider(connection, new FakeSqlServerSqlExpressionVisitorFactory(databaseMapper), databaseMapper);
Exemplo n.º 27
0
 /// <summary>
 /// Executes a query command using a <paramref name="mapper"/> adding to the passed collection; whilst also outputing the resulting <see cref="ParameterDirection.ReturnValue"/>.
 /// </summary>
 /// <typeparam name="TColl">The collection <see cref="Type"/>.</typeparam>
 /// <typeparam name="TItem">The item <see cref="Type"/>.</typeparam>
 /// <param name="coll">The collection to add items to.</param>
 /// <param name="mapper">The <see cref="IDatabaseMapper{T}"/>.</param>
 /// <param name="returnValue">The resultant return value.</param>
 public void SelectQuery <TColl, TItem>(TColl coll, IDatabaseMapper <TItem> mapper, out int returnValue) where TItem : class, new() where TColl : ICollection <TItem>
 {
     SelectQuery <TColl, TItem>(coll, (dr) => mapper.MapFromDb(dr, OperationTypes.Get, null), out returnValue);
 }
Exemplo n.º 28
0
 /// <summary>
 /// Creates an instance with specified database mapper <paramref name="databaseMapper"/>.
 /// </summary>
 /// <param name="databaseMapper">Database mapper.</param>
 public FakeSqlServerSqlExpressionVisitorFactory(IDatabaseMapper databaseMapper)
 {
     _databaseMapper = databaseMapper;
 }
Exemplo n.º 29
0
 public Bank(IDatabaseMapper databaseMapper)
 {
     _databaseMapper = databaseMapper;
 }
 public IQueryProvider Create(DbConnection connection, IModelBuilder modelBuilder, IDatabaseMapper databaseMapper) =>
 new CustomQueryProvider(connection, new DefaultQuerySqlGenerator(databaseMapper), modelBuilder, new Logger());
Exemplo n.º 31
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DynamicMethodModelFactory" /> class.
 /// </summary>
 /// <param name="databaseMapper">The database mapper.</param>
 /// <exception cref="System.ArgumentNullException">databaseMapper;Argument 'databaseMapper' is required.</exception>
 public DynamicMethodModelFactory(IDatabaseMapper databaseMapper)
 {
     _databaseMapper = Check.NotNull(databaseMapper, nameof(databaseMapper));
 }