实体框架保存更改()不反映实体
本文关键字:实体 框架 保存更改 | 更新日期: 2023-09-27 18:02:43
我有一个Winforms项目和一个在SQL Server上运行的数据库,它有2个表,Student
和Standard
。
首先,我使用向导帮助从数据库创建了一个 ADO.NET 实体数据模型。然后我有一个DataGridView
控件,它有一个绑定源作为数据源。
注意:DataBindingProjection
是我创建的类,以便能够使用来自Student
和Standard
实体的属性填充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
属性永远不会为空。