EF 4 - Исключение при обновлении таблицы со столбцом метки времени - PullRequest
1 голос
/ 22 мая 2011

Я создал следующую таблицу в SQL Server

CREATE TABLE [dbo].[Role](
   [Id] [int] IDENTITY(1,1) NOT NULL,
   [Name] [nvarchar](20) NOT NULL,
   [CreatedDate] [datetime] NULL,
   [TIMESTAMP] [timestamp] NOT NULL,
   [ModifiedDate] [datetime] NULL,

   CONSTRAINT [PK_TBL_ROLES] PRIMARY KEY CLUSTERED ([Id] ASC)
       WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, 
             ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY].

С помощью EF я создал класс ste со столбцом метки времени типа byte [], который доступен только для чтения.

Я получаюобъект из моей базы данных с использованием datacontext, например,

var roleObject = roleService.getObject(id);

, теперь я изменяю rolename следующим образом

roleObject.Name = "New Name";
roleObject.ModifiedDate = DateTime.Now;

, наконец, я вызываю свой репозиторий для сохранения объекта, используя следующий универсальный метод

public void PersistUpdatedItem(T entity){
   _ctx.ApplyCurrentValues(typeof (T).Name, entity);
   _ctx.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
   _ctx.SaveChanges();
}

Примечание ctx - это мой объект сеанса, а T - это класс сущности.В этот момент я получаю исключение

Невозможно обновить столбец отметки времени

Может кто-нибудь помочь мне решить эту проблему.

спасибо

Ответы [ 2 ]

7 голосов
/ 22 мая 2011

Два очка:

  • Вы не можете сделать свойство Timestamp доступным только для чтения. EF должен иметь возможность устанавливать это значение, поэтому свойство должно иметь установщик, а доступность установщика должна совпадать с доступностью, определенной в конструкторе .
  • Ваше свойство Timestamp должно быть настроено с фиксированным режимом параллелизма и StoreGenerated Pattern Coumputed . Обе эти конфигурации определены в окне свойств в конструкторе.
3 голосов
/ 22 мая 2011

Просто удалите метку времени из объекта модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...