sqlite – Dapper和向下整数转换
发布时间:2020-12-12 23:44:05 所属栏目:百科 来源:网络整理
导读:我通过System.Data.Sqlite用Sqlite检查Dapper的v1.25.如果我运行此查询: var rowCount = dbc.Queryint("SELECT COUNT(*) AS RowCount FROM Data").Single(); 我收到以下错误:System.InvalidCastException:指定的强制转换无效 这是因为Sqlite将上述值作为I
我通过System.Data.Sqlite用Sqlite检查Dapper的v1.25.如果我运行此查询:
var rowCount = dbc.Query<int>("SELECT COUNT(*) AS RowCount FROM Data").Single(); 我收到以下错误:System.InvalidCastException:指定的强制转换无效 这是因为Sqlite将上述值作为Int64返回,我可以使用以下代码进行验证.这将抛出“Int64”: var row = dbc.Query("SELECT COUNT(*) AS RowCount FROM Data").Single(); Type t = row.RowCount.GetType(); throw new System.Exception(t.FullName); 现在,以下代码实际上将处理从Int64到Int32的向下转换: public class QuerySummary { public int RecordCount { get; set; } } var qs = dbc.Query<QuerySummary>("SELECT COUNT(*) AS RecordCount FROM Data").Single(); rowCount = qs.RecordCount; throw new System.Exception(rowCount.ToString()); 当我抛出此异常时,它会给我实际的行数,表明Dapper为我处理了转换. 我的问题是,为什么dbc.Query< int>不会以类似于dbc.Query< QuerySummary> ;?的方式处理向下转换这是预期的行为吗? 不,这不是故意的.我已经提交并推送更改到github,这使得以下传递(它在1.25失败);它应该很快出现在NuGet上:// https://stackoverflow.com/q/23696254/23354 public void DownwardIntegerConversion() { const string sql = "select cast(42 as bigint) as Value"; int i = connection.Query<HasInt32>(sql).Single().Value; Assert.IsEqualTo(42,i); i = connection.Query<int>(sql).Single(); Assert.IsEqualTo(42,i); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |