我有以下查询在SSMS中工作正常:
SELECT ClientID FROM xxx.ClientUsers WHERE UserName = 'user@email.com'
它将为 ClientID 返回单个整数值(ClientID 和 UserName 是 PK(。
如果我在控制器中尝试相同的查询并且它无法返回结果。我已经确认表中存在User.Identity.Name
。即使使用硬编码的电子邮件地址,它也不会返回数据。
var iTemp = -1;
iTemp = db.Database.SqlQuery<int>(@"SELECT ClientID FROM xxx.ClientUsers WHERE
UserName = '" + User.Identity.Name + "'").First();
上面的代码不返回任何行。
如果将原始 SQL 查询与实体框架一起使用,请确保使用正确的参数化并避免容易受到 SQL 注入的影响:
var iTemp = db.Database.ExecuteSqlCommand(
@"SELECT ClientID FROM xxx.ClientUsers WHERE UserName = @UserName",
new SqlParameter("UserName", User.Identity.Name)).FirstOrDefault();
甚至更好的是,您可以使用 LINQ:
var result = db.ClientUsers.Where(x => x.UserName == User.Identity.Name).FirstOrDefault();
if(result != null)
{
var clientId = result.ClientID;
}
现在删除的答案中的代码在退出并重新加载项目后有效。不知道发生了什么,或者我可能做了什么?无论如何,谢谢大家的帮助!至少我学会了一种更好的方法来执行查询。
var result = db.ClientUsers.Where(x => x.UserName == User.Identity.Name).First().ClientID;