给定代码中员工emp的需求是什么?

问题描述

我正在尝试理解给定的代码,有人可以告诉我 employee emp 在这里到底在做什么? 这是代码:-

public ActionResult Edit(string id)
{
   Employee emp;
   string cnstr = System.Configuration.ConfigurationManager.ConnectionStrings["abcd123"].ConnectionString;
   try
   {
       using (OracleConnection connection = new OracleConnection(cnstr))
       {
           string query = @"
            select
                 ID,FULL_NAME,EMAIL_ADDRESS,CURR_DIVISION,CURR_DEPARTMENT
            from
                 T_EMPLOYEE
            where
                 ID = :ID";

           emp = connection.QuerySingleOrDefault<Employee>(query,new { ID = id });
       }
       return View(emp);
   }

   catch (Exception ex)
   {
       throw;
   }

}

解决方法

Employee emp;是类型emp的局部变量Employee的声明。此时未分配任何值。

Employee是一个类,其中包含员工的属性,例如ID,姓名和出生日期。 O / R映射器(EF或EF Core)自动将数据库的记录转换为这种类型的对象。

(可选)可以在同一位置声明和初始化变量。然后必须删除行Employee emp;,查询看起来像这样:

Employee emp = connection.QuerySingleOrDefault<Employee>(query,new { ID = id });
return View(emp);

然后必须将return语句移到using语句内,因为emp的范围现在仅限于using块。

或者,由于现在编译器可以从初始化代码(=右侧的代码)推断类型,因此可以使用var

var emp = connection.QuerySingleOrDefault<Employee>(query,new { ID = id });
return View(emp);

请注意,emp的类型仍然严格为Employee。只是我们让编译器找到了它,而不是将其明确写下来。

或者您可以完全删除临时变量:

return View(connection.QuerySingleOrDefault<Employee>(query,new { ID = id }));

请注意,using语句仍在执行方法返回之前关闭和处置连接的工作。这是C#的魔力。

,

员工是您Model中的View。通过调用以下命令将其填充到emp实例中: connection.QuerySingleOrDefault<Employee>(query,new { ID = id });

它通过以下方式在视图中返回:

return View(emp);
,

员工emp最初没有分配任何值。

从Oracle数据库根据ID返回数据时,该值将存储在emp中。

现在,此emp也是您的控制器方法的视图模型。从emp返回的数据被推送到View。

您必须使用以下方法从View文件中访问此值: @model员工

@Model。[属性名称]