方法'X'不是属性访问器(Linq / LinqToSql)

时间:2011-02-15 13:26:10

标签: asp.net vb.net linq linq-to-sql

我在ASP.NET网站中使用LinqToSql类,假设我有一个名为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设计器中。其他表没有一段时间经历过这个过程。

为什么会发生此异常?如何正确配置项目以纠正问题?

我现在(很明显)会调查自己,但最初的谷歌搜索没有显示任何可能阻止我前往这里的东西,并且说实话我没有时间去理解这一切出来并理解为什么 - 当我找到答案时必须要来!

编辑:

调用FindTestimonial的代码如下(我看不到Gabe建议的红鲱鱼的链接,但是,我不是那个在这种困境中得到答案的人):< / p>

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 :(得分:0)

好的,所以解决方案很简单如下:

  • Testimonial设计师

  • 中删除dbml课程
  • 全部保存,然后构建所有

  • Testimonial重新拖动Server Explorer

  • 全部保存,然后构建所有

虽然这解决了我的问题,但它没有告诉我或帮助我推断为什么发生这种情况。如果有人想进一步阐述这个问题,那么我就不会不了解事实,所以请这样做。