【问题标题】:Can't get LinqDataSource to recognize deatil relations无法让 LinqDataSource 识别细节关系
【发布时间】:2011-10-19 19:18:18
【问题描述】:

我有两张表,Publication 和 DTPersonnel。发布有一个主键,另一个(DTPersonnel)有一个链接回发布的字段。我为我的 LinqDataSource 发送了一个 DBML 布局并链接了这两个表。 我已将 LinqDataSource 组件添加到我的网页和(用于测试)标签。

然后我将标签数据绑定设置为指向 DTPersonnel.DTRoleID 中的一个字段,如下所示:

 <asp:FormView ID="FormView1" runat="server" AllowPaging="True" 
        DataSourceID="LinqDataSource1">
        <ItemTemplate>
            <asp:Label ID="Label1" runat="server" 
    Text='<%# BIND("DTPersonnels.DTRoleID") %>'></asp:Label>
        </ItemTemplate>
    </asp:FormView>
    </asp:Content>

我的 LinqDataSource 是这样设置的:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Layout.aspx.cs" Inherits="AequorPubTracker.Account.Layout" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
        ContextTypeName="AequorPubTracker.LayoutDataContext" EntityTypeName="" 
        onselecting="LinqDataSource1_Selecting" TableName="Publications" 

        Select="new (DTPersonnels.DTRoleID,PublicationID, DTPersonnels, ActLAYDate, ActRRIPDate, ActPPIDate, ActPPODate, ActECTWDate, TargetECTWDate, TargetPPIDate, TargetRRIPDate, TargetPPODate, TargetLAYDate)">
    </asp:LinqDataSource>

但是当我在浏览器中运行应用程序时,我收到以下错误:

异常详细信息:System.Web.Query.Dynamic.ParseException:否 “EntitySet`1”类型中存在属性或字段“DTRoleID”

我希望我提供了足够的信息,任何帮助都会很棒。

【问题讨论】:

    标签: c# asp.net linqdatasource


    【解决方案1】:

    我假设由于您指定了 select 子句,因此这是数据的只读视图。如果是这样,您的问题有一个相当简单的解决方案。但是,如果不是这样(我不确定,因为您的代码调用了Bind 方法而不是Eval),则需要更复杂的处理来将相关字段更新为LinqDataSourceSelect指定的成员不允许更新。

    确保在子句中选择 DTPersonnels 成员,但从选择中删除 DTPersonnels.DTRoleID。如果您调用Eval("DTPersonnels.DTRoleID"),它将显示相关记录的成员值。

    但是,我想您的架构文件的配置也存在问题。根据我的推断,您期望PublicationsDTPersonnel 之间存在一对一的关系。但是,由于错误表明EntitySet 上没有成员,这意味着您允许一对多关系,其中Publications 有许多DTPersonnel。如果不存在一对一关系,您的代码将无法确定要显示哪个相关记录的DTRoleID

    如果您确实确实打算有许多与Publication 相关的DTPersonnel,那么您可能希望从显示DTPersonnel 列表的另一种方式来解决此问题并显示他们相关的Publication 的数据。

    【讨论】:

    • 是的,我必须使用 DTPersonnel,因为我有很多 DTPersonnel 数据行,我还使用了 eval 而不是绑定它,这似乎可以解决我的问题,谢谢
    【解决方案2】:

    如果您想知道错误本身来自哪里,它位于此处:

    Select="new (DTPersonnels.DTRoleID,PublicationID, DTPersonnels, ActLAYDate, ActRRIPDate, ActPPIDate, ActPPODate, ActECTWDate, TargetECTWDate, TargetPPIDate, TargetRRIPDate, TargetPPODate, TargetLAYDate)">
    

    由于您从 Publications 表中选择数据,因此它正在那里寻找“DTRoleID”字段。我猜该表没有“DTRoleID”字段,导致您收到错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多