我正在尝试使用React前端和ASP .NET Core后端创建登录页面。 因此,当用户登录系统时,我必须使用类似的查询
从UserLogin中选择*,其中email =“ asbhf@gmail.com”
这样我的API URL应该是
https://localhost:44383/api/UserLogins?email=“ asbhf@gmail.com”
因此,我在UserLoginController.cs中尝试了此代码
// GET: api/UserLogins?email="asd@gmail.com"
public async Task<IActionResult> GetUserLogin([FromRoute] string email)
{
if (email == null)
{
return NotFound();
}
string query = "SELECT * FROM UserLogin WHERE email = @email";
var UserLogin = await _context.UserLogin
.FromSql(query, email)
.Include(d => d.Username)
.AsNoTracking()
.FirstOrDefaultAsync();
if (UserLogin == null)
{
return NotFound();
}
return Ok(UserLogin);
}
但是,它不会像我期望的那样打印任何输出。您能否给我任何解决我问题的提示。
答案 0 :(得分:0)
首先,Include
方法指定要包含在查询结果中的相关对象。它可用于从数据库中检索某些信息,并且还希望包含相关实体,而不指定要返回的字段。有关更多详细信息,请参阅here。
第二,您的数据查询部分中存在一些错误,请尝试以下修改:
string query = $"SELECT Username FROM UserLogin WHERE email = @email";
var p1 = new SqlParameter("@email", email);
var UserLogin = await _context.UserLogin
.FromSql(query, p1)
.AsNoTracking()
.FirstOrDefaultAsync();
您可以查看Executing Raw SQL Queries中FromSql
的用法。
答案 1 :(得分:0)
我推荐了write sql query for entityframework
所以我的工作代码是
var UserLogin = _context.UserLogin.Where(c => c.Email == email);