我想得到
@@SERVERNAME
的值。以下代码有效:
[Keyless]
public class EntityString
{
public String Value { get; set; } = String.Empty;
};
// inside MyDbContext.OnModelCreating
modelBuilder.Entity<EntityString>();
// inside MyDbContext
public IQueryable<EntityString> QueryServerName()
=> Set<EntityString>().FromSqlRaw("SELECT @@SERVERNAME as Value");
// At usage site
ServerName = (await WHContext.QueryServerName().FirstAsync()).Value
然而,对于简单的任务来说,它似乎过于复杂。有没有更简单的方法来执行预计返回单个字符串值的
SELECT
查询?
使用
String
而不是 EntityString
会产生需要实体类的运行时错误。
以下更改有效:
// In MyDbContext class
public IQueryable<EntityString> QueryServerName()
=> Database.SqlQueryRaw<String>("SELECT @@SERVERNAME as Value").AsQueryable();
// usage
ServerName = await MyContext.QueryServerName().FirstAsync();
使用
SqlQuery
会出现错误,无法将 string
转换为 FormattableString
。
从查询字符串中省略
as Value
会产生运行时错误 "No column name was specified for column 1 of 't'. Invalid column name 'Value'."