Хорошо, для базового примера говорят, что у меня есть приложение с расходами, и каждый расход в моей базе данных SQL имеет идентификатор, идентификатор сотрудника и сумму. Должен ли я сделать это:Какова наилучшая практика для обработки сложных объектов как членов класса?
public class Expense
{
public int Id { get; set; }
public Employee Employee { get; set; }
public decimal Amount { get; set; }
}
Или так:
public class Expense
{
public int Id { get; set; }
public int EmployeeId { get; set; }
public decimal Amount { get; set; }
}
Вы видите, что я обычно сделать первый, и когда я принести расход из базы данных я бы установить поле Employee, вызвав конструктор как : Employee = new Employee(int id)
это сделало бы еще одну поездку в БД, чтобы заполнить элементы в объекте Employee. Это удобно, потому что теперь я могу получить доступ к членам/функциям сотрудников через счет. I.E. если я привязан как объект ObjectDataSource, я мог бы отобразить что-то вроде Eval("Employee.Name")
и показать что-то более дружелюбное, а затем просто число, поскольку оно хранится в БД.
Однако текущий проект, над которым я работаю, может занять 10 тысяч тысяч строк, а количество запросов БД будет ракета-небо, если я получаю данные о первом счете, а затем детали сотрудника для каждого объекта. (и на самом деле мой текущий проект имеет таблицу с 6-7 внешними ключами).
Есть ли способ иметь мой торт и есть его тоже?
Возможно, имея класс интерфейса только с полями Id, а не с полными полями объекта? но я чувствую, что я никогда не понимал интерфейсов, поэтому я не уверен, что это изменит ситуацию.
Спасибо всем, кто зачитал это далеко, даже если у вас нет ответа для меня.
Кажется, что объектная реляционная структура с использованием LazyLoading довольно близка к «лучшим из двух миров». –