Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架中something.Reader()的等效函数_C#_Asp.net_Entity Framework - Fatal编程技术网

C# 实体框架中something.Reader()的等效函数

C# 实体框架中something.Reader()的等效函数,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,在实体框架中,reader.Read()的等价物是什么,可以在下面的代码片段这样的循环中使用 public bool Login_Authentication(ref string Username, ref string Password) { try { SqlConnection Con = new SqlConnection(SQLDatabase_Connecti

在实体框架中,reader.Read()的等价物是什么,可以在下面的代码片段这样的循环中使用

 public bool Login_Authentication(ref string Username, ref string Password)
    {
        try
            {                
            SqlConnection Con = new          SqlConnection(SQLDatabase_Connection.GetConnection());
            Con.Open();
            SqlCommand command = new SqlCommand("SelectLoginData", Con);
            command.CommandType = CommandType.StoredProcedure;
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                employeeID = reader.GetInt32(1);
                userName = reader.GetString(2);
                passWord = reader.GetString(3);
                string userType = reader.GetString(4);
                if (userName == Username && Password == passWord)
                {

                    if (userType == "admin")
                    {
                        adminLogIn();
                        break;
                    }
                    else if (userType == "employee")
                    {
                        employeeLogIn();
                        break;
                    }
                }
            }
            Con.Close();
            Con.Dispose();
        }
        catch (Exception ex)
        {}
    }
现在我有一个名为TBL_PAYROLL的表,实体框架类名为HRMSEntities。我正在做以下工作,但它不起作用。 错误消息:错误5不可开票的成员“HRMSDataAccessLayer.HRMSEntities.TBL\u PAYROLL”不能像方法一样使用。

HRMSEntities hrmsDB = new HRMSEntities();
private void calculatePayrollManagement()
    {
        using (HRMSEntities context = new HRMSEntities())
        {
            foreach (TBL_PAYROLL user in context.TBL_PAYROLL())
            {
                // for every row there would be some calculation 
                // want to get data of every row in user variable
            }
        }

    }

你不必这么做。实体框架负责读取SQL数据和填充实体

using (var context = new YourContext())
{
    foreach (var user in context.SelectLoginData())
    {
        // user is an instance of User, 
        // containing all properties filled from table
    }
}

另外,您的登录存储过程似乎有点。。。次优。您只需从数据库中选择所有用户并在代码中进行比较,而不必利用SQL提供的功能。您似乎还将密码存储为纯文本,这是不可取的。

EntityFramework是将SQL表、视图和存储过程映射到类中的一种很好的方法-您不需要乱用SQL命令,也不需要考虑如何在SQL中处理事情

  • 从现有数据库创建实体模型(edmx),引入要为其创建类的表/视图
  • 使用生成的上下文对执行Linq查询。大多数情况下,您不需要担心正在生成的sql,尽管如果您感兴趣,有一些工具/技术可以帮助您确保linq的结构能够生成高效的sql
例如,假设EF为您生成了一个名为“myDataContext”的上下文,您有一个名为“Users”的类(从一个名为Users的表创建)

你可以这样写一些linq:

var myAdmins = myDataContext.Users.Where(x=>x.UserType=="admin");
创建用户类型为“admin”的所有用户的列表

或者以您的示例为例(但注意关于以纯文本形式存储密码的其他注释是不好的)


请注意,这不是一个很好的例子!FirstOrDefault()确保只向userData返回一个结果,否则它将是一个列表。但是,如果您使用该用户名/密码返回了多个用户,那么您的数据将严重受损!您可以“单选”要求只返回一个结果,否则会引发异常。但不管怎么说,这只是一个品尝一些linq的人。

谢谢。我会记住你的指示。事实上,我是这个美丽的.NET世界的新手。我按照你的建议编码。但这是一个错误。我编辑了这个问题。你能看一下吗。谢谢@codecasterro消息:
错误5非可开票成员“HRMSDataAccessLayer.HRMSEntities.TBL_PAYROLL”
@codecasterro它是一个属性,不是一个方法。删除
()
。它现在没有错误,我学到了需要做的事情。谢谢@编解码器
    var userData = myDataContext.Users
        .Where(x=>x.UserName.Equals(userName)  
        && x.Password.Equals(passWord).FirstOrDefault();
    if (userData==null)
    {
      // there is no user with this username/password combo ...
    }
    else
    {
      if (userData.UserType=="admin")
          AdminLogin();
      else if (userData.UserType=="employee"
          EmployeeLogin();
    }