Не удается получить LinqDataSource для распознавания отношений - PullRequest
0 голосов
/ 19 октября 2011

у меня есть две таблицы: Publication и DTPersonnel. У публикации есть первичный ключ, а у другого (DTPersonnel) есть поле, которое является обратной связью публикации. Я отправил макет DBML для моего LinqDataSource и связал две таблицы. Я добавил компонент 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 ]

1 голос
/ 19 октября 2011

Я предполагаю, что поскольку вы указываете предложение select, это представление данных только для чтения.Если это так, у вашей проблемы есть довольно простое решение.Однако, если это не так (в чем я не уверен, поскольку ваш код вызывает метод Bind, а не Eval), требуется более сложная обработка для обновления связанных полей как LinqDataSource с помощью SelectУказанный член не может разрешить обновление.

Убедитесь, что вы выбрали DTPersonnels член в предложении, но удалили DTPersonnels.DTRoleID из выбора.Если вы позвоните Eval("DTPersonnels.DTRoleID"), он отобразит значение члена связанной записи.

Полагаю, однако, есть также проблема в конфигурации вашего файла схемы.Из того, что я могу сделать вывод, вы ожидаете, что между Publications и DTPersonnel будут отношения 1: 1.Однако, поскольку ошибка указывает на то, что в EntitySet нет члена, это означает, что вы допустили отношение 1-ко-многим, где Publications имеет много DTPersonnel.Если нет отношения «один к одному», ваш код не сможет определить, какую связанную запись DTRoleID отображать.

Если вы на самом деле DO намереваетесь сделать этомногие DTPersonnel относятся к Publication, тогда вы можете захотеть подойти к этому с другой стороны, отобразив список DTPersonnel и отобразив вместо него соответствующие данные Publication.

0 голосов
/ 19 октября 2011

Если вам интересно, откуда исходит сама ошибка, она находится здесь:

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

Поскольку вы выбираете данные из таблицы «Публикации», она ищет поле «DTRoleID». Я предполагаю, что в таблице нет поля "DTRoleID", что приводит к получаемой вами ошибке.

...