无法让LinqDataSource识别deatil关系

时间:2011-10-19 19:18:19

标签: c# asp.net linqdatasource

我所拥有的是两个表,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:否   属性或字段'DTRoleID'存在于'EntitySet`1'

类型中

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

2 个答案:

答案 0 :(得分:1)

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

确保在子句中选择Select成员,但从选择中删除DTPersonnels。如果您致电DTPersonnels.DTRoleID,它将显示相关记录的会员价值。

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

如果您确实 DO 打算与DTRoleID相关的许多DTPersonnel,那么您可能希望从显示列表的其他方式处理此问题Publication并显示相关的DTPersonnel数据。

答案 1 :(得分:0)

如果你想知道错误本身来自哪里,它就在这里:

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

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