Метод 'X' не является средством доступа к свойству (Linq / LinqToSql) - PullRequest
1 голос
/ 15 февраля 2011

Я использую 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 можно просто перевести в новый экземпляр.

1 Ответ

0 голосов
/ 15 февраля 2011

Хорошо, решение было таким простым:

  • Удалить класс Testimonial из dbml конструктора

  • Сохранить все и затем построить все

  • Перетащите таблицу Testimonial с Server Explorer заново

  • Сохранить все и затем собрать все

Хотя это решило мою проблему, оно не говорит мне и не помогает мне объяснить, почему это произошло. Если кто-то захочет более подробно остановиться на этом вопросе, тогда я не буду в неведении узнать факты, поэтому, пожалуйста, сделайте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...