Entity Framework: 'The SqlParameter is already contained by another SqlParameterCollection'
You just need to add ToList() method after the Sql query and remove @ in SqlParameter:
var result = userDbContext.users.SqlQuery("SELECT * FROM USERS WHERE
@email=@emailValue",
new SqlParameter("email", "email"),
new SqlParameter("emailValue","[email protected]")).ToList();
//new SqlParameter("p1", existingUser.password));
if (result.Count() == 0) //getting exception here
{
ViewBag.comment = "Sorry. We can not find your credentials";
return View();
}
It will work.
do something like this:
SqlParameter parameter = new SqlParameter("email", SqlDbType.VarChar);
parameter.Value = "[email protected]";
or try like this:
var check =userDbContext.Database
.SqlQuery<user>("SELECT * FROM USERS
WHERE email=@emailValue",
new SqlParameter("@emailValue","[email protected]")).ToList();
SqlParameter is like this:
var p = new SqlParameter {
ParameterName = "paramName",
DbType = DbType.Bit,
Direction = ParameterDirection.Output
};
When you are using params by query, you can't use them by another query. In your code you are using them twice
1- userDbContext.users.SqlQuery....
2- result.Count().
but if you use this code:
"userDbContext.users.SqlQuery(...).Count()"
your Code will be Correct
** SqlQuery does not return a query result until you use a linq extension like any(), tolist()..... on the other hand when you use SqlQuery, the result is an IEnumerable when you use any(), tolist(), first() it's converted to a result