Exemplo n.º 1
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="entityType">实体类型</param>
        /// <param name="runtime">Dapper运行时</param>
        public CrudSqlSegments(Type entityType, DapperRuntime runtime)
        {
            Guard.ArgumentNotNull(entityType, nameof(entityType));

            var metadata = runtime.GetMetadata(entityType);

            _insertSqlLazy = new Lazy <string>(() => GenerateInsertSql(entityType, runtime, metadata));
            _updateSqlLazy = new Lazy <string>(() => GenerateUpdateSql(entityType, runtime, metadata));
            _deleteSqlLazy = new Lazy <string>(() => GenerateDeleteSql(entityType, runtime, metadata));
            _selectSqlLazy = new Lazy <string>(() => GenerateSelectSql(entityType, runtime, metadata));
        }
Exemplo n.º 2
0
        /// <summary>
        /// 生成删除的SQL语句
        /// </summary>
        /// <param name="entityType">实体类型</param>
        /// <param name="runtime">Dapper运行时</param>
        /// <param name="metadata">Dapper元数据</param>
        /// <returns></returns>
        private static string GenerateDeleteSql(Type entityType, DapperRuntime runtime, DapperMetadata metadata)
        {
            string whereSeg = KeyDelimitSegment(entityType, runtime, metadata);

            StringBuilder sqlBuilder = new StringBuilder();

            sqlBuilder.Append("DELETE FROM ");
            sqlBuilder.Append($"{runtime.DelimitIdentifier(entityType, metadata.TableName)} ");
            if (!string.IsNullOrWhiteSpace(whereSeg))
            {
                sqlBuilder.Append(" WHERE ");
                sqlBuilder.Append(whereSeg);
            }
            return(sqlBuilder.ToString());
        }
Exemplo n.º 3
0
        /// <summary>
        /// 生成查询的SQL语句
        /// </summary>
        /// <param name="entityType">实体类型</param>
        /// <param name="runtime">Dapper运行时</param>
        /// <param name="metadata">Dapper元数据</param>
        /// <returns></returns>
        private static string GenerateSelectSql(Type entityType, DapperRuntime runtime, DapperMetadata metadata)
        {
            string columnsSetSeg =
                metadata.Fields.Where(f => !f.Ignore).OrderBy(x => x.Field.Name)
                .Select(k => runtime.DelimitIdentifier(entityType, k.Name)).ToArrayString(", ");

            StringBuilder sqlBuilder = new StringBuilder();

            sqlBuilder.Append("SELECT ");
            sqlBuilder.Append(columnsSetSeg);
            sqlBuilder.Append(" FROM ");
            sqlBuilder.Append($"{runtime.DelimitIdentifier(entityType, metadata.TableName)}");

            return(sqlBuilder.ToString());
        }
Exemplo n.º 4
0
        /// <summary>
        /// 生成插入的SQL语句
        /// </summary>
        /// <param name="entityType">实体类型</param>
        /// <param name="runtime">Dapper运行时</param>
        /// <param name="metadata">Dapper元数据</param>
        /// <returns></returns>
        private static string GenerateInsertSql(Type entityType, DapperRuntime runtime, DapperMetadata metadata)
        {
            var    fields  = metadata.Fields.Where(f => !f.Ignore && !f.AutoGeneration).OrderBy(x => x.Field.Name).ToArray();
            string columns = fields.Select(k => runtime.DelimitIdentifier(entityType, k.Name)).ToArrayString(", ");

            string parameters = fields.Select(k => $"{runtime.DelimitParameter(entityType, k.Field.Name)}").ToArrayString(", ");

            StringBuilder sqlBuilder = new StringBuilder();

            sqlBuilder.Append("INSERT INTO ");
            sqlBuilder.Append($"{runtime.DelimitIdentifier(entityType, metadata.TableName)} ");
            sqlBuilder.Append($"({columns}) ");
            sqlBuilder.Append(" VALUES ");
            sqlBuilder.Append($"({parameters})");

            return(sqlBuilder.ToString());
        }
Exemplo n.º 5
0
        private DapperRuntime GetDapperRuntime()
        {
            Mock <IOptions <DapperDatabaseOptions> > optionsMock = new Mock <IOptions <DapperDatabaseOptions> >();

            optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions
            {
                DefaultConnectionName = "default",
                ConnectionStrings     = new Dictionary <string, string>
                {
                    { "default", helper.ConnectionString }
                }
            });

            DapperRuntime rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderComKeyInstance() });

            return(rt);
        }
Exemplo n.º 6
0
        private DapperSqlGenerator MockGenerator()
        {
            var dbProvider = new MySqlDatabaseProvider();
            Mock <IOptions <DapperDatabaseOptions> > optionsMock = new Mock <IOptions <DapperDatabaseOptions> >();

            optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions
            {
                DefaultConnectionName = "default",
                ConnectionStrings     = new Dictionary <string, string>
                {
                    { "default", MySqlConnectionString.Value }
                }
            });

            DapperRuntime rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderInstance() });

            return(new DapperSqlGenerator(rt));
        }
Exemplo n.º 7
0
        private CrudSqlSegments MockCrudSqlSegments()
        {
            var dbProvider = new MySqlDatabaseProvider();
            Mock <IOptions <DapperDatabaseOptions> > optionsMock = new Mock <IOptions <DapperDatabaseOptions> >();

            optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions
            {
                DefaultConnectionName = "default",
                ConnectionStrings     = new Dictionary <string, string>
                {
                    { "default", MySqlConnectionString.Value }
                }
            });
            DapperRuntime rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new TestEntityMetadataProvider() });

            CrudSqlSegments seg = new CrudSqlSegments(typeof(TestEntity), rt);

            return(seg);
        }
Exemplo n.º 8
0
        /// <summary>
        /// 生成更新的SQL语句
        /// </summary>
        /// <param name="entityType">实体类型</param>
        /// <param name="runtime">Dapper运行时</param>
        /// <param name="metadata">Dapper元数据</param>
        /// <returns></returns>
        private static string GenerateUpdateSql(Type entityType, DapperRuntime runtime, DapperMetadata metadata)
        {
            var    fields        = metadata.Fields.Where(f => !f.IsKey && !f.AutoGeneration && !f.Ignore).OrderBy(x => x.Field.Name).ToArray();
            string columnsSetSeg = fields.Select(k =>
                                                 $"{runtime.DelimitIdentifier(entityType, k.Name)} = {runtime.DelimitParameter(entityType, k.Field.Name)}").ToArrayString(", ");

            string whereSeg = KeyDelimitSegment(entityType, runtime, metadata);

            StringBuilder sqlBuilder = new StringBuilder();

            sqlBuilder.Append("UPDATE ");
            sqlBuilder.Append($"{runtime.DelimitIdentifier(entityType, metadata.TableName)} ");
            sqlBuilder.Append("SET ");
            sqlBuilder.Append(columnsSetSeg);
            if (!string.IsNullOrWhiteSpace(whereSeg))
            {
                sqlBuilder.Append(" WHERE ");
                sqlBuilder.Append(whereSeg);
            }
            return(sqlBuilder.ToString());
        }
Exemplo n.º 9
0
        private DapperRepository <DapperAllTest> MockGenerator()
        {
            var dbProvider = new MySqlDatabaseProvider();
            Mock <IOptions <DapperDatabaseOptions> > optionsMock = new Mock <IOptions <DapperDatabaseOptions> >();

            optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions
            {
                DefaultConnectionName = "default",
                ConnectionStrings     = new Dictionary <string, string>
                {
                    { "default", helper.ConnectionString }
                }
            });
            LoggerFactory loggerFactory = new LoggerFactory();

            loggerFactory.AddDebug(LogLevel.Trace);
            DapperRuntime rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderInstance() });

            _testContext = new DapperContext(rt, loggerFactory);
            return(new DapperRepository <DapperAllTest>(_testContext));
        }
Exemplo n.º 10
0
        private DapperRepository <SQLiteDapperTestEntity> MockGenerator()
        {
            var optionsMock = new Mock <IOptions <DapperDatabaseOptions> >();

            optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions
            {
                DefaultConnectionName   = "default",
                DefaultDatabaseProvider = typeof(SQLiteDatabaseProvider),
                ConnectionStrings       = new Dictionary <string, string>
                {
                    { "default", ConnectionString }
                }
            });
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddDebug(LogLevel.Trace);
            var rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderInstance() });

            _testContext = new DapperContext(rt, loggerFactory);
            return(new DapperRepository <SQLiteDapperTestEntity>(_testContext));
        }
Exemplo n.º 11
0
        private DapperRoleStoreImp MockGenerator()
        {
            Mock <IOptions <DapperDatabaseOptions> > optionsMock = new Mock <IOptions <DapperDatabaseOptions> >();

            optionsMock.Setup(o => o.Value).Returns(new DapperDatabaseOptions
            {
                DefaultConnectionName = "default",
                ConnectionStrings     = new Dictionary <string, string>
                {
                    { "default", helper.ConnectionString }
                }
            });

            LoggerFactory loggerFactory = new LoggerFactory();

            loggerFactory.AddDebug(LogLevel.Trace);

            DapperRuntime rt = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderRoleBase() });
            DapperRepository <RoleBase> dpRoleBase = new DapperRepository <RoleBase>(context1 = new DapperContext(rt, loggerFactory), loggerFactory);
            DapperRuntime rt1 = new DapperRuntime(optionsMock.Object, new IDapperMetadataProvider[] { new DapperMetadataProviderRoleClaim() });
            DapperRepository <RoleClaim> dpRoleClaim = new DapperRepository <RoleClaim>(context2 = new DapperContext(rt1, loggerFactory), loggerFactory);

            return(new DapperRoleStoreImp(new IIdGenerationServiceImp(), dpRoleBase, dpRoleClaim));
        }
Exemplo n.º 12
0
 /// <summary>
 /// 使用界定符包围T-SQL中的参数字符串。
 /// </summary>
 /// <param name="entityType">实体类型</param>
 /// <param name="runtime">Dapper运行时</param>
 /// <param name="metadata">Dapper元数据</param>
 /// <returns></returns>
 private static string KeyDelimitSegment(Type entityType, DapperRuntime runtime, DapperMetadata metadata)
 {
     return(metadata.Fields.Where(f => f.IsKey).Select(k => $"{runtime.DelimitIdentifier(entityType, k.Name)} = {runtime.DelimitParameter(entityType, k.Field.Name)}").ToArrayString(" AND "));
 }
Exemplo n.º 13
0
 private WorkContext MockWorkContext(DapperRuntime rt)
 {
     return(new TestWorkContext(rt));
 }
Exemplo n.º 14
0
 public TestWorkContext(DapperRuntime runtime)
     : base()
 {
     _runtime = runtime;
     _loggerFactory.AddDebug(LogLevel.Trace);
 }