2011-05-22 58 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