Я хочу знать, как происходит создание/ссылка на объект. У меня есть фрагмент кода, в котором все объекты Employee в моем списке дублируются. В верхнем коде есть проблема, которая отменяет все предыдущие записи, поэтому список содержит дублированные объекты, тогда как нижняя часть - мое исправление. Я хочу понять, почему создание нового объекта внутри цикла while.Read() работало, тогда как создание объекта employee за пределами цикла while не выполнялось.Почему объект дублируется несколько раз?
public IEnumerable<Employee> Employees
{
get
{
List<Employee> employees = new List<Employee>();
using (SqlConnection connection = new SqlConnection(connectionString))
{
Employee _employee = new Employee(); //<issue is here, all enties in employees are duplicated values of a single record
SqlCommand sqlCmd = new SqlCommand("spGetAllEmployees", connection);
sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
connection.Open();
SqlDataReader reader = sqlCmd.ExecuteReader();
while (reader.Read())
{
_employee.EmployeeID = Convert.ToInt32(reader["EmployeeID"]); //object instantiation here fixed the issue, why?
_employee.Name = (reader["Name"].ToString());
_employee.Gender = (reader["Gender"].ToString());
_employee.City = (reader["City"].ToString());
_employee.DateOfBirth = Convert.ToDateTime(reader["DateOfBirth"]);
_employee.DepartmentID = Convert.ToInt32(reader["DepartmentID"]);
employees.Add(_employee);
}
}
return employees;
}
}
Я хочу понять, почему это исправило проблему.
public IEnumerable<Employee> Employees
{
get
{
List<Employee> employees = new List<Employee>();
using (SqlConnection connection = new
SqlConnection(connectionString))
{
SqlCommand sqlCmd = new SqlCommand("spGetAllEmployees", connection);
sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
connection.Open();
SqlDataReader reader = sqlCmd.ExecuteReader();
while (reader.Read())
{
Employee _employee = new Employee(); //this fixed the issue, why?
_employee.EmployeeID = Convert.ToInt32(reader["EmployeeID"]);
_employee.Name = (reader["Name"].ToString());
_employee.Gender = (reader["Gender"].ToString());
_employee.City = (reader["City"].ToString());
_employee.DateOfBirth = Convert.ToDateTime(reader["DateOfBirth"]);
_employee.DepartmentID = Convert.ToInt32(reader["DepartmentID"]);
employees.Add(_employee);
}
}
return employees;
}
}