2016-09-09 4 views
0

Я работаю с базой данных SQL Server и сущностью (версия 6).Почему я должен использовать метод ToList() с повторителями и EF

Посмотрите на этот код за кодом:

public partial class WebForm1 : System.Web.UI.Page 
{ 
    private bdd1Entities bdd = new bdd1Entities(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
      Repeater1.DataSource = bdd.Personnes.ToList(); 
      Repeater1.DataBind(); 
    } 
} 

А вот источник повторитель в ASPX странице:

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <tr> 
      <td><%# DataBinder.Eval(Container.DataItem, "Nom") %></td> 
     </tr> 
    </ItemTemplate> 
    </asp:Repeater> 

Он отлично работает, но если я удалю вызов функции ToList() в коде позади, я получил

это исключение: System.NotSupportedException

Я не понимаю, почему. Я просто хочу понять спасибо

+0

1-й миллионный вопрос с тегом C# :) – Mixxiphoid

+0

Каково фактическое сообщение об исключении? – CodeCaster

+0

@CodeCaster Вероятно - привязка данных непосредственно к запросу хранилища не поддерживается. –

ответ

0

Регулятор Repeater обеспечивает поддержку привязки данных к любому объекту, который реализует интерфейс System.Collections.IEnumerable (например, DataView, ArrayList, Hashtable и т. Д.) Или интерфейс IListSource. В вашем случае, возможно, не существует какой-либо неявной беседы из любого из вышеупомянутых интерфейсов в ваш экземпляр Personnes. Вот почему вы должны преобразовать его в List или передать его в тип интерфейса источника.

+0

Почему объекты EF не реализуют System.Collections.IEnumerable? Есть ли способ изменить это? – Bob5421

+0

Я предполагаю, что он может возвращать IQueryable , а не IEnumerable . Вы можете проверить это, указав курсор на Personnes. Можете ли вы рассказать мне, что такое тип «Personnes» при размещении курсора (при отладке) – Nair

+0

@Nair [IQueryable ] (https://msdn.microsoft.com/en-us/library/bb351562 (v = vs. 110) .aspx) реализует 'IEnumerable '. –