For my primary key and identity in our Clients table I use
uniqueidentifier column with a default value set to newsequentialid(). Inserting new rows through the management tool creates the values for the ID fine.
Inserting from .NET 4 code via EF results into zero GUIDs (00000-0000....) being inserted. I create the entity with new, set some values and perform EF
AddToClients (for instance). If debugged, value for the id property shows zero GUID. I do not explicitly set the id via the
Guid.NewGuid() in my code because I want to leave it off to the
newsequentialid() in SQL Server. The problem is, it doesn't work. The first time the code is executed row gets inserted with zero GUID. The next time it obviously fails and results in primary key violation exception.
How can I get this to work without having to set the GUID in my client code?
You need to change the
StoreGeneratedPattern value for the property in the EF designer. Set it to
Identity. This will cause EF to avoid setting the value on an insert, then capture it after the insert is complete.
Note that if you're using EF 4, you may have trouble with this using the designer only (see this link). You may have to edit the .edmx manually and set the
StoreGeneratedPattern in the storage model itself.
Right click in you .edmx. Open with XML text editor with encoding or another. Find the id name and add the attribute beside it in same tag: StoreGeneratedPattern="Identity".
< Property Name="WorkerId" Type="uniqueidentifier" Nullable="false" StoreGeneratedPattern="Identity" />