我目前正在尝试在SQL Server中的行插入上添加唯一的Guid属性。我是通过Entity Framework 6完成的。要将列添加到表中,我使用了以下查询:
ALTER TABLE dbo.Reservation ADD ConfirmationID UNIQUEIDENTIFIER DEFAULT (NEWID()) WITH VALUES
每当我在此表中创建新行时,NEWID()
始终设置为00000000-0000-0000-0000-000000000000
。我试图在插入之前为C#中的属性创建一个新的Guid,但这会返回相同的结果。
这是我作为插入函数的一部分调用的C#代码:
public ReservationClientModel Create(ReservationClientModel clientModel)
{
var reservation = new Reservation();
reservation = Mapper.Map<ReservationClientModel, Reservation>(clientModel, reservation);
reservation.ConfirmationID = new Guid();
_repository.Add(reservation);
_context.Commit();
return Mapper.Map<ReservationClientModel>(reservation);
}
以下是从EF Profiler看到的从EF生成的代码:
INSERT [dbo].[Reservation]
([RoomID],
.....
.....
[ConfirmationID])
VALUES (15 /* @0 - [ID] */,
....
....
'00000000-0000-0000-0000-000000000000' /* @13 - [ConfirmationID] */)
有没有什么方法可以设置这个属性来在插入时添加NEWID()
,而不用在C#之前设置属性?
答案 0 :(得分:0)
这对我有用:
CREATE TABLE #temp(id int, val uniqueidentifier DEFAULT (NEWID()) )
INSERT INTO #temp(id) values(1)
SELECT * FROM #temp
DROP TABLE #temp
但要注意,如果这些confirmationId应该是您设计中的主键。这将是非常糟糕的,并将表现非常糟糕。