Wie soll ich mit einer benutzerdefinierten Eigenschaft in einer Situation umgehen, in der ich Teilklassen mit den EF-generierten Klassen verwende?Verwenden von Teilklassen in Entity Framework mit benutzerdefinierten Eigenschaften
Hier ist das Setup:
Timesheet Tabelle - diese speichert eine Stunde des Mitarbeiters
- TimeSheetID (auto, int, PK)
- Entrydate (Datetime)
- Hours (int)
- EmployeeID (int)
EmployeeHourlyRate-Tabelle - speichert den aktuellen Stundensatz eines Mitarbeiters. Historische Preise werden auch hier gespeichert.
- RateID (int, PK)
- EffectiveDate (int, PK)
- Rate (double)
Dies ist eine Eins-zu-Beziehung von Timesheet zu EmployeeHourlyRate. Um die Rate eines Mitarbeiters zu finden, würde ich das maximale effektive Datum weniger als das EntryDate des timeSheets auswählen.
Um Dinge zu erleichtern, habe ich eine Teilklasse namens TimeSheet gemacht und eine neue Eigenschaft namens "Rate" zu dieser Klasse hinzugefügt. Was ich tun möchte, beziehe ich selbst aus derselben Abfrage, die meine Sammlung von TimeSheets füllt. Ich kenne einfach keinen einfachen und sauberen Weg, damit umzugehen.
Zum Beispiel könnte ich es auf diese Weise tun:
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
};
Diese in der Theorie funktionieren sollte, aber aus irgendeinem Grund die EF beschwert sich während der Laufzeit, dass ich eine Einheit generierte Klasse wiederverwenden (keine Ahnung, warum - es funktioniert gut, wenn ich meine eigene benutzerdefinierte Klasse erstellen). Aber selbst wenn es funktioniert, muss ich immer noch eine Liste von Feldern verwalten und von meinem EF zu einer einzigen Klasse mappen - d. H. Wartung wird zu einem Problem, wenn/wenn ich der TimeSheet-Tabelle neue Felder hinzufüge. Es ist auch dumm, all diese Informationen neu eingeben zu müssen.
Meine Frage ist also, wie gehen die Leute im Allgemeinen mit diesem Szenario um? Gibt es eine Möglichkeit, etwas im Datamodel zu tun, das meine Join-Regel (über die Auswahl des richtigen effektiven Datums basierend auf meinem EntryDate) effektiv kennen und damit umgehen könnte?
Es ist ein wenig schwierig zu sagen mit dem kleinen Code-Schnipsel, den Sie bereitgestellt haben. Vielleicht der Rest deiner partiellen Klasse ... –