开发者

The method 'X' is not a property accessor (Linq / LinqToSql)

开发者 https://www.devze.com 2023-02-10 09:00 出处:网络
I\'m using LinqToSql classes in an ASP.NET website and let\'s say I have an entity named Testimonials. Two pages utilise this type - the first being a list of all existing Testimonial records and the

I'm using LinqToSql classes in an ASP.NET website and let's say I have an entity named Testimonials. Two pages utilise this type - the first being a list of all existing Testimonial records and the second being an add / editor with which to manage the records.

On the first page we use a simple query, for example:

Public Function GetTestimonials() As IQueryable(Of Testimonial)
    Return From testimonial In Context.Testimonials Select testimonial
End Function

This allows population a DataGrid with the returned items, however on the add / editor page we alter the query ever so slightly:

Public Function FindTestimonial(ByVal id As Integer) As Testimonial
    Return (From testimonial In Context.Testimonials Where testimonial.ID = id
            Select testimonial).FirstOrDefault()
End Function

This query dies, prior to even trying to populate anything, with the following message:

The method 'Testimonial.add_PropertyChanged' is not a property accessor

I have pretty much identical methods for other data objects which have been and still are executing just fine. One immediate difference I can think of is that this table has been recently updated in the database, removed from the dbml designer and re-added to the dbml designer. None of the other tables have undergone this process for some time.

Why is this exception occurring and how can I configure my project appropriately to correct the issue?

I'm going to look into myself now (obviously), but an initial Google search didn't show up anything which could deter me from heading here, and to be quite honest I don't have time to figure it all out and understand why - that'll have to come when I find the answer!

EDIT:

The code making the call to FindTestimonial is as follows (I can't see the link to the red herring suggested by Gabe, however, I'm not the one with the answers in this predicament):

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

Where DataServices is simply a list of our available data service classes which are preloaded with a page (such code works flawlessly throughout multiple projects, so I can't see the problem rising that far up) 开发者_运维百科and the GetService can simply be translated into newing up an instance.


Okay, so the solution was as simple as follows:

  • Remove the Testimonial class from the dbml designer

  • Save all and then build all

  • Drag the Testimonial table from Server Explorer afresh

  • Save all and then build all

Although this resolved my issue, it doesn't tell me or help me deduce why this occurred. If anyone would like to elaborate further on that subject then I won't be ignorant of learning the facts, so please do so.

0

精彩评论

暂无评论...
验证码 换一张
取 消