diff --git a/integrations/entity-framework.md b/integrations/entity-framework.md new file mode 100644 index 0000000..40a1f8e --- /dev/null +++ b/integrations/entity-framework.md @@ -0,0 +1,103 @@ +# 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(); + } + } + ``` \ No newline at end of file diff --git a/integrations/toc.yml b/integrations/toc.yml index f3a4a32..62254c9 100644 --- a/integrations/toc.yml +++ b/integrations/toc.yml @@ -1,6 +1,9 @@ - name: Introduction href: index.md +- name: Entity Framework + href: entity-framework.md + - name: Entity Framework Core href: entity-framework-core.md