Как сообщить приложению, что значение свойства автоматически сгенерированного класса частичных сущностей изменилось
Entity Framework 6, Database First, Linq и все эти вкусности!!!
У меня есть таблица "клиент", одним из полей которой является "DOB"
Используя VS2015 и EF, я успешно сгенерировал модель, которая отлично работает
Я использую linq как
dim customers = context.Customers.toList
а результаты используются в качестве источника данных datagridview в windows forms.
Но, чтобы сделать вещи более интересными, мне нужно отобразить новое вычисляемое поле "возраст" в виде столбца в datagridview, который, конечно же, будет получен из DOB и сегодняшнего дня. Чтобы сделать вещи еще более интересными, я хотел бы упорядочить результаты запроса в порядке возрастания возраста.
Я бы предпочел избежать проекций, которые хотели бы иметь простой класс клиента со всеми необходимыми полями в нем, даже вычисленными. Несмотря на то, что если кому-то хорошо в проекции его код будет приветствоваться так же, как это было трудно для меня, чтобы сделать это таким образом, как функция GetAgeByDates не допускается компилятором и SQL
Что я уже пробовал:
Я создал отдельный файл, который хотел расширить частичный класс Customer, который автоматически генерируется ADO.net модель EF. В этом отдельном файле я создал
Private _AgeOnDate As Integer Public ReadOnly Property AgeOnDate As Integer Get Return _AgeOnDate End Get End Property
и
public Function GetAgeByDates(dob as Date, optional someDate As Date=Date.Now) As Integer
Мне нужна была эта переменная _AgeOnDate
И вот тут-то и начинается проблема
В идеале я бы хотел сделать что-то вроде
Public Overloads Property DOB As Date Get Return _DOB End Get Set(value As Date) _DOB = value _AgeOnDate = GetAgeFromDates(value, Date.Now) End Set End Property
Таким образом, возраст будет рассчитан после того, как DOB будет установлен, и он будет храниться в
_AgeOnDate
, таким образом, чтобы быть готовым к использованию в запросе linq, какdim customers = context.Customers.OrderByDescending(Function(x) x.AgeOnDate).toList
Но это свойство определено в автоматически сгенерированном файле, поэтому я не хотел бы его изменять.
Конечно, кто-то предложил бы упорядочить список по убыванию DOB, но это не проблема. Мне нужно каким-то образом перехватить DOB-сеттера и вычислить возраст, основанный на недавно установленном DOB. Если это возможно, та же тактика будет применена и на некоторых других полях, которые не так легко заказать, как DOB.
Кроме того, я не могу найти такой метод, как
OnDOBChangedили по крайней мере
OnPropertyChangedчтобы переопределить и решить проблему. Я с нетерпением жду вашего звонка, ребята. Спасибо за ваше время!