コード例 #1
0
        /// <summary>
        /// Init type Sql provider
        /// </summary>
        /// <param name="sqlConnector"></param>
        private void InitSqlConnector(ESqlConnector sqlConnector)
        {
            SqlConnector = sqlConnector;
            switch (SqlConnector)
            {
            case ESqlConnector.MSSQL:
                TableName = TableName.Insert(0, "[");
                TableName = TableName.Insert(TableName.Length, "]");

                foreach (var propertyMetadata in SqlProperties)
                {
                    propertyMetadata.ColumnName = propertyMetadata.ColumnName.Insert(0, "[");
                    propertyMetadata.ColumnName = propertyMetadata.ColumnName.Insert(propertyMetadata.ColumnName.Length, "]");
                }

                foreach (var propertyMetadata in KeySqlProperties)
                {
                    propertyMetadata.ColumnName = propertyMetadata.ColumnName.Insert(0, "[");
                    propertyMetadata.ColumnName = propertyMetadata.ColumnName.Insert(propertyMetadata.ColumnName.Length, "]");
                }

                break;

            case ESqlConnector.MySQL:
                break;

            case ESqlConnector.PostgreSQL:
                //todo: ковычки
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(SqlConnector));
            }
        }
コード例 #2
0
        /// <summary>
        /// Constructor
        /// </summary>
        public SqlGenerator(ESqlConnector sqlConnector)
        {
            InitProperties();

            InitSqlConnector(sqlConnector);
            InitLogicalDeleted();

            //todo: init joins
        }
コード例 #3
0
        /// <summary>
        /// 确定是否已经存在缓存
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static ISqlGenerator <TEntiy> ExistModelDesCache <TEntiy>(ESqlConnector eSql) where TEntiy : class
        {
            object value;

            _ModelDesCache.TryGetValue(typeof(TEntiy).Name.GetHashCode(), out value);
            if (null == value)
            {
                value = Add <TEntiy>(eSql);
            }
            return(value as ISqlGenerator <TEntiy>);
        }
コード例 #4
0
        public static IDbConnection CreateDbConnection(ESqlConnector enumDataBase, string connectionStr = "")
        {
            if (string.IsNullOrWhiteSpace(connectionStr))
            {
                connectionStr = GetConnectionStr(enumDataBase);
            }
            switch (enumDataBase)
            {
            case ESqlConnector.MySql:
                return(new MySqlConnection(connectionStr));

            case ESqlConnector.Mssql:
                return(new SqlConnection(connectionStr));

            default:
                throw new Exception("没用找的IDbConnection的实例类型");
            }
        }
コード例 #5
0
        public static ISqlGenerator <TEntiy> Add <TEntiy>(ESqlConnector eSql) where TEntiy : class
        {
            object generator;

            lock (objLock)
            {
                var entityType = typeof(TEntiy).Name.GetHashCode();
                if ((!_ModelDesCache.ContainsKey(entityType)))
                {
                    generator = new SqlGenerator <TEntiy>(eSql);
                    _ModelDesCache.Add(entityType, generator);
                }
                else
                {
                    _ModelDesCache.TryGetValue(typeof(TEntiy).Name.GetHashCode(), out generator);
                }
            }
            return(generator as ISqlGenerator <TEntiy>);
        }
コード例 #6
0
        /// <summary>
        /// Init type Sql provider
        /// </summary>
        /// <param name="sqlConnector"></param>
        private void InitSqlConnector(ESqlConnector sqlConnector)
        {
            SqlConnector = sqlConnector;
            switch (SqlConnector)
            {
            case ESqlConnector.MSSQL:

                TableName = "[" + TableName + "]";

                foreach (var propertyMetadata in SqlProperties)
                {
                    propertyMetadata.ColumnName = "[" + propertyMetadata.ColumnName + "]";
                }

                foreach (var propertyMetadata in KeySqlProperties)
                {
                    propertyMetadata.ColumnName = "[" + propertyMetadata.ColumnName + "]";
                }

                break;

            case ESqlConnector.MySQL:
                TableName = "`" + TableName + "`";

                foreach (var propertyMetadata in SqlProperties)
                {
                    propertyMetadata.ColumnName = "`" + propertyMetadata.ColumnName + "`";
                }

                foreach (var propertyMetadata in KeySqlProperties)
                {
                    propertyMetadata.ColumnName = "`" + propertyMetadata.ColumnName + "`";
                }
                break;

            case ESqlConnector.PostgreSQL:

                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(SqlConnector));
            }
        }
コード例 #7
0
        /// <summary>
        /// 获取连接字符串
        /// </summary>
        /// <returns></returns>
        private static string GetConnectionStr(ESqlConnector enumDataBase)
        {
            var conntectStr = "";

            switch (enumDataBase)
            {
            case ESqlConnector.MySql:
                conntectStr = ConfigurationHelper.GetInstance().GetSection("db").GetSection("mysql").GetSection("connectionStr").Value;
                break;

            case ESqlConnector.Mssql:
                conntectStr = ConfigurationHelper.GetInstance().GetSection("db").GetSection("sqlserver").GetSection("connectionStr").Value;
                break;

            case ESqlConnector.PostgreSql:
                break;

            default:
                throw new Exception("没用找的IDbConnection的实例类型");
            }
            return(conntectStr);
        }
コード例 #8
0
 /// <summary>
 ///     Constructor
 /// </summary>
 public SqlGenerator(ESqlConnector sqlConnector, bool useQuotationMarks = false)
     : this(new SqlGeneratorConfig {
     SqlConnector = sqlConnector, UseQuotationMarks = useQuotationMarks
 })
 {
 }
コード例 #9
0
        public SqlGenerator(ESqlConnector sqlConnector)
        {
            SqlConnector = sqlConnector;
            var entityType     = typeof(TEntity);
            var entityTypeInfo = entityType.GetTypeInfo();
            var aliasAttribute = entityTypeInfo.GetCustomAttribute <TableAttribute>();

            this.TableName = aliasAttribute != null ? aliasAttribute.Name : entityTypeInfo.Name;
            AllProperties  = entityType.GetProperties();
            //Load all the "primitive" entity properties
            var props = AllProperties.Where(ExpressionHelper.GetPrimitivePropertiesPredicate()).ToArray();

            //Filter the non stored properties
            this.BaseProperties = props.Where(p => !p.GetCustomAttributes <NotMappedAttribute>().Any()).Select(p => new PropertyMetadata(p));

            //Filter key properties
            this.KeyProperties = props.Where(p => p.GetCustomAttributes <KeyAttribute>().Any()).Select(p => new PropertyMetadata(p));

            //Use identity as key pattern
            var identityProperty = props.FirstOrDefault(p => p.GetCustomAttributes <IdentityAttribute>().Any());

            this.IdentityProperty = identityProperty != null ? new PropertyMetadata(identityProperty) : null;

            //Status property (if exists, and if it does, it must be an enumeration)
            var statusProperty = props.FirstOrDefault(p => p.GetCustomAttributes <StatusAttribute>().Any());

            if (statusProperty == null)
            {
                return;
            }
            StatusProperty = new PropertyMetadata(statusProperty);

            if (statusProperty.PropertyType.IsBool())
            {
                var deleteProperty = props.FirstOrDefault(p => p.GetCustomAttributes <DeletedAttribute>().Any());
                if (deleteProperty == null)
                {
                    return;
                }

                LogicalDelete      = true;
                LogicalDeleteValue = 1; // true
            }
            else if (statusProperty.PropertyType.IsEnum())
            {
                var deleteOption =
                    statusProperty.PropertyType.GetFields()
                    .FirstOrDefault(f => f.GetCustomAttribute <DeletedAttribute>() != null);

                if (deleteOption == null)
                {
                    return;
                }

                var enumValue = Enum.Parse(statusProperty.PropertyType, deleteOption.Name);

                if (enumValue != null)
                {
                    LogicalDeleteValue = Convert.ChangeType(enumValue, Enum.GetUnderlyingType(statusProperty.PropertyType));
                }

                LogicalDelete = true;
            }
        }
コード例 #10
0
 public DapperRepository(IDbConnection connection, ESqlConnector sqlConnector)
 {
     Connection   = connection;
     SqlGenerator = new SqlGenerator <TEntity>(sqlConnector);
 }
コード例 #11
0
 public Repository(IDbConnection connection, ESqlConnector sqlConnector, ILogger logger = null)
 {
     Connection   = connection;
     SqlGenerator = new SqlGenerator <TEntity>(sqlConnector);
     Logger       = logger;
 }
コード例 #12
0
 public RepositorioGenericoDapper(IDbConnection conexao, ESqlConnector sqlConnector)
 {
     Conexao    = conexao;
     GeradorSQL = new SqlGenerator <TEntity>(sqlConnector);
 }