Entity Framework 6.x integration core
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:
<PackageReference Include="OpenIddict.EntityFramework" Version="5.8.0" />
- Create a database context deriving from
DbContext
and register the OpenIddict entities in the model:
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:
services.AddOpenIddict()
.AddCore(options =>
{
options.UseEntityFramework()
.UseDbContext<ApplicationDbContext>();
});
- Use migrations or recreate the database to add the OpenIddict entities. For more information, read 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:
public class CustomApplication : OpenIddictEntityFrameworkApplication<long, CustomAuthorization, CustomToken>
{
public string CustomProperty { get; set; }
}
public class CustomAuthorization : OpenIddictEntityFrameworkAuthorization<long, CustomApplication, CustomToken>
{
public string CustomProperty { get; set; }
}
public class CustomScope : OpenIddictEntityFrameworkScope<long>
{
public string CustomProperty { get; set; }
}
public class CustomToken : OpenIddictEntityFrameworkToken<long, CustomApplication, CustomAuthorization>
{
public string CustomProperty { get; set; }
}
- Call the generic
ReplaceDefaultEntities<TApplication, TAuthorization, TScope, TToken, TKey>()
method to force OpenIddict to use the custom entities:
services.AddOpenIddict()
.AddCore(options =>
{
// Configure OpenIddict to use the custom entities.
options.UseEntityFramework()
.UseDbContext<ApplicationDbContext>()
.ReplaceDefaultEntities<CustomApplication, CustomAuthorization, CustomScope, CustomToken, long>();
});
- Register the custom entities in the model:
public class ApplicationDbContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.UseOpenIddict<CustomApplication, CustomAuthorization, CustomScope, CustomToken, long>();
}
}