2014-02-24 33 views
2

我有一個使用實體框架代碼優先的Web API。病人域實體的樣子:此版本的SQL Server不支持不推薦的功能'INSERT NULL into TIMESTAMP columns'

public class Patient 
{ 
    public string FirstName { get; private set; } 
    public string LastName { get; private set; } 
    ... 
    public byte[] Version { get; private set; }     
} 

患者臺這樣的:

CREATE TABLE [dbo].[Patient] 
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY, 
    [FirstName] NVARCHAR(100) NOT NULL, 
    [LastName] NVARCHAR(100) NOT NULL, 
    ... 
    [Version] ROWVERSION NOT NULL,  
) 

如果我運行這個地方,病人項成功地添加到數據庫中,所以它工作正常(SQL Server 2008 R2中) 。

但是,如果我部署到Azure和運行它在那裏,我得到異常:

在更新條目中出現了錯誤。詳情請參閱內部例外。此版本的SQL Server不支持棄用功能'將NULL插入TIMESTAMP列'。

如果我從表中刪除版本列;以及來自域實體的Version屬性,它也適用於Azure。如果我只將它從域實體中刪除(並將它放在表中),也是可行的!

我在做什麼錯?

+0

Azure上有趣的行爲。它適用於本地sql server 2012 Express版本。 – abhi

回答

1

看來,代碼首先需要知道的版本列是併發性令牌。如果我添加:

modelBuilder.Entity<Patient>().ToTable("Patient").Property(p => p.Version).IsRowVersion().IsConcurrencyToken(); 

...它的工作原理。

1

發生這種情況是因爲在模式中有一些可以爲空的TIMESTAMP列。 它在你本地的SQL Server 2008中工作不正常,但對於SQL 2012來說卻不行,並且很可能Azure在默認情況下運行最新的SQL版本。

看到這個參考: Deprecated features in SQL 2012

你可以嘗試設置兼容級別 Setting compatibility level for SQL 2012

+0

謝謝,但我不使用TIMESTAMP任何軟件。我使用ROWVERSION。 –

+2

它們是同義詞 – jean

+0

Azure數據庫已經具有兼容性級別100,它似乎是Sql Server 2008. –

相關問題