实体框架保存更改()不反映实体

本文关键字:实体 框架 保存更改 | 更新日期: 2023-09-27 18:02:43

我有一个Winforms项目和一个在SQL Server上运行的数据库,它有2个表,StudentStandard

首先,我使用向导帮助从数据库创建了一个 ADO.NET 实体数据模型。然后我有一个DataGridView控件,它有一个绑定源作为数据源。

注意:DataBindingProjection 是我创建的类,以便能够使用来自StudentStandard实体的属性填充DataGridView

我有这个代码:

var query = context.Students
                  .Include(s => s.Standard)
                  .Select(s => new DataBindingProjection
                  {
                      StudentID = s.StudentID,
                      StudentName = s.StudentName,
                      DateOfBirth = s.DateOfBirth,
                      Height = s.Height,
                      Weight = s.Weight,
                      StandardName = s.Standard.StandardName,
                      Standard_StandardId = s.Standard.StandardId
                  }).ToList();
            myList = new BindingList<DataBindingProjection>(query.ToList());
            dataBindingProjectionBindingSource.DataSource = myList;
            dataBindingProjectionDataGridView.DataSource = dataBindingProjectionBindingSource;
但是,当我

调用context.SaveChanges()时,网格已填充,它不会更新数据库。

实体框架保存更改()不反映实体

DbSet上使用Select方法将数据投影到非实体类将破坏指向原始数据的链接。在您的情况下,您应该直接绑定到类Student

若要绑定到类中的属性Standard可以通过向其添加属性来扩展Student,因为它是分部类。

partial class Student {
    public StandardName { 
       get { return this.Standard.StandardName; }
       set { this.Standard.StandardName = value; }
    }
}

假设Standard属性永远不会为空。