Question

I am using ServiceStack.Ormlite.MySql SqlJoinBuilder to join select from MySql DB The problem is that SQL query composed is valid but on Connection.Select<TEntity>(sql) InvalidCast Exception is thrown. When I used JoinSqlBuilder with OrmLite.SqlServer there was no such error. Here is my method code:

const int take = 20;
        Expression<Func<smt2_browser_data, object>> browserDataSelectFunc =
            browserdata => new { browserdata.os_type, browserdata.agent_name };
        Expression<Func<smt2_records, object>> recordselectFunc = 
            record =>
            new
                {
                    record.id,
                    record.client_id,
                    record.cache_id,
                    record.domain_id,
                    record.os_id,
                    record.browser_id,
                    record.browser_ver,
                    record.user_agent,
                    record.ftu,
                    record.ip,
                    record.scr_height,
                    record.scr_width,
                    record.vp_height,
                    record.vp_width,
                    record.sess_date,
                    record.sess_time,
                    record.fps,
                    record.page_canvas,
                    record.location_id,
                    record.country,
                    browser_version_id = record.browser_data_id
                };
        var sql = new JoinSqlBuilder<smt2_browser_data, smt2_records>()
            .Join<smt2_browser_data, smt2_records>(browserdata => browserdata.id, record => record.browser_data_id, browserDataSelectFunc, recordselectFunc)
            .Join<smt2_records, smt2_cache>(record => record.cache_id, cache => cache.id)
            .Join<smt2_records, smt2_browsers>(record => record.browser_id, browser => browser.id)
            .Join<smt2_records, smt2_os>(record => record.os_id, os => os.id)
            .Join<smt2_records, smt2_domains>(record => record.domain_id, domain => domain.id)
            .Where<smt2_domains>(domain => domain.domain == domainName)
            .Where<smt2_records>(record => record.sess_date >= dateFrom && record.sess_date <= dateTo)
            .OrderByDescending<smt2_records>(record => record.sess_date)
            .ToSql()
            .Limit(1, take);


        var records = this.Connection.Select<RecordInfo>(sql);

and class

public class RecordInfo
    {
        public decimal id { get; set; }
        public string client_id { get; set; }
        public decimal cache_id { get; set; }
        public int domain_id { get; set; }
        public byte os_id { get; set; }
        public string os_type { get; set; }
        public byte browser_id { get; set; }
        public string agent_name { get; set; }
        public float browser_ver { get; set; }
        public string user_agent { get; set; }
        public bool ftu { get; set; }
        public string ip { get; set; }
        public int? scr_width { get; set; }
        public int scr_height { get; set; }
        public int vp_width { get; set; }
        public int vp_height { get; set; }
        public DateTime sess_date { get; set; }
        public float sess_time { get; set; }
        public byte fps { get; set; }
        public string page_canvas { get; set; }
        public int? location_id { get; set; }
        public string country { get; set; }
        public decimal? browser_version_id { get; set; }
    }

Thanks for any suggestions!

Was it helpful?

Solution

found the problem: the DB type was bigint which has been casted to decimal in DTO just changed decimal to long

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top