Во-первых, EF не является вариантом для нашей среды разработки, поэтому, пожалуйста, не используйте ответы только "EF"...
Я думаю, что это довольно стандартная дилемма, поэтому я уверен, что должен быть такой способ, чтобы большинство профессионалов делало это так, что я просто не споткнулся... так что я здесь, надеюсь, что я могу показать мне, что это.
Скажем, у вас есть следующие таблицы базы данных:
tblCompanies
ID
NAME
tblDepartments
ID
COMPANY_ID
NAME
tblEmployees
ID
DEPARTMENT_ID
FIRSTNAME
LASTNAME
... какой лучший способ представить это в классах внутри вашего кода?
Я предполагаю, что лучший способ таков:
public class Company
{
public int ID { get; set; }
public string Name { get; set; }
public List<Department> Departments { get; set; }
}
public class Department
{
public int ID { get; set; }
public string Name { get; set; }
public List<Employee> Employees { get; set; }
}
public class Employee
{
public int ID { get; set; }
public string FirstName { get; set;}
public string LastName { get; set; }
}
Я считаю, что для этого должен быть "подход ООП". Однако то, что, кажется, всегда происходит, выглядит примерно так:
public class Department
{
public int ID { get; set; }
public string Name { get; set; }
public int CompanyID { get; set; }
public List<Employee> Employees { get; set; }
}
... главным образом потому, что, когда вы вытаскиваете только департамент из базы данных, у вас будет только идентификатор компании, а не все другие атрибуты, необходимые для полного заполнения экземпляра класса компании.
(Я использовал симпатичный пример ванили, но тот, который я на самом деле занимаюсь в моем текущем проекте, имеет 3 поля, которые он использует для связывания данных, поэтому мысль о том, что у них одинаковые 3 поля в нескольких классах, кажется неправильной для меня)
Есть ли наилучшая практика для этих сценариев? Насколько мне не нравится мысль хранить одни и те же данные в нескольких классах только из лени, мне также не нравится возвращать экземпляр класса с одним из его полей, заполненным, потому что все, что у меня было в то время,