【发布时间】:2015-08-09 11:22:17
【问题描述】:
我有一个空表,有两列:Id 和 Title。
ID 是 guid 类型,Primary key,所以是 Not Nullable。
我尝试为 Id 的默认值添加一个constraint,约束是这样的:
ALTER TABLE [dbo].[TestTable] ADD CONSTRAINT [DF_TestTable_Id] DEFAULT (newsequentialid()) FOR [Id]
GO
在实体框架中,由于Id不可为空,所以用'00000000-0000-0000-000000000000'值填充Id。
因此,我在 sql 中的约束不适用于创建新的 sequentialId() 属性,并且我在表中的第一条记录获得 '00000000-0000-0000-000000000000' 值。
第二行很明显,它得到了:
"Vaiolation of PRIMARY KEY Constraint "PK_TestTable". Cannot insert Duplicate Key" 错误。
我知道我可以像 Guid.NewGuid() 这样在 .NeT 中生成 guid 并用 value 填充 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 数据库第一个方法 Mapping 是:
public partial class TestTable
{
[DatabaseGenerated(DatabaseGenereatedOption.Computed)]
public System.Guid Id {get ;set;}
public string Title {get; set;}
}
【问题讨论】:
标签: c# sql-server entity-framework constraints guid