# Entity Framework 6.x integration ## Basic configuration To configure OpenIddict to use Entity Framework 6.x as the database for applications, authorizations, scopes and tokens, you'll need to: - **Reference the `OpenIddict.EntityFramework` package**: ```xml ``` - **Create a database context deriving from `DbContext` and register the OpenIddict entities in the model**: ```csharp public class ApplicationDbContext : DbContext { protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.UseOpenIddict(); } } ``` - **Configure OpenIddict to use the Entity Framework 6.x stores**: ```csharp services.AddOpenIddict() .AddCore(options => { options.UseEntityFramework() .UseDbContext(); }); ``` - **Use migrations or recreate the database to add the OpenIddict entities**. For more information, read [Code First Migrations](https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/migrations/). ## Advanced configuration ### Use a custom primary key type By default, the Entity Framework 6.x integration uses `string` primary keys, which matches the default key type used by ASP.NET Identity. > [!WARNING] > Unlike Entity Framework Core, Entity Framework 6.x doesn't support closed generic types, which prevents using the OpenIddict entities > without subclassing them. As such, using a custom primary key type is a bit more complicated with Entity Framework 6.x than with > Entity Framework Core and requires implementing custom entities, as highlighted in the next section. ### Use custom entities For applications that require storing additional data alongside the properties used by OpenIddict, custom entities can be used. For that, you need to: - **Create custom entities**: ```csharp public class CustomApplication : OpenIddictEntityFrameworkApplication { public string CustomProperty { get; set; } } public class CustomAuthorization : OpenIddictEntityFrameworkAuthorization { public string CustomProperty { get; set; } } public class CustomScope : OpenIddictEntityFrameworkScope { public string CustomProperty { get; set; } } public class CustomToken : OpenIddictEntityFrameworkToken { public string CustomProperty { get; set; } } ``` - **Call the generic `ReplaceDefaultEntities()` method to force OpenIddict to use the custom entities**: ```csharp services.AddOpenIddict() .AddCore(options => { // Configure OpenIddict to use the custom entities. options.UseEntityFramework() .UseDbContext() .ReplaceDefaultEntities(); }); ``` - **Register the custom entities in the model**: ```csharp public class ApplicationDbContext : DbContext { protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.UseOpenIddict(); } } ```