Я строю приложение MVVM WPF в Visual Studio 2015 с использованием Entity Framework 6. Приложение имеет вид с несколькими флажком:Исключение при попытке SaveChanges с Entity Framework
<TextBlock Grid.Row="0"
Grid.Column="0"
Style="{StaticResource FieldLabel}"
Text="Inactive" />
<CheckBox Grid.Row="0"
Grid.Column="1"
IsChecked="{Binding IsSelectedEmployeeInActive,
Mode=TwoWay}" />
<TextBlock Grid.Row="1"
Grid.Column="0"
Style="{StaticResource FieldLabel}"
Text="Leave of Absence" />
<CheckBox Grid.Row="1"
Grid.Column="1"
IsChecked="{Binding IsSelectedEmployeeLoa,
Mode=TwoWay}" />
<TextBlock Grid.Row="2"
Grid.Column="0"
Style="{StaticResource FieldLabel}"
Text="Archived" />
<CheckBox Grid.Row="2"
Grid.Column="1"
IsChecked="{Binding IsSelectedEmployeeArchived,
Mode=TwoWay}" />
Каждый из этих флажков является оценка к свойству, например, следующие:
public bool IsSelectedEmployeeInActive
{
get { return _isSelectedEmployeeInActive; }
set
{
if (_isSelectedEmployeeInActive == value) return;
_isSelectedEmployeeInActive = value;
if (value)
{
var count = SelectedEmployee.EmployeeStatus.Count(x => x.validEmployeeStatusID.Equals(2));
if (count.Equals(0))
{
SelectedEmployee.EmployeeStatus.Add(new EmployeeStatu
{
employeeID = SelectedEmployee.employeeID,
validEmployeeStatusID = 2,
exitDate = DateTime.Now,
createdDate = DateTime.Now
});
}
}
else
{
var itemToRemove = SelectedEmployee.EmployeeStatus.Single(x => x.validEmployeeStatusID.Equals(2));
Context.Entry(itemToRemove).State = EntityState.Deleted;
SelectedEmployee.EmployeeStatus.Remove(itemToRemove);
}
RaisePropertyChanged(() => IsSelectedEmployeeInActive);
}
}
свойство SelectedEmployee
получает набор, когда пользователь нажимает на строку DataGrid. В конструкторе модели представления, в приложение имеет обработчик событий для изменений в SelectedEmployee
:
this.PropertyChanged += (o, e) =>
{
if (e.PropertyName == nameof(this.SelectedEmployee))
{
IsSelectedEmployeeLoa = (SelectedEmployee.EmployeeStatus
.Count(x => x.validEmployeeStatusID.Equals(2)) > 0);
IsSelectedEmployeeArchived = (SelectedEmployee.EmployeeStatus
.Count(x => x.validEmployeeStatusID.Equals(5)) > 0);
IsSelectedEmployeeInActive = (SelectedEmployee.EmployeeStatus
.Count(x => x.validEmployeeStatusID.Equals(4)) > 0);
}
};
Когда пользователь нажимает на кнопку Сохранить, это вызывает следующие через RelayCommand:
public void SaveEmployees()
{
Context.SaveChanges();
}
Если изменить флажок для управления несколько раз между проверяемым и непроверяемой и нажмите кнопку Сохранить, приложение взрывает с этим исключением на Context.SaveChanges()
линиях выше:
{ "обновление магазина, вставки или дель ete повлияло на неожиданное количество строк (0). Объекты могут быть изменены или удалены, поскольку объекты загружены. См http://go.microsoft.com/fwlink/?LinkId=472540 для получения информации о понимании и обработки оптимистических исключений параллелизма "}
Если я закомментировать код в обработчик событий для SelectedEmployee
, который устанавливает свойства флажка, то ошибка уходит,., Но тогда я не могу .?., чтобы установить свойства CheckBox в их начальные значения из базы данных
Как я должен решить этот вопрос Спасибо
Почему бы вам не использовать кнопку «По умолчанию», чтобы извлечь данные из базы данных? –