我有一個空表,它有兩列:Id和Title。添加guid默認值約束到sql主鍵不起作用
該Id是類型,Primary key
,所以Not Nullable
。
我嘗試添加constraint
爲標識的默認值,約束是這樣的:
ALTER TABLE [dbo].[TestTable] ADD CONSTRAINT [DF_TestTable_Id] DEFAULT (newsequentialid()) FOR [Id]
GO
在實體框架,因爲ID不是空的,它填補了標識與'00000000-0000-0000-000000000000'
值。
因此,我在sql中的約束不能用於創建新的sequentialId()
屬性,我在表中的第一條記錄得到'00000000-0000-0000-000000000000'
值。 對於第二行顯而易見的是:
"Vaiolation of PRIMARY KEY Constraint "PK_TestTable". Cannot insert Duplicate Key"
錯誤。
我知道我可以在像。Guid.NewGuid()
這樣的.NeT中生成guid,並填充值爲Id,但我試圖將此責任委託給sql和newsequentialId()
默認值。
我在想我該怎麼做?
對於完整信息我在這裏把整個腳本:
CREATE TABLE [dbo].[TestTable](
[Id] [uniqueidentifier] NOT NULL,
[Title] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_TestTable] 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]
GO
ALTER TABLE [dbo].[TestTable] ADD CONSTRAINT [DF_TestTable_Id] DEFAULT (newsequentialid()) FOR [Id]
GO
更新:我的EF數據庫第一種方法的映射是:
public partial class TestTable
{
[DatabaseGenerated(DatabaseGenereatedOption.Computed)]
public System.Guid Id {get ;set;}
public string Title {get; set;}
}
[如何爲實體框架中的GUID設置NewId()](http:// stackoverflow。 com/questions/18200817/how-to-set-newid-for-guid-in-entity-framework) –