Я использую LinqToSql
классы на веб-сайте ASP.NET, и скажем, у меня есть объект с именем Testimonials
. Этот тип используется на двух страницах: первая представляет собой список всех существующих Testimonial
записей, а вторая представляет собой надстройку / редактор для управления записями.
На первой странице мы используем простой запрос, например:
Public Function GetTestimonials() As IQueryable(Of Testimonial)
Return From testimonial In Context.Testimonials Select testimonial
End Function
Это позволяет заполнить DataGrid
возвращаемыми элементами, однако на странице добавления / редактирования мы слегка изменим запрос:
Public Function FindTestimonial(ByVal id As Integer) As Testimonial
Return (From testimonial In Context.Testimonials Where testimonial.ID = id
Select testimonial).FirstOrDefault()
End Function
Этот запрос умирает, даже прежде чем пытаться что-либо заполнить, следующим сообщением:
The method 'Testimonial.add_PropertyChanged' is not a property accessor
У меня есть почти идентичные методы для других объектов данных, которые выполнялись и работают очень хорошо. Одно непосредственное отличие, которое я могу вспомнить, заключается в том, что эта таблица была недавно обновлена в базе данных, удалена из конструктора dbml
и повторно добавлена в конструктор dbml
. Ни одна из других таблиц в течение некоторого времени не проходила этот процесс.
Почему возникает это исключение и как я могу соответствующим образом настроить свой проект для устранения проблемы?
Сейчас я собираюсь разобраться в себе (очевидно), но первоначальный поиск в Google не обнаружил ничего, что могло бы помешать мне отправиться сюда, и, честно говоря, у меня нет времени, чтобы разобраться во всем этом. и поймите почему - это придет, когда я найду ответ!
EDIT:
Код вызова FindTestimonial
выглядит следующим образом (я не вижу ссылки на красную сельдь, предложенную Гейбом, однако я не тот, кто дает ответы в этом затруднительном положении):
Private Sub PopulateView()
If (TestimonialId > 0) Then
Dim testimonialService = DataServices.GetService(Of TestimonialService)()
Dim testimonial = testimonialService.FindTestimonial(TestimonialId)
If (testimonial IsNot Nothing) Then
NameTextBox.Text = testimonial.Name
LocationTextBox.Text = testimonial.Location
MessageTextBox.Text = testimonial.Message
PublishDateTextBox.Text = testimonial.PublishDate
IsActiveCheckBox.Checked = testimonial.IsActive
End If
End If
End Sub
Public ReadOnly Property TestimonialId() As Integer
Get
Return Domain.Web.UI.QueryString.GetValue(Web.UI.QueryStringParameter.TestimonialId)
End Get
End Property
Где DataServices
- это просто список наших доступных классов обслуживания данных, которые предварительно загружены страницей (такой код работает безупречно во многих проектах, поэтому я не вижу проблемы, поднимающейся так далеко) и GetService
можно просто перевести в новый экземпляр.