2011-05-22 56 views
1

我已经在SQL ServerEF 4 - 异常时更新表时间戳列

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类与类型字节[]的时间戳列,其是只读的。

我使用datacontext从我的db中检索一个对象,例如

var roleObject = roleService.getObject(id); 

现在我改变角色名如下

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是实体类。在这一点上我得到一个异常

无法更新timestamp列

是否有人可以帮助我解决这一个。

感谢

回答

3

刚刚从你的模型对象删除时间戳。

7

两点:

  • 你不能让Timestamp属性 “只读”。 EF必须能够设置该值,因此该属性必须具有setter和setter的可访问性,必须与accessibility defined in the designer相同。
  • 您的Timestamp属性必须配置为并发模式固定和StoreGenerated Pattern Coumputed。这两种配置都是在设计器的属性窗口中定义的。
+0

谢谢拉迪斯拉夫像一颗宝石一样工作。 – 2011-05-22 14:50:53