Jon Preece

Follow on TwitterJon Preece
Published on Jul 13, 2014 · 2 minute read.

Using a Guid as your tables primary key, when using Entity Framework, requires a little more effort than when using a integer. The setup process is straightforward, after you’ve read/been shown how to do it. The process is slightly different for the Code First and Database First approaches. This post discusses both techniques.

Code First

Using a Guid as the primary key when taking the code first approach is simple. When creating your entity, add the DatabaseGenerated attribute to your primary key property, as shown below;

public Guid Id { get; set; }

Entity framework will create the column as you would expect, with a primary key and uniqueidentifier data type. [


Click to zoom in
](codefirst-defaultvalue1.png) Also notice, very important, that the default value on the column has been set to `(newsequentialid())`. This generates a new sequential (continuous) Guid for each row. If you were so inclined, you could change this to `newid())`, which would result in a completely random Guid for each new row. This will be cleared each time your database gets dropped and re-created, so this works better when taking the Database First approach.

Database First

The database first approach follows a similar line to the code first approach, but you’ll have to manually edit your model to make it work. Ensure that you edit the primary key column and add the (newsequentialid()) or (newid()) function as the default value before doing anything. Next, open you EDMX diagram, select the appropriate property and open the properties window. Ensure that StoreGeneratedPattern is set to identity. [


Click the image to zoom in
](databasefirst-model1.png) No need to give your entity an ID in your code, that will be populated for you automatically after the entity has been commited to the database;
using (ApplicationDbContext context = new ApplicationDbContext())
    var person = new Person
                          FirstName = "Random",
                          LastName = "Person";


Important Note: Your Guid field MUST be a primary key, or this does not work. Entity Framework will give you a rather cryptic error message!


Guid (Globally Unique Identifiers) can easily be used as primary keys in Entity Framework. A little extra effort is required to do this, depending on which approach you are taking. When using the code first approach, add the DatabaseGenerated attribute to your key field. When taking the Database First approach, explicitly set the StoredGeneratedPattern to Identity on your model.

Entity FrameworkC#.NET

Jon Preece

About the author

I am Jon Preece, an experienced website and software developer from the United Kingdom, based in Manchester.

Throughout my 10+ year professional career I have worked in many sectors, including; e-commerce, financial services, marketing, healthcare, travel and accountancy. Get in touch via Twitter.