LINQ для SQL OnLoaded () с SQL View? - PullRequest
3 голосов
/ 01 мая 2009

Я пытаюсь расширить мою сущность Linq-to-Sql с помощью нескольких дополнительных свойств. Это «вычисляемые» свойства, основанные на данных из базового представления SQL. Например, представьте себе поле даты рождения, которое используется для вычисления расширенного поля возраста.

Я попытался расширить свой класс сущностей, расширив метод OnLoaded ().

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

Я проверил несколько других моих классов сущностей LTS, и у них есть эти точки расширения. Единственное отличие, которое я вижу, состоит в том, что тот, кто не загружен, загружается из представления SQL, а не из таблицы. Есть ли способ подключиться к событию «Loaded» при загрузке из представления SQL?

ТИА!

Ответы [ 2 ]

4 голосов
/ 06 мая 2009

Я обнаружил, что у меня не указан PrimaryKey для моего класса сущностей Linq-to-Sql. Я считаю, что без указания первичного ключа, методы расширения не создаются в классе сущности. После того, как я указал первичный ключ в своем определении класса сущности LTS (через конструктор), я смог расширить событие OnLoaded ().

1 голос
/ 01 мая 2009

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

Вот пример шаблона:

public partial class [The Name of the Entity]
{
   public int Age
   {
      get
      {
         return CalculateAge(this.DateOfBirth);
      }
   }
}

Вот немного логики о том, как рассчитать возраст (Источник: Geekpedia )

public static int CalculateAge(DateTime BirthDate)
{
    int YearsPassed = DateTime.Now.Year - BirthDate.Year;
    // Are we before the birth date this year? If so subtract one year from the mix
    if (DateTime.Now.Month < BirthDate.Month || 
          (DateTime.Now.Month == BirthDate.Month && DateTime.Now.Day < BirthDate.Day))
    {
        YearsPassed--;
    }
    return YearsPassed;
}
...