ASP.NET实体框架ListView entitydatasource多个表,无法检索数据

时间:2013-10-05 18:08:23

标签: c# asp.net entity-framework listview

我的数据库关系如下;

国家/地区 - >地区 - >城市 - >医疗 - > MedicalServices所有这些服务都以一对多的方式相互连接。

这是listview和entitydatasource,它按预期工作,没有任何问题。问题在于背后的代码。

 <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>

这里是Code Behind连接到“Search”按钮实际上Code Behind和ASP端看起来和我相同但是当我按下Search按钮时会抛出错误,我在后面的代码后添加它。

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:'&lt;&gt; 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'的属性。

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

1 个答案:

答案 0 :(得分:1)

您的查询后面的代码返回带有

的匿名类型
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";