2009-05-01 4 views
3

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

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

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

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

TIA!

ответ

4

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

1

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

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

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; 
} 
+0

Да, пытался избежать этого, потому что вычисления, которые я на самом деле делаю, намного больше, чем рассчитать возраст, и я хотел избежать необходимости пересчитывать каждый раз, когда вызывается свойство. Я знаю, что я могу обойти это с помощью проверки, чтобы узнать, был ли уже рассчитан возраст, но надеялся, что не придется «загрязнять» мой код всеми типами «if (myValue! = Null)». – Brian