Автоматически вычисляемые свойства в сущностях Linq 2 Sql? - PullRequest
2 голосов
/ 10 октября 2009

Допустим, в моей базе данных есть таблица с именем Orders, которая имеет следующие столбцы:

OrderId Дата заказа CancelDate ShipDate LastActionDate

Я хочу, чтобы LastActionDate всегда была самой последней датой OrderDate, CancelDate и ShipDate. Какой лучший способ сделать это? Есть ли способ обработать событие OnChanged этих трех дат, чтобы LastActionDate можно было пересчитать при каждом изменении этих свойств? Или есть какая-то встроенная магия Linq 2 Sql, которая обрабатывает этот сценарий? Или мне просто нужно установить LastActionDate при каждом изменении любой из трех дат?

Ответы [ 2 ]

1 голос
/ 10 октября 2009

В вашей модели Linq-to-SQL каждое свойство каждой сущности имеет частичный метод , называемый "(имя свойства) Changed ()".

Частичные методы - это новая особенность C # 3.0 - это методы, которые определены, но не обязательно имеют фактическую реализацию. Если у них нет реализации, любой вызов к ним будет отброшен на этапе компоновки вашего процесса сборки.

Однако, если вы предоставляете реализацию, то эта реализация действительно называется. Поскольку ваши классы сущностей, такие как Order, являются частичными классами, вы можете легко создать свой собственный дополнительный частичный класс и определить эти методы.

Так что в вашем случае вы найдете OrderDateChanged(), CancelDateChanged() и ShipDateChanged().

Из этих методов вы можете легко вызвать метод с именем CalculateLastActionDate(), который при необходимости вычислит вашу новую дату. Должно быть довольно легко.

public partial class Order
{
   void OrderDateChanged()
   {
       CalculateLastActionDate();
   }

   ......

   private void CalculateLastActionDate()
   {
      ... your implementation here
   }

}

Марк

0 голосов
/ 10 октября 2009

Если вы хотите, чтобы LastActionDate вычислялся, вы не должны иметь его в качестве столбца в вашей базе данных.

Предполагая, что столбец отсутствует в базе данных, он также не должен быть частью автоматически сгенерированного кода L2S. Это хорошо, потому что это означает, что вы можете добавить его самостоятельно, поскольку автоматически сгенерированные классы L2S являются частичными классами.

Добавьте новый файл кода C # и объявите класс Order с той же самой сигнатурой, что и автоматически сгенерированный класс Order, и добавьте вычисляемое свойство. Как то так:

public partial class Order
{
    public DateTime LastActionDate
    {
        get
        {
            // pick the desired value from the other
            // three properties and return it
        }
    }
}

Обратите внимание на ключевое слово partial в объявлении класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...