2013-10-05 49 views
0

我的数据库关系如下;ASP.NET实体框架ListView entitydatasource多表,无法检索数据

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

这里是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> 

,这里是后面的代码连接到“搜索”按钮,实际上代码隐藏和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(); 

     }   

    } 

数据绑定:“<> f__AnonymousType5`3 [[System.Int32,mscorlib程序,版本= 4.0.0.0,文化=中性公钥= b77a5c561934e089],[System.String,mscorlib程序,版本= 4.0.0.0 ,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]不包含名称为'City'的属性。

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

回答

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"; 
+0

大它的作品,感谢,但坦率地说,我不明白为什么我们不允许specificly选择CityID或城市名,是不是一个性能问题来检索所有表而不是只有必要的领域?另一方面,我们允许选择Medical table的特定字段 – mctuna

+1

您可以直接选择CityName,但是您必须将绑定更改为CityName而不是City.CityName。就性能而言,这确实可以更好。 –