1

読み取り専用プロパティを持つ LINQ to SQL 生成クラスがあります。

<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 に私の変更を表示させる方法について何か考えはありますか?

4

3 に答える 3

2

既存の TotalLogins プロパティをプライベートまたは保護として設定し、読み取り専用属性を削除します。また、InternalTotalLogins のように名前を変更することもできます。

次に、部分クラスで手動で新しいプロパティを作成し、読み取り専用プロパティとしてパブリックに公開します。

Public ReadOnly Property TotalLogins() As System.Nullable(Of Integer)
    Get
        Return Me.InternalTotalLogins
    End Get
End Property
于 2008-09-18T19:42:40.613 に答える
0

フィールドを変更する前にSendPropertyChanging()を呼び出し、次にSendPropertyChanged( "")を呼び出します。これにより、テーブルエンティティの追跡で何かが変更されたことを認識できます。

于 2009-06-07T10:31:20.103 に答える
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

それを更新します。デフォルトでは読み取り専用プロパティは保存されないと思います。そして、とにかくそれが必要です。今はハックですが、それが人生です。

于 2008-09-18T19:31:52.950 に答える