使用EF Core执行SQL查询获取数据库排序规则时出现‘Invalid column name : 'Value'’错误的原因排查
EF Core执行SQL查询获取数据库排序规则时出现‘Invalid column name : 'Value'’错误的原因排查
嗨,我来帮你拆解下这个问题的根源和解决办法~
你遇到的这个错误,本质是EF Core对简单类型(比如string、int这类)的SQL查询结果映射规则导致的,和SQL Server本身没什么关系。
在EF Core 3.x及之后的版本(包括你用的9.0.7),当你使用SqlQuery<T>且T是简单值类型/字符串时,EF Core默认期望查询返回的列名为Value,它会自动尝试把查询结果里名为Value的列值映射到你指定的string类型上。但你的SQL语句返回的列名是collation_name,EF Core找不到名为Value的列,自然就抛出了“无效列名Value”的错误。
知道原因后,解决起来就很简单了,只需要修改你的SQL语句,把返回的列名重命名为Value就行:
var collation = dbContext.Database.SqlQuery<string>($"SELECT collation_name AS [Value] FROM sys.databases WHERE name = DB_NAME()").FirstOrDefault();
这样EF Core就能正确识别列名,完成映射并返回排序规则字符串了。
你也可以换一种思路,比如定义一个简单的DTO类来接收结果,比如:
public class CollationResult { public string CollationName { get; set; } }
然后用SqlQuery<CollationResult>执行原SQL,再从对象里取CollationName属性,不过这种方法就不如直接重命名列名来得直接啦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

