Инициализируйте фреймовую работу, не сохраняя данные сначала с помощью кода — asp.net webform

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

#c# #asp.net #entity-framework #веб-формы #entity-framework-6

Вопрос:

Я новичок в EF, и мне нужно внести изменения в существующий с EF в asp.net webform 4.5

Я могу отображать данные в элементе управления повторителем, извлекать данные из выпадающего списка, но по какой-то причине я не могу сохранить данные для Employee, я не получаю никаких ошибок, и когда я проверяю SQL Profiler, он не показывает никакой хранимой процедуры Insert в списке сведений, которые он показывает.

Я делаю что-то не так или мой подход неправильный

  App_Code

    DBClass
    Department.cs
    Employee.cs
    EmployeeDBContent.cs
    EmpRepository.cs
  

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

EmployeeDBContext.cs

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

/// <summary>
/// Summary description for EmployeeDBContext
/// </summary>
/// 
namespace empNS
{
    public class EmployeeDBContext : DbContext
    {


        public DbSet<Department> Departments { get; set; }
        public DbSet<Employee> Employees { get; set; }


        public EmployeeDBContext()
            : base("EmployeeDBContext")
        {
            //disable initializer
            Database.SetInitializer<EmployeeDBContext>(null);
        }


    }

    //protected override void OnModelCreating(DbModelBuilder modelBuilder)
    //{
    //    base.OnModelCreating(modelBuilder);
    //}


}
  

EmpRepository.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 static List<Employee> GetEmployees()
        {
            EmployeeDBContext empDBContext = new EmployeeDBContext();
            return empDBContext.Employees.ToList();
        }

        public static List<Department> GetDepartments()
        {
            EmployeeDBContext empDBContext = new EmployeeDBContext();
            return empDBContext.Departments.ToList();
        }


        public static List<Department> GetDepartmentNames()
        {
            EmployeeDBContext empDBContext = new EmployeeDBContext();
            return empDBContext.Departments.ToList();
        }

        public static void  InsertEmployee(Employee employee )
        {

            EmployeeDBContext empDBContext = new EmployeeDBContext();
            empDBContext.SaveChanges();
        }

    }
}
  

Department.cs

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

/// <summary>
/// Summary description for Dept
/// </summary>
/// 
namespace empNS
{
    public class Department
    {

        //Scalar properties
        public int Id { get; set; }
        public string Name { get; set; }
        public string Location { get; set; }

        //Navigation Property
        public List<Employee> Employees { get; set; }


    }
}
  

employee.cs

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;

/// <summary>
/// Summary description for Emp
/// </summary>
/// 
namespace empNS
{
    public class Employee
    {
        //Scalar Properties
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Designation { get; set; }

        public int Department_Id { get; set; }
        //Navigation Property
        [ForeignKey("Department_Id")]
        public Department Department { get; set; }


    }
}
  

Employee.aspx

  <h1>Employee List</h1>
        <asp:Repeater ID="rptEmpList" runat="server" >
            <ItemTemplate>
                <p><%#Eval("Id") %> | <%#Eval("FirstName") %> | <%#Eval("LastName") %></p>



            </ItemTemplate>
        </asp:Repeater>

        <h1>SAVE EMPLOYEE</h1>
        <p>FN: <asp:TextBox ID="txtFN" runat="server"></asp:TextBox></p>
        <p>LN: <asp:TextBox ID="txtLN" runat="server"></asp:TextBox></p>
        <p>Des: <asp:TextBox ID="txtDes" runat="server"></asp:TextBox></p>
        <p>Dept: <asp:DropDownList ID="ddDept" runat="server"></asp:DropDownList></p>

        <p><asp:Button ID="btnSaveEmployee" runat="server" Text="Save Employee" OnClick="btnSaveEmployee_Click" /></p>
  

Employee.aspx.cs

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using empNS;


public partial class EmployeePage : System.Web.UI.Page
{

    Employee empObj = new Employee();

    protected void Page_Load(object sender, EventArgs e)
    {
        rptEmpList.DataSource = EmpRepository.GetEmployees();
        rptEmpList.DataBind();

        //fill DD
        getDepartmentNames();
    }


    public void getDepartmentNames()
    {
        ddDept.DataSource = EmpRepository.GetDepartmentNames();
        ddDept.DataTextField = "Name";
        ddDept.DataValueField = "Id";
        ddDept.DataBind();
    }
    protected void btnSaveEmployee_Click(object sender, EventArgs e)
    {

        empObj.FirstName = txtFN.Text;
        empObj.LastName = txtLN.Text;
        empObj.Designation = txtDes.Text;
       empObj.Department_Id = int.Parse(ddDept.SelectedItem.Value.ToString());
       EmpRepository.InsertEmployee(empObj);

    }
}
  

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

1. Ваша функция InsertEmployee ничего не делает (особенно с данным сотрудником). Вы должны добавить его в набор баз данных контекста.

2. Вы имеете в виду это public static void InsertEmployee(Employee employee ) { EmployeeDBContext empDBContext = new EmployeeDBContext(); empDBContext.SaveChanges(); }

3. вы вставляете функцию Employee, пропуская строку empDBContext .Employee.Add(employee ); перед SaveChanges(); . Также я думаю, что вам следует включить намерение EmployeeDBContext с использованием statment

Ответ №1:

Это

 public static void  InsertEmployee(Employee employee )
{    
    EmployeeDBContext empDBContext = new EmployeeDBContext();
    empDBContext.SaveChanges();
}
  

Должно быть это:

 public static void  InsertEmployee(Employee employee )
{    
    EmployeeDBContext empDBContext = new EmployeeDBContext();
    empDBContext.Employees.Add(employee);
    empDBContext.SaveChanges();
}
  

Редактировать

Убедитесь, что у вас также правильно объявлены ваши наборы баз данных. В вашем случае это должно быть что-то вроде:

 DbSet<Employee> Employees { get; set; }
  

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

1. Когда я добавляю это, я получаю сообщение об ошибке `Сообщение об ошибке компилятора: CS1061: ’empNS.EmployeeDBContext’ не содержит определения для ‘Employee’ и не удалось найти метод расширения ‘Employee’, принимающий первый аргумент типа ’empNS.EmployeeDBContext’ (вам не хватает директивы using или ссылки на сборку?)

2. empDBContext.Employee s . Добавить (сотрудника);

3. Да, я понимаю, что это должно быть Employees . оценено

4. Отредактировал мой ответ

5. Я думаю, что мой DbSet объявлен так, как вы упомянули в моем коде ` public DbSet<Employee> Employees { get; set; }, если вы не имели в виду что-то другое