Guid到SQL Server中的NewId列

时间:2015-06-17 12:57:02

标签: c# sql sql-server entity-framework

我目前正在尝试在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#之前设置属性?

1 个答案:

答案 0 :(得分:0)

这对我有用:

CREATE TABLE #temp(id int, val uniqueidentifier DEFAULT (NEWID()) )

INSERT INTO #temp(id) values(1)
SELECT * FROM #temp

DROP TABLE #temp

但要注意,如果这些confirmationId应该是您设计中的主键。这将是非常糟糕的,并将表现非常糟糕。