Ef6 или отображения результатов в странный запрос на обновление
Привет Ребята,
в моем сервисе ODATA я использую EF6 для работы с SQL Server.
EDMX создается также для табличных отделов. В этой таблице есть поле временной метки для целей параллелизма. И да, я добавил аннотацию данных [Timestamp] в код. И в edmx в области фиксируется в режиме параллелизма.
Когда я выбираю отдел на своем веб сайте datagrid и обновляю поле я получаю сообщение:
Cannot update a timestamp column.
В SQlProfiler я вижу прохождение обновления:
exec sp_executesql N'UPDATE [dbo].[Department] SET [ModificationDate] = @0, [ModifiedBy] = @1 WHERE (([Id] = @2) AND ([ModificationDate] = @3)) ',N'@0 binary(8),@1 int,@2 int,@3 binary(8)',@0=0x0000000000000805,@1=27,@2=3,@3=0x0000000000000805 go
И тут я замечаю любопытную вещь. Он хочет обновить поле ModificationDate (метка времени), в то время как я хочу обновить поле DepartmentName в сущности.
Как мне преодолеть это странное поведение?
Обновление!
Я установил столбец в вычисляемый, и теперь столбец не добавляется в заданную часть запроса.
Но почему на местах Кафедраимя не установлен в запросе на обновление на эф?
Что я уже пробовал:
Это мой код. Имя отдела установлено! (SelectedEntity находится в aspx-файл.код КС, когда команды событие rowupdating выполняется.
if (SelectedEntity == null) SelectedEntity = new Department(); else SelectedEntity = MarinGlobalConnection.MarinGlobalDataService._marinGlobal.Departments.First(x => x.Id == SelectedEntity.Id); SelectedEntity.DepartmentName = afdelingNaam; SelectedEntity.IsDeleted = isdeleted; SelectedEntity.ModifiedBy = CurrentUser.Instance.CurrentConnected == null ? (int?)null : CurrentUser.Instance.CurrentConnected.ID; if (SelectedEntity.Id == 0) MarinGlobalConnection.MarinGlobalDataService._marinGlobal.AddToDepartments(SelectedEntity); else { if (CompareModificationdate(modificationdate)) MarinGlobalConnection.MarinGlobalDataService._marinGlobal.UpdateObject(SelectedEntity); } await SaveChangesAsync();