sql >> データベース >  >> RDS >> Mysql

NHibernate/MySQL文字列連結

    以下は、この問題を解決するHqlGeneratorです。

    public class ConcatHqlGenerator : BaseHqlGeneratorForMethod
    {
        public ConcatHqlGenerator()
            : base()
        {
            this.SupportedMethods = new[] 
            { ReflectionHelper.GetMethodDefinition(() => string.Concat(null, null)) };
        }
    
        public override HqlTreeNode BuildHql(MethodInfo method,
    Expression targetObject,
    ReadOnlyCollection<Expression> arguments,
    HqlTreeBuilder treeBuilder,
    IHqlExpressionVisitor visitor)
        {
            return treeBuilder.Concat(
                new[] 
                {
                    visitor.Visit(arguments[0]).AsExpression(),
                    visitor.Visit(arguments[1]).AsExpression()
                });
        }
    }
    

    これをHQLGeneratorsRegistryに追加すると、LINQステートメントでstring.Concatを呼び出すことができます。

    public class LinqToHqlGeneratorsRegistry : DefaultLinqToHqlGeneratorsRegistry
    {
        public LinqToHqlGeneratorsRegistry()
            : base()
        {
            this.Merge(new ConcatHqlGenerator());
        }
    }
    private static ISessionFactory CreateSessionFactory()
    {
        var configuration = new NHib.Cfg.Configuration();
        configuration.Properties.Add(NHibernate.Cfg
                                               .Environment.LinqToHqlGeneratorsRegistry, 
    typeof(LinqToHqlGeneratorsRegistry).AssemblyQualifiedName);
        configuration.Configure();
        return configuration.BuildSessionFactory();
    }
    


    1. Django開発データベースをデフォルトのSQLiteからPostgreSQLに変更する

    2. AWSRDSのmysqlサーバーに接続できません

    3. MySQLは省略記号でテキストを切り捨てます

    4. MySQLでのREGEXP_LIKE()関数のしくみ