ASP.NET 实体框架列表视图实体数据源多个表,无法检索数据

本文关键字:实体 检索 数据 框架 NET 列表 视图 数据源 ASP | 更新日期: 2023-09-27 18:33:59

我的数据库关系如下;

国家 -> 地区 -> 城市 -> 医疗 -> 医疗服务 所有这些都是相互连接的,如一对多。

这是列表视图和实体数据源,它可以按预期工作,没有任何问题。问题出在背后的代码上。

 <asp:ListView ID="lvMainContent" runat="server" 
    DataKeyNames="MedicalID">
<LayoutTemplate>
    <ul ID="itemPlaceholderContainer" runat="server" 
        style="font-family: Verdana, Arial, Helvetica, sans-serif;">
        <li runat="server" id="itemPlaceholder" />
    </ul>
<div style="text-align: center;background-color: #CCCCCC;font-family: Verdana, Arial, Helvetica, sans-serif;color: #000000;"> 
</div>
</LayoutTemplate>
    <ItemSeparatorTemplate>
        <br />
    </ItemSeparatorTemplate>
<ItemTemplate>
    <li style="background-color: #DCDCDC;color: #000000;">Medicals:
       <br />
        MedicalName:
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("medicalName") %>' />
        <br />
        <br />
        CityName:
        <asp:Label ID="Label3" runat="server" Text='<%# Eval("City.CityName") %>' />
        <br />
        <br />
    </li>
</ItemTemplate>
</asp:ListView>
<asp:EntityDataSource ID="lvMainContentDataSource" runat="server"
ConnectionString="name=EntitiesMedical" 
    DefaultContainerName="EntitiesMedical"  EntitySetName="Medicals"  
    EnableFlattening="False">
</asp:EntityDataSource>
这是连接到"搜索"按钮的代码隐藏,实际上代码隐藏

和ASP端对我来说似乎相同,但是当我按下搜索按钮时会抛出错误,我将其添加到代码隐藏之后。

protected void SearchButton_Click(object sender, EventArgs e)
    {          
       using(Entity.EntitiesMedical em = new Entity.EntitiesMedical())
       {
           var result = from m in em.Medicals
                        where m.City.CityName == "Düsseldorf"
                        select new
                        {
                           m.MedicalID,
                           m.medicalName,
                           m.City.CityName
                        };
           EntityDataSource eds = new EntityDataSource();
           eds.ConnectionString = "name=EntitiesMedical";
           eds.DefaultContainerName = "EntitiesMedical";
           eds.EntitySetName = "Medicals";
           lvMainContent.DataSource = result.ToList();
           lvMainContent.DataBind();
       }          
    }
DataBinding: '<>f__AnonymousType5'3[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],

[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"不包含名称为"City"的属性。

任何帮助将不胜感激。我对包含属性感到困惑,实际上我猜我根本不需要它。

ASP.NET 实体框架列表视图实体数据源多个表,无法检索数据

查询背后的代码返回匿名类型

City.CityName

另一方面,列表视图绑定到

City.CityName

这行不通,返回的属性已经是一个字符串,列表需要一个对象,城市。

只需做:

                    select new
                    {
                       m.MedicalID,
                       m.medicalName,
                       m.City
                    };
       EntityDataSource eds = new EntityDataSource();
       eds.ConnectionString = "name=EntitiesMedical";
       eds.DefaultContainerName = "EntitiesMedical";
       eds.EntitySetName = "Medicals";