2010-04-27 48 views
0

我有一些由linq2SQL自動創建的對象。如何爲Linq2SQL對象創建自定義獲取和設置方法

我想編寫一些代碼,只要讀取或更改這些對象的屬性,就應該運行這些代碼。

我可以使用GET典型{//代碼}和集合{//代碼}在我的部分類文件中添加此功能?目前,我收到有關此成員已被定義的錯誤。

這一切都有道理。

它是正確的,我將要創建的功能爲切入點,實現此功能的方法,因爲我不能重新定義獲取和設置該屬性的方法。

我希望剛剛更新的GET和SET,因爲這將意味着我不會有改變所有的參考點在我的應用程序。但我想我可能需要在任何地方更新它。

回答

2

不確定讀取,但可以跟蹤對象的更改。例如。自動生成的實體上有PropertyChangedEventHandler

那麼你有什麼要做的就是白的部分類(讓我們假設你有一個Person實體):

public partial class Person 
{ 
    public Person() 
    { 
     this.PropertyChanged += 
      new PropertyChangedEventHandler(Person_PropertyChanged); 
    } 

    protected void Person_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     // your code here 
    } 
} 
1

除非修改被做了生成的代碼,然後添加額外的代碼設定器(例如,使用像在WPF模式,與INotifyPropertyChanged的),那麼這將是不可能的。

+0

是的,絕對不希望那樣做,因爲當時我失去了自動生成linq2sql的好處。 – 2010-04-27 15:51:05

2

我所做的,當我想做的事,這是使私有財產/不可訪問(因爲這可以作爲DBML定義的一部分來完成,而無需編輯生成的代碼),並給它比我想要的屬性不同的名稱揭露。然後,我使用我想公開的名稱在分部類中實現了一個公共包裝器屬性。然後(如果你想成爲真的)實現一個LINQ提供者,它可以將引用包裝器屬性的查詢轉換爲引用基礎屬性的查詢。我已經完成了所有這些工作,並且運行良好,但是自定義LINQ提供程序非常棘手。

+0

也有趣,但我喜歡能夠使用dbml自動生成版本的想法,而不必跟蹤修改。然而,在帖子末尾的內容比我的頭腦要複雜一些。 – 2010-04-28 01:12:47

+0

是的,我喜歡不必修改由DBML生成的代碼。這個解決方案允許我包裝屬性而不必觸摸DBML生成的代碼。希望接近尾聲的東西是不必要的。如果你想直接對數據庫執行LINQ-to-SQL查詢時使用包裝的屬性,而不是檢索某些記錄(不使用這些屬性),然後查詢/過濾您檢索的對象列表,則只需要這樣做即可LINQ到對象。 – BlueMonkMN 2010-04-28 11:20:28

相關問題