Показать детали в элементе управления Repeater с использованием Entity Framework (подход code first) в asp.net webforms

#c# #asp.net #entity-framework #webforms

#c# #asp.net #entity-framework #webforms

Вопрос:

Как я могу получить данные для ASp.net веб-форма с использованием Entity Framework, подход Code first

Мне нужно отобразить список сотрудников из таблицы Emp на странице Emp.aspx с использованием элемента управления reapeter

Я новичок в EF и пытаюсь изучить EF для asp.net webforms

На данный момент я создал следующую папку App_Code

 App_Code
    DBClass
        Dept.cs
        Emp.cs
        EmployeeDBContent.cs
        EmpRepository.cs
  

Код для всех файлов

Отдел cs

     using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    /// <summary>
    /// Summary description for Dept
    /// </summary>
 namespace empNS
{   
public class Dept
    {
        //Scalar properties
        public int Id { get; set; }
        public string Name { get; set; }
        public string Location { get; set; }
        //Navigation Property
        public List<Emp> Emp { get; set; }
    }
}
  

Emp.cs

     using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    /// <summary>
    /// Summary description for EmpRepository
    /// </summary>
namespace empNS
{
    public class EmpRepository
    {
        public List<Dept> GetDepartments()
        {
            EmployeeDBContext empDBContext = new EmployeeDBContext();
            return empDBContext.Dept.ToList();
        }
    }
}
  

EmployeeDBContext.cs

     using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;

    /// <summary>
    /// Summary description for EmployeeDBContext
    /// </summary>
namespace empNS
{
    public class EmployeeDBContext: DbContext
    {
        public DbSet<Dept> Dept { get; set; }
        public DbSet<Emp> Emp { get; set; }

    }
}
  

EmpRepository.cs

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for EmpRepository
/// </summary>
  

пространство имен заполняется
{
общедоступный класс EmpRepository
{
общедоступный статический список GetEmployees()
{
EmployeeDBContext empDBContext = новый EmployeeDBContext();
верните empDBContext.Emp.ToList();
}
}

}

Я не уверен, как я могу показать список empployee на Emp.aspx странице, используя элемент управления repeater

Emp.aspx код

  <h1>Employee List</h1>
        <asp:Repeater ID="empList" runat="server">
            <ItemTemplate>
                <tr>
                    <td><%#Eval("ID") %></td>
                    <td><%#Eval("FirstName") %></td>
                    <td><%#Eval("LastName") %></td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
    </div>
  

CodeBehind

     using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
namespace empNS
{
    public partial class Emp : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //UPDATED CODE
        rptEmpList.DataSource = EmpRepository.GetEmployees();
        rptEmpList.DataBind();
        }
    }
}
  

Как я могу вызвать GetDepartments() функцию из EmpRepository.cs so, чтобы отобразить список сотрудников в элементе управления repeater.

Я совершенно новичок в этом и не смог найти простой пример, который может привязать элемент управления repeater с использованием подхода code first для отображения информации. Любая справка или указатель на руководство будут полезны.

Комментарии:

1. Вы выбрали webforms самостоятельно или это было продиктовано работодателем / профессором? Вы получили бы лучшие примеры интеграции EF с веб-приложениями, если бы научились ASP.NET MVC или ядро.

2. Мне нужно модифицировать старое приложение webform, и его части должны быть выполнены с использованием EF..

Ответ №1:

Вы можете привязать List непосредственно к Repeater. Просто убедитесь, что вы указали правильное пространство имен.

 protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack == false)
    {
        empList.DataSource = EmpRepository.GetDepartments();
        empList.DataBind();
    }
}
  

И поскольку вы привязываете класс к Repeater, проще сделать его строго типизированным. Затем вы можете получить доступ к свойствам напрямую.

 <asp:Repeater ID="empList" runat="server" ItemType="YourNameSpace.Dept">
    <ItemTemplate>
        <tr>
            <td><%# Item.ID %></td>
            <td><%# Item.FirstName %></td>
            <td><%# Item.LastName  %></td>
        </tr>
    </ItemTemplate>
</asp:Repeater>
  

Но похоже, что сотрудники являются собственностью отдела. Итак, если вы хотите их, вам либо нужно использовать вложенный Repeater, перебрать все отделы, чтобы получить сотрудников, либо выбрать отдел для Repeater.

Это позволит получить список сотрудников для первого отдела

 empList.DataSource = EmpRepository.GetDepartments()[0].Emp;
  

Вложенный повторитель

 <asp:Repeater ID="empList" runat="server" ItemType="YourNameSpace.Dept">
    <ItemTemplate>
        <tr>
            <asp:Repeater ID="empListNested" runat="server" ItemType="YourNameSpace.Dept.Emp" DataSource='<%# Item.Emp %>'>
                <ItemTemplate>
                    <tr>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>
        </tr>
    </ItemTemplate>
</asp:Repeater>
  

Комментарии:

1. empList.DataSource = EmpRepository.GetDepartments(); I get an error on this line an Object is required for the non-static methodEmpRepository.GetDepartment() Я также использую EMPNS пространства имен в EmpRepository и обращаюсь к нему в файле emp.asp.cs.

2. Возможно, вам нужно создать свои классы static . Остальное просто указывает на правильный класс empNS.classA.ClassB

3. после создания get class как статического public static List<Dept> GetDepartments() и обновления кода, поскольку он не извлекает никаких записей из базы данных