2008-09-18 74 views
1

我有一個LINQ到SQL生成類具有隻讀屬性:如何修改只讀Linq的財產

<Column(Name:="totalLogins", Storage:="_TotalLogins", DbType:="Int", UpdateCheck:=UpdateCheck.Never)> _ 
Public ReadOnly Property TotalLogins() As System.Nullable(Of Integer) 
    Get 
     Return Me._TotalLogins 
    End Get 
End Property 

這可以防止被外部改變,但是我想從內部更新屬性我類如下:

Partial Public Class User 

... 

    Public Shared Sub Login(Username, Password) 
     ValidateCredentials(UserName, Password) 

     Dim dc As New MyDataContext() 
     Dim user As User = (from u in dc.Users select u where u.UserName = Username)).FirstOrDefault() 
     user._TotalLogins += 1 
     dc.SubmitChanges() 
    End Sub 

... 

End Class 

但是user._TotalLogins + = 1的調用沒有被寫入數據庫?有關如何讓LINQ查看我的更改的任何想法?

回答

2

將現有TotalLogins屬性設置爲private或protected,並刪除readonly屬性。您可能還想重新命名它,例如InternalTotalLogins。

Public ReadOnly Property TotalLogins() As System.Nullable(Of Integer) 
    Get 
     Return Me.InternalTotalLogins 
    End Get 
End Property 
0
Make a second property that is protected or internal(?) 

<Column(Name:="totalLogins", Storage:="_TotalLogins", DbType:="Int", UpdateCheck:=UpdateCheck.Never)> _ 
protected Property TotalLogins2() As System.Nullable(Of Integer) 
    Get 
     Return Me._TotalLogins 
    End Get 
    Set(byval value as System.Nullable(Of Integer)) 
     Return Me._TotalLogins 
    End Get 
End Property 

然後更新。我認爲它默認不會保存只讀屬性。無論如何,它爲什麼要這樣。我現在是黑客,但嘿,那就是生活。

0

在更改項致電SendPropertyChanging(),然後後調用SendPropertyChanged(「」:

然後在公開揭露它作爲一個只讀屬性部分類手工創建一個新的屬性)。 這將使Table實體跟蹤知道某些變化。