我已经用DbSet属性创建了一个代码优先上下文
我使用Windows窗体。如果我约束如下:
_context.Schedules.Load();
scheduleBindingSource.DataSource = _context.Schedules.Local.ToBindingList();所有这些都很好,当我保存如下:
this.Validate();
scheduleBindingSource.EndEdit();
_context.SaveChanges();数据仍然存在,但是当我像这样绑定数据时:
var res = _context.Schedules.Where(k => k.EmployeeName.Equals(employeeComboBox.Text)).ToList();
scheduleBindingSource.DataSource = res;当我保存数据的时候,我就不知道了!
我认为ToList()方法不是很好,但我找不到替代方法来将BindingList连接到上下文中的本地数据集。
谢谢,
安德里亚
发布于 2015-07-14 15:36:22
你可以试试这个:
_context.Schedules.Where(k => k.EmployeeName.Equals(employeeComboBox.Text)).Load();
scheduleBindingSource.DataSource = _context.Schedules.Local.ToBindingList();这只会带来符合条件的时间表。当您在Load方法之后调用Where方法时,它将只将符合条件的记录带入内存。稍后,当您调用Local属性时,它将为您提供一个包含当前由DbContext跟踪的所有对象的ObservableCollection<Schedule>,这些对象将是您以前加载的元素。最后,当您调用ToBindingList扩展方法时,它将返回一个与给定ObservableCollection<Schedules>保持同步的BindingList<Schedule>。
发布于 2015-07-16 12:10:50
导致数据不持续的原因是由DataGridView (或BindingSource)造成的,它没有在上下文中添加刚才添加的行的新位置。
所以我已经禁用了AllowUserToAddRow属性(现在我使用的是BindingNavigator添加按钮)
并实施了以下两项活动:
private void scheduleBindingSource_AddingNew(object sender, AddingNewEventArgs e)
{
_scheduleAdding = true;
}
private void scheduleBindingSource_CurrentChanged(object sender, EventArgs e)
{
if (_scheduleAdding)
{
Schedule s = (Schedule)scheduleBindingSource.Current;
s.EmployeeName = employeeComboBox.Text;
s.From = new DateTime(dateTimePicker1.Value.Year, dateTimePicker1.Value.Month, 1);
_context.Schedules.Add(s);
_scheduleAdding = false;
}
}https://stackoverflow.com/questions/31410655
复制相似问题