我是Entity Framework的新手。我创建了一个存储过程并将其添加到我的.edmx
文件中,但问题是,当我调用它时,它会导致异常
从具体化的'System.Int32'类型到可为空的'System.Boolean'类型的指定强制转换无效。
这是.edmx
档案
public ObjectResult<Nullable<global::System.Boolean>> uspLoginWindowsApp(global::System.String userName, global::System.String password, global::System.String userType, ObjectParameter result)
{
ObjectParameter userNameParameter;
if (userName != null)
{
userNameParameter = new ObjectParameter("UserName", userName);
}
else
{
userNameParameter = new ObjectParameter("UserName", typeof(global::System.String));
}
ObjectParameter passwordParameter;
if (password != null)
{
passwordParameter = new ObjectParameter("Password", password);
}
else
{
passwordParameter = new ObjectParameter("Password", typeof(global::System.String));
}
ObjectParameter userTypeParameter;
if (userType != null)
{
userTypeParameter = new ObjectParameter("UserType", userType);
}
else
{
userTypeParameter = new ObjectParameter("UserType", typeof(global::System.String));
}
return base.ExecuteFunction<Nullable<global::System.Boolean>>("uspLoginWindowsApp", userNameParameter, passwordParameter, userTypeParameter, result);
}
这部分是我调用函数的代码:
private void btnLogin_Click(object sender, EventArgs e)
{
if (_context == null)
_context = new ATSdbEntities();
ObjectParameter userTypeParameter = new ObjectParameter("result", false);
// This line here is causing the error
Boolean userExists = (Boolean)_context.uspLoginWindowsApp(txtLogin.Text.Trim(), txtPswd.Text.Trim(), cmbType.SelectedItem.ToString().Trim(), userTypeParameter).Single();
if (userExists)
{
Employee emp = new Employee();
emp.Show();
this.Hide();
}
else
{
MessageBox.Show("Incorrect Credential ");
}
}
我的存储过程如下所示
ALTER PROCEDURE [dbo].[uspLoginWindowsApp]
@UserName varchar(50),
@Password varchar(50),
@UserType varchar(50),
@result bit output
答案 0 :(得分:1)
我们还不知道你的存储过程到底是什么样的 - 假设它只需要三个varchar
参数并将结果作为OUTPUT
参数返回:
CREATE PROCEDURE dbo.uspLoginWindowsApp
@UserName VARCHAR(50),
@Password VARCHAR(50),
@UserType VARCHAR(50),
@Result BIT OUTPUT
然后我将此存储过程添加到Visual Studio 2012中的新.edmx
并创建了函数import。
当我调用这个存储过程时,我从Entity Framework返回的是存储过程的返回值(总是INT
),你要查找的结果将在{{1你作为调用的最后一个参数传入:
ObjectParameter
现在你得到了你的结果 - 无论用户是否存在。