Как мне обработать пользовательское свойство в ситуации, когда я использую частичные классы с классами, сгенерированными EF?
Вот настройки:
Табель рабочего времени - здесь хранятся часы сотрудника
- TimeSheetID (авто, int, PK)
- EntryDate (DateTime)
- Часы (int)
- EmployeeID (int)
Таблица EmployeeHourlyRate - хранит текущую почасовую ставку сотрудника. Исторические курсы также хранятся здесь.
- RateID (int, PK)
- EffectiveDate (int, PK)
- тариф (двухместный)
Это отношение один ко многим от расписания до EmployeeHourlyRate. Для того, чтобы найти ставку сотрудника, я бы выбрал максимально эффективную дату меньше, чем EntryDate расписания.
Чтобы упростить процесс, я создал частичный класс TimeSheet и добавил в него новое свойство Rate. То, что я хотел бы сделать, это заполнить себя из того же запроса, который заполняет мою коллекцию TimeSheets. Я просто не знаю простого и чистого способа справиться с этим.
Например, я мог бы сделать это так:
var list = from ts in Context.TimeSheets
....
select new TimeSheet() {
TimeSheetID = ts.TimeSheetID,
EntryDate = ts.EntryDate,
Hours = ts.Hours,
EmployeeID = ts.EmployeeID,
Rate = SomeRate //real code has been omitted
};
Теоретически это должно сработать, но по какой-то причине EF жалуется во время выполнения, что я повторно использую класс, сгенерированный сущностью (не знаю почему - он прекрасно работает, если я создаю свой собственный класс). Тем не менее, даже если это сработало, мне все равно нужно вести список полей и продолжать сопоставление моего EF с одним классом, т. Е. Обслуживание становится проблемой, когда / если я добавляю новые поля в таблицу TimeSheet. Также глупо перепечатывать всю эту информацию.
Итак, мой вопрос: как люди обычно справляются с этим сценарием? Есть ли способ сделать что-то в datamodel, который мог бы эффективно знать мое правило присоединения (о выборе правильной даты вступления в силу на основе моей EntryDate) и обрабатывать это?