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"); }
/// <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); } }
/// <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) { }
private void Init(DbConnection activeConnection, IQueryProviderFactory queryProviderFactory, IDatabaseMapper databaseMapper, IModelFactory defaultModelFactory) { _databaseMapper = databaseMapper; _modelBuilder = new ModelBuilder(defaultModelFactory); _queryProvider = queryProviderFactory.Create(activeConnection, _modelBuilder, databaseMapper); }
/// <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); }
/// <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); }
/// <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);
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)); }
/// <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); }
public FakeQueryProvider( DbConnection sqlConnection, ISqlExpressionVisitorFactory visitorFactory, IDatabaseMapper databaseMapper) : base(sqlConnection, visitorFactory, Substitute.For <IModelBuilder>(), Substitute.For <ILogger>(), databaseMapper) { _sqlConnection = sqlConnection; _visitorFactory = visitorFactory; }
/// <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)); }
/// <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)); }
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); } } }
/// <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());
/// <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)); }
/// <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) { }
/// <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))))
/// <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)); }
/// <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)); }
public KORM.Query.IQueryProvider Create(KormConnectionSettings connectionString, IModelBuilder modelBuilder, IDatabaseMapper databaseMapper) { throw new NotImplementedException(); }
/// <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))); }
/// <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());
/// <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)); }
public KORM.Query.IQueryProvider Create(DbConnection connection, IModelBuilder modelBuilder, IDatabaseMapper databaseMapper) => new FakeQueryProvider(connection, new FakeSqlServerSqlExpressionVisitorFactory(databaseMapper), databaseMapper);
/// <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); }
/// <summary> /// Creates an instance with specified database mapper <paramref name="databaseMapper"/>. /// </summary> /// <param name="databaseMapper">Database mapper.</param> public FakeSqlServerSqlExpressionVisitorFactory(IDatabaseMapper databaseMapper) { _databaseMapper = databaseMapper; }
public Bank(IDatabaseMapper databaseMapper) { _databaseMapper = databaseMapper; }
public IQueryProvider Create(DbConnection connection, IModelBuilder modelBuilder, IDatabaseMapper databaseMapper) => new CustomQueryProvider(connection, new DefaultQuerySqlGenerator(databaseMapper), modelBuilder, new Logger());
/// <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)); }