Exemplo n.º 1
0
            /// <summary>
            /// Gets the name of the column in the database for the specified type,
            /// using the configured <see cref="IColumnNameResolver"/>.
            /// </summary>
            /// <param name="propertyInfo">The <see cref="PropertyInfo"/> to get the column name for.</param>
            /// <param name="sqlBuilder">The SQL builder instance.</param>
            /// <returns>The column name in the database for <paramref name="propertyInfo"/>.</returns>
            public static string Column(PropertyInfo propertyInfo, ISqlBuilder sqlBuilder)
            {
                var key = $"{sqlBuilder.GetType()}.{propertyInfo.DeclaringType}.{propertyInfo.Name}";

                if (!_columnNameCache.TryGetValue(key, out var columnName))
                {
                    columnName = sqlBuilder.QuoteIdentifier(ColumnNameResolver.ResolveColumnName(propertyInfo));
                    _columnNameCache.TryAdd(key, columnName);
                }

                LogReceived?.Invoke($"Resolved column name '{columnName}' for '{propertyInfo}'");
                return(columnName);
            }
Exemplo n.º 2
0
        protected override object VisitMemberAccess(MemberExpression expression)
        {
            if (expression.Member is PropertyInfo jsonValue &&
                expression.Expression is MemberExpression jsonContainerExpr &&
                jsonContainerExpr.Member is PropertyInfo jsonContainer &&
                jsonContainer.IsDefined(typeof(JsonDataAttribute)))
            {
                return(SqlBuilder.JsonValue(
                           VisitMemberAccess(jsonContainerExpr).ToString(),
                           ColumnNameResolver.ResolveColumnName(jsonValue)));
            }

            return(base.VisitMemberAccess(expression));
        }
Exemplo n.º 3
0
        protected override VisitResult VisitMemberAccess(MemberExpression expression)
        {
            if (expression.Member is PropertyInfo jsonValue &&
                expression.Expression is MemberExpression jsonContainerExpr &&
                jsonContainerExpr.Member is PropertyInfo jsonContainer &&
                jsonContainer.IsDefined(_options.JsonDataAttributeType))
            {
                var memberAccessResult = VisitMemberAccess(jsonContainerExpr);
                return(new VisitResult(SqlBuilder.JsonValue(memberAccessResult.Result.ToString(),
                                                            ColumnNameResolver.ResolveColumnName(jsonValue))));
            }

            return(base.VisitMemberAccess(expression));
        }
            private Mapping Get(Type type)
            {
                lock (_mappings)
                {
                    if (_mappings.TryGetValue(type, out var mapping))
                    {
                        return(mapping);
                    }

                    mapping = new Mapping
                    {
                        TableName = _tableNameResolver.ResolveTableName(type)
                    };
                    foreach (var p in GetScaffoldableProperties(type, true))
                    {
                        mapping.ColumnName.Add(p, _columnNameResolver.ResolveColumnName(p));
                    }

                    _mappings.AddOrUpdate(type, t => mapping, (t, m2) => mapping);

                    return(mapping);
                }
            }