Как мне изменить свойство Linq, доступное только для чтения
-
01-07-2019 - |
Вопрос
У меня есть класс, сгенерированный 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 увидеть мои изменения?
Решение
Установите существующее свойство TotalLogins либо как частное, либо как защищенное и удалите атрибут только для чтения.Вы также можете захотеть переименовать его, напримерВнутренние логины.
Затем создайте новое свойство вручную в частичном классе, который предоставляет его публично как свойство, доступное только для чтения:
Public ReadOnly Property TotalLogins() As System.Nullable(Of Integer)
Get
Return Me.InternalTotalLogins
End Get
End Property
Другие советы
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
а затем обновите это .Я думаю, что по умолчанию он не сохранит свойства только для чтения.И вообще, почему это должно быть так.Сейчас это халтура, но, эй, такова жизнь.
Перед изменением поля вызовите SendPropertyChanging(), а затем после вызовите SendPropertyChanged("").Это заставит систему отслеживания объектов таблицы узнать, что что-то изменилось.