コード例 #1
0
        public void ToDbTest()
        {
            var mappingConvention = new MappingConvention(
                s => s.ToUpper(),
                s => s,
                '@'
                );

            var result = mappingConvention.ToDb("a");

            Assert.Equal("A", result);
        }
コード例 #2
0
ファイル: Query.cs プロジェクト: jhgbrt/yadal
    internal static Query Create(MappingConvention convention)
    {
        var insertColumns = string.Join(", ", QueryFactory <T> .InsertPropertyNames.Select(convention.ToDb));
        var insertValues  = string.Join(", ", InsertPropertyNames.Select(s => $"{convention.Parameter(s)}"));
        var whereClause   = string.Join(" AND ", KeyPropertyNames.Select(s => $"{convention.ToDb(s)} = {convention.Parameter(s)}"));
        var updateColumns = string.Join(", ", NonKeyPropertyNames.Select(s => $"{convention.ToDb(s)} = {convention.Parameter(s)}"));
        var allColumns    = string.Join(", ", QueryFactory <T> .AllPropertyNames.Select(convention.ToDb));
        var tableName     = convention.ToDb(typeof(T).Name);

        return(new Query(
                   $"INSERT INTO {tableName} ({insertColumns}) VALUES ({insertValues})",
                   $"UPDATE {tableName} SET {updateColumns} WHERE {whereClause}",
                   $"DELETE FROM {tableName} WHERE {whereClause}",
                   $"SELECT {allColumns} FROM {tableName} WHERE {whereClause}",
                   $"SELECT {allColumns} FROM {tableName}",
                   $"SELECT COUNT(*) FROM {tableName}"));
    }
コード例 #3
0
        Query(MappingConvention convention)
        {
            var properties = typeof(T).GetProperties();

            var keyProperties = properties.Where(p => p.CustomAttributes.Any(a => a.AttributeType == typeof(KeyAttribute))).ToArray();

            if (!keyProperties.Any())
            {
                keyProperties = properties.Where(p => p.Name.Equals("Id", StringComparison.OrdinalIgnoreCase)).ToArray();
            }
            if (!keyProperties.Any())
            {
                keyProperties = properties.Where(p => p.Name.Equals($"{typeof(T).Name}Id", StringComparison.OrdinalIgnoreCase)).ToArray();
            }

            var dbGenerated = keyProperties.Where(p => p.HasCustomAttribute <DatabaseGeneratedAttribute>(a => a.DatabaseGeneratedOption != DatabaseGeneratedOption.None));

            var allPropertyNames    = properties.Select(p => convention.ToDb(p.Name)).ToArray();
            var insertPropertyNames = properties.Except(dbGenerated).Select(p => p.Name).ToArray();
            var keyPropertyNames    = keyProperties.Select(p => p.Name).ToArray();
            var nonKeyProperties    = properties.Except(keyProperties).ToArray();
            var nonKeyPropertyNames = nonKeyProperties.Select(p => p.Name).ToArray();

            Func <string, string> assign = s => $"{convention.ToDb(s)} = {convention.Parameter(s)}";
            var insertColumns            = string.Join(", ", insertPropertyNames.Select(convention.ToDb));
            var insertValues             = string.Join(", ", insertPropertyNames.Select(s => $"{convention.Parameter(s)}"));
            var whereClause   = string.Join(" AND ", keyPropertyNames.Select(assign));
            var updateColumns = string.Join(", ", nonKeyPropertyNames.Select(assign));
            var allColumns    = string.Join(", ", allPropertyNames);
            var tableName     = convention.ToDb(typeof(T).Name);

            _insert    = $"INSERT INTO {tableName} ({insertColumns}) VALUES ({insertValues})";
            _delete    = $"DELETE FROM {tableName} WHERE {whereClause}";
            _update    = $"UPDATE {tableName} SET {updateColumns} WHERE {whereClause}";
            _select    = $"SELECT {allColumns} FROM {tableName} WHERE {whereClause}";
            _selectAll = $"SELECT {allColumns} FROM {tableName}";
            _count     = $"SELECT COUNT(*) FROM {tableName}";
        }
コード例 #4
0
 internal static IQueryGenerator Create(MappingConvention convention) => new Query <T>(convention);