2009-05-01 65 views
3

我想用一些額外的屬性來擴展我的Linq-to-Sql實體。這些是基於來自基礎SQL視圖的數據的「計算」屬性。例如,考慮有一個出生日期字段,用於計算擴展年齡字段。linq to SQL OnLoaded()with SQL View?

我試圖通過擴展OnLoaded()方法來擴展我的實體類。

我得到一個編譯時錯誤,但說明我無法創建它。我檢查了我的LTS實體類的設計器代碼,它沒有任何預期擴展點的部分定義。

我檢查了一些我的其他LTS實體類,他們確實有這些擴展點。我看到的唯一區別是沒有從SQL視圖加載,而不是從表加載。從SQL視圖加載時,有沒有辦法掛鉤到「Loaded」事件?

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 2009-05-01 12:20:53