我有一个空表,其中有两个列: 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"误差
我知道我可以像.NeT一样在Guid.NewGuid()中生成guid,并用值填充Id,但是我试图将这一责任委托给Guid.NewGuid()和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;}
}发布于 2015-08-09 11:23:43
将您的属性Id映射为如下所示:
Property(o => o.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);或
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }或者,如果您有edmx,则必须在设计器中编辑属性:

发布于 2015-08-09 13:31:47
除非你有一些要求来做这个困难的方式:
ALTER TABLE [dbo].[TestTable] ADD CONSTRAINT [DF_TestTable_Id]
DEFAULT (NEWID()) FOR [Id]NEWID()是TSQL等价于GUID.NewGuid()的
https://stackoverflow.com/questions/31903687
复制相似问题