diff --git a/.github/ISSUE_TEMPLATE/z-customer-feedback.yml b/.github/ISSUE_TEMPLATE/z-customer-feedback.yml index 1b38944236..c54cdd6bca 100644 --- a/.github/ISSUE_TEMPLATE/z-customer-feedback.yml +++ b/.github/ISSUE_TEMPLATE/z-customer-feedback.yml @@ -50,6 +50,12 @@ body: required: true attributes: label: Document Version Independent Id + - type: input + id: platformId + validations: + required: true + attributes: + label: Platform Id - type: input id: author validations: diff --git a/.github/workflows/build-samples.yml b/.github/workflows/build-samples.yml index ee0f154c42..50bfd5fd7d 100644 --- a/.github/workflows/build-samples.yml +++ b/.github/workflows/build-samples.yml @@ -2,13 +2,13 @@ name: Build Samples on: push: - branches: [main] + branches: [live] paths: - "samples/core/**" - "samples/end2end/**" - ".github/workflows/build-samples.yml" pull_request: - branches: [main] + branches: [live] paths: - "samples/core/**" - "samples/end2end/**" @@ -16,27 +16,16 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - name: Setup .NET Core 3.1 SDK - uses: actions/setup-dotnet@v1 + - name: Setup .NET 10.0 SDK + uses: actions/setup-dotnet@v4 with: - dotnet-version: 3.1.x - - - name: Setup .NET 6.0 SDK - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 6.0.x - include-prerelease: true - - - name: Setup .NET 8.0 SDK - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 8.0.x + dotnet-version: 10.0.x include-prerelease: true - name: Build samples diff --git a/.github/workflows/markdownlint.yml b/.github/workflows/markdownlint.yml index db2a656f87..6b005ed22a 100644 --- a/.github/workflows/markdownlint.yml +++ b/.github/workflows/markdownlint.yml @@ -18,7 +18,7 @@ on: jobs: lint: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v2 diff --git a/.markdownlint.json b/.markdownlint.json index d2200eac49..d1dc79d12a 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,16 +1,19 @@ { "default": true, + "MD002": false, "MD013": false, "MD024": false, "MD025": { "front_matter_title": "" }, "MD028": false, "MD033": false, "MD036": false, + "MD041": false, "MD046": { "style": "fenced" }, "MD051": false, "MD055": false, - "MD056": false, + "MD056": false, + "MD059": false, "DOCSMD010": false } diff --git a/.openpublishing.build.ps1 b/.openpublishing.build.ps1 deleted file mode 100644 index aadef76202..0000000000 --- a/.openpublishing.build.ps1 +++ /dev/null @@ -1,17 +0,0 @@ -param( - [string]$buildCorePowershellUrl = "https://opbuildstorageprod.blob.core.windows.net/opps1container/.openpublishing.buildcore.ps1", - [string]$parameters -) -# Main -$errorActionPreference = 'Stop' - -# Step-1: Download buildcore script to local -echo "download build core script to local with source url: $buildCorePowershellUrl" -$repositoryRoot = Split-Path -Parent $MyInvocation.MyCommand.Definition -$buildCorePowershellDestination = "$repositoryRoot\.openpublishing.buildcore.ps1" -Invoke-WebRequest $buildCorePowershellUrl -OutFile "$buildCorePowershellDestination" - -# Step-2: Run build core -echo "run build core script with parameters: $parameters" -& "$buildCorePowershellDestination" "$parameters" -exit $LASTEXITCODE diff --git a/.openpublishing.publish.config.json b/.openpublishing.publish.config.json index 87f45e7d9b..4ccab6704b 100644 --- a/.openpublishing.publish.config.json +++ b/.openpublishing.publish.config.json @@ -22,13 +22,12 @@ } ], "notification_subscribers": [ - "avickers@microsoft.com", - "riande@microsoft.com" + "sampatel@microsoft.com", + "jiricincura@microsoft.com" ], "sync_notification_subscribers": [], "branches_to_filter": [], "git_repository_branch_open_to_public_contributors": "main", - "skip_source_output_uploading": false, "need_preview_pull_request": true, "need_pr_comments": false, "dependent_repositories": [ @@ -55,13 +54,14 @@ "Pdf" ] }, - "need_generate_pdf_url_template": true, "targets": { "Pdf": { "template_folder": "_themes.pdf" } }, "docs_build_engine": {}, + "skip_source_output_uploading": false, + "need_generate_pdf_url_template": true, "contribution_branch_mappings": {}, "need_generate_intellisense": false } \ No newline at end of file diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json index ddf8a596a4..175082dbbf 100644 --- a/.openpublishing.redirection.json +++ b/.openpublishing.redirection.json @@ -190,6 +190,11 @@ "redirect_url": "/ef/core/get-started/overview/first-app", "redirect_document_id": false }, + { + "source_path": "entity-framework/core/get-started/xamarin.md", + "redirect_url": "/previous-versions/xamarin/xamarin-forms/data-cloud/data/entity-framework", + "redirect_document_id": false + }, { "source_path": "entity-framework/core/what-is-new/roadmap.md", "redirect_url": "/ef/core/what-is-new/index", @@ -474,6 +479,21 @@ "source_path": "entity-framework/core/modeling/concurrency.md", "redirect_url": "/ef/core/saving/concurrency", "redirect_document_id": false - } + }, + { + "source_path": "entity-framework/core/logging-events-diagnostics/event-counters.md", + "redirect_url": "/ef/core/logging-events-diagnostics/metrics", + "redirect_document_id": false + }, + { + "source_path": "entity-framework/core/providers/cosmos/functions.md", + "redirect_url": "/ef/core/providers/cosmos/querying", + "redirect_document_id": false + }, + { + "source_path": "entity-framework/core/providers/sql-server/azure-sql-database.md", + "redirect_url": "/ef/core/providers/sql-server/misc", + "redirect_document_id": false + } ] } diff --git a/entity-framework/core/change-tracking/change-detection.md b/entity-framework/core/change-tracking/change-detection.md index 6f9e64f679..53fc30ddfe 100644 --- a/entity-framework/core/change-tracking/change-detection.md +++ b/entity-framework/core/change-tracking/change-detection.md @@ -1,14 +1,14 @@ --- title: Change Detection and Notifications - EF Core description: Detecting property and relationship changes using DetectChanges or notifications -author: ajcvickers +author: SamMonoRT ms.date: 12/30/2020 uid: core/change-tracking/change-detection --- # Change Detection and Notifications -Each instance tracks changes made to entities. These tracked entities in turn drive the changes to the database when is called. This is covered in [Change Tracking in EF Core](xref:core/change-tracking/index), and this document assumes that entity states and the basics of Entity Framework Core (EF Core) change tracking are understood. +Each instance tracks changes made to entities. These tracked entities in turn drive the changes to the database when is called. This is covered in [Change Tracking in EF Core](xref:core/change-tracking/index), and this document assumes that entity states and the basics of Entity Framework Core (EF Core) change tracking are understood. Tracking property and relationship changes requires that the DbContext is able to detect these changes. This document covers how this detection happens, as well as how to use property notifications or change-tracking proxies to force immediate detection of changes. @@ -121,7 +121,7 @@ Contrast this to the following code which modifies the entities in the same way, --> [!code-csharp[Snapshot_change_tracking_2](../../../samples/core/ChangeTracking/ChangeDetectionAndNotifications/SnapshotSamples.cs?name=Snapshot_change_tracking_2)] -In this case the change tracker debug view shows that all entity states and property modifications are known, even though detection of changes has not happened. This is because is an EF Core method, which means that EF Core immediately knows about the change made by this method. Likewise, calling allows EF Core to immediately know about the new entity and track it appropriately. +In this case the change tracker debug view shows that all entity states and property modifications are known, even though detection of changes has not happened. This is because is an EF Core method, which means that EF Core immediately knows about the change made by this method. Likewise, calling allows EF Core to immediately know about the new entity and track it appropriately. > [!TIP] > Don't attempt to avoid detecting changes by always using EF Core methods to make entity changes. Doing so is often more cumbersome and performs less well than making changes to entities in the normal way. The intention of this document is to inform as to when detecting changes is needed and when it is not. The intention is not to encourage avoidance of change detection. @@ -130,15 +130,15 @@ In this case the change tracker debug view shows that all entity states and prop is called automatically by methods where doing so is likely to impact the results. These methods are: -- and , to ensure that all changes are detected before updating the database. -- and , to ensure entity states and modified properties are up-to-date. +- and , to ensure that all changes are detected before updating the database. +- and , to ensure entity states and modified properties are up-to-date. - , to ensure that the result is accurate. - , to ensure correct entity states for principal/parent entities before cascading. -- , to ensure that the tracked graph is up-to-date. +- , to ensure that the tracked graph is up-to-date. There are also some places where detection of changes happens on only a single entity instance, rather than on the entire graph of tracked entities. These places are: -- When using , to ensure that the entity's state and modified properties are up-to-date. +- When using , to ensure that the entity's state and modified properties are up-to-date. - When using methods such as `Property`, `Collection`, `Reference` or `Member` to ensure property modifications, current values, etc. are up-to-date. - When a dependent/child entity is going to be deleted because a required relationship has been severed. This detects when an entity should not be deleted because it has been re-parented. @@ -176,7 +176,7 @@ The performance of detecting changes is not a bottleneck for most applications. --> [!code-csharp[SaveChanges](../../../samples/core/ChangeTracking/ChangeDetectionAndNotifications/SnapshotSamples.cs?name=SaveChanges)] -As we know from the previous section, both and automatically detect changes. However, after calling Entries, the code does not then make any entity or property state changes. (Setting normal property values on Added entities does not cause any state changes.) The code therefore disables unnecessary automatic change detection when calling down into the base SaveChanges method. The code also makes use of a try/finally block to ensure that the default setting is restored even if SaveChanges fails. +As we know from the previous section, both and automatically detect changes. However, after calling Entries, the code does not then make any entity or property state changes. (Setting normal property values on Added entities does not cause any state changes.) The code therefore disables unnecessary automatic change detection when calling down into the base SaveChanges method. The code also makes use of a try/finally block to ensure that the default setting is restored even if SaveChanges fails. > [!TIP] > Do not assume that your code must disable automatic change detection to perform well. This is only needed when profiling an application tracking many entities indicates that performance of change detection is an issue. @@ -234,7 +234,7 @@ Notification entities make use of the [!code-csharp[Model](../../../samples/core/ChangeTracking/ChangeDetectionAndNotifications/NotificationEntitiesSamples.cs?name=Model)] -In addition, any collection navigations must implement `INotifyCollectionChanged`; in the example above this is satisfied by using an of posts. EF Core also ships with an implementation that has more efficient lookups at the expense of stable ordering. +In addition, any collection navigations must implement `INotifyCollectionChanged`; in the example above this is satisfied by using an of posts. EF Core also ships with an implementation that has more efficient lookups at the expense of stable ordering. Most of this notification code is typically moved into an unmapped base class. For example: @@ -283,7 +283,7 @@ Most of this notification code is typically moved into an unmapped base class. F There is no way for EF Core to validate that `INotifyPropertyChanging` or `INotifyPropertyChanged` are fully implemented for use with EF Core. In particular, some uses of these interfaces do so with notifications only on certain properties, rather than on all properties (including navigations) as required by EF Core. For this reason, EF Core does not automatically hook into these events. -Instead, EF Core must be configured to use these notification entities. This is usually done for all entity types by calling . For example: +Instead, EF Core must be configured to use these notification entities. This is usually done for all entity types by calling . For example: [!code-csharp[OnModelCreating](../../../samples/core/ChangeTracking/ChangeDetectionAndNotifications/NotificationWithBaseSamples.cs?name=OnModelCreating)] -(The strategy can also be set differently for different entity types using , but this is usually counterproductive since DetectChanges is still required for those types that are not notification entities.) +(The strategy can also be set differently for different entity types using , but this is usually counterproductive since DetectChanges is still required for those types that are not notification entities.) Full notification change tracking requires that both `INotifyPropertyChanging` and `INotifyPropertyChanged` are implemented. This allows original values to be saved just before the property value is changed, avoiding the need for EF Core to create a snapshot when tracking the entity. Entity types that implement only `INotifyPropertyChanged` can also be used with EF Core. In this case, EF still creates a snapshot when tracking an entity to keep track of original values, but then uses the notifications to detect changes immediately, rather than needing DetectChanges to be called. @@ -357,7 +357,7 @@ Post {Id: 2} Unchanged ## Change-tracking proxies -EF Core can dynamically generate proxy types that implement and . This requires installing the [Microsoft.EntityFrameworkCore.Proxies](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Proxies/) NuGet package, and enabling change-tracking proxies with For example: +EF Core can dynamically generate proxy types that implement and . This requires installing the [Microsoft.EntityFrameworkCore.Proxies](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Proxies/) NuGet package, and enabling change-tracking proxies with For example: [!code-csharp[Work_with_a_single_property_1b](../../../samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs?name=Work_with_a_single_property_1b)] -The returned can then be used to access information about the property. For example, it can be used to get and set the current value of the property on this entity: +The returned can then be used to access information about the property. For example, it can be used to get and set the current value of the property on this entity: [!code-csharp[Work_with_a_single_property_1d](../../../samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs?name=Work_with_a_single_property_1d)] -Both of the Property methods used above return a strongly-typed generic instance. Using this generic type is preferred because it allows access to property values without [boxing value types](/dotnet/csharp/programming-guide/types/boxing-and-unboxing). However, if the type of entity or property is not known at compile-time, then a non-generic can be obtained instead: +Both of the Property methods used above return a strongly-typed generic instance. Using this generic type is preferred because it allows access to property values without [boxing value types](/dotnet/csharp/programming-guide/types/boxing-and-unboxing). However, if the type of entity or property is not known at compile-time, then a non-generic can be obtained instead: [!code-csharp[Work_with_a_single_navigation_1](../../../samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs?name=Work_with_a_single_navigation_1)] -Navigations can also be collections of related entities when used for the "many" sides of one-to-many and many-to-many relationships. The methods are used to access collection navigations. For example: +Navigations can also be collections of related entities when used for the "many" sides of one-to-many and many-to-many relationships. The methods are used to access collection navigations. For example: [!code-csharp[Work_with_a_single_navigation_2a](../../../samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs?name=Work_with_a_single_navigation_2a)] -Some operations are common for all navigations. These can be accessed for both reference and collection navigations using the method. Note that only non-generic access is available when accessing all navigations together. For example: +Some operations are common for all navigations. These can be accessed for both reference and collection navigations using the method. Note that only non-generic access is available when accessing all navigations together. For example: [!code-csharp[Work_with_a_single_navigation_2b](../../../samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs?name=Work_with_a_single_navigation_2b)] -The following table summarizes ways to use , , and : +The following table summarizes ways to use , , and : | NavigationEntry member | Description |:----------------------------------------------------------------------------------------------------------|---------------------- @@ -185,7 +185,7 @@ The following table summarizes ways to use returns an of for every property of the entity. This can be used to perform an action for every property of the entity. For example, to set any DateTime property to `DateTime.Now`: + returns an of for every property of the entity. This can be used to perform an action for every property of the entity. For example, to set any DateTime property to `DateTime.Now`: [!code-csharp[BlogDto](../../../samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs?name=BlogDto)] -This can be used to set the current values of a tracked entity using : +This can be used to set the current values of a tracked entity using : [!code-csharp[OrderLine](../../../samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs?name=OrderLine)] -The composite key must be configured in to define the key parts _and their order_. For example: +The composite key must be configured in to define the key parts _and their order_. For example: [!code-csharp[Using_DbSet_Local_to_query_tracked_entities_1](../../../samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs?name=Using_DbSet_Local_to_query_tracked_entities_1)] -Notice that, unlike , `DbSet.Local` returns entity instances directly. An EntityEntry can, of course, always be obtained for the returned entity by calling . +Notice that, unlike , `DbSet.Local` returns entity instances directly. An EntityEntry can, of course, always be obtained for the returned entity by calling . ### The local view - returns a view of locally tracked entities that reflects the current of those entities. Specifically, this means that: + returns a view of locally tracked entities that reflects the current of those entities. Specifically, this means that: - `Added` entities are included. Note that this is not the case for normal EF Core queries, since `Added` entities do not yet exist in the database and so are therefore never returned by a database query. - `Deleted` entities are excluded. Note that this is again not the case for normal EF Core queries, since `Deleted` entities still exist in the database and so _are_ returned by database queries. -All of this means that `DbSet.Local` is view over the data that reflects the current conceptual state of the entity graph, with `Added` entities included and `Deleted` entities excluded. This matches what database state is expected to be after SaveChanges is called. +All of this means that `DbSet.Local` is a view over the data that reflects the current conceptual state of the entity graph, with `Added` entities included and `Deleted` entities excluded. This matches what database state is expected to be after SaveChanges is called. This is typically the ideal view for data binding, since it presents to the user the data as they understand it based on the changes made by the application. @@ -534,7 +534,7 @@ Notice that the deleted post is removed from the local view, and the added post ### Using Local to add and remove entities - returns an instance of . This is an implementation of that generates and responds to notifications when entities are added and removed from the collection. (This is the same concept as , but implemented as a projection over existing EF Core change tracking entries, rather than as an independent collection.) + returns an instance of . This is an implementation of that generates and responds to notifications when entities are added and removed from the collection. (This is the same concept as , but implemented as a projection over existing EF Core change tracking entries, rather than as an independent collection.) The local view's notifications are hooked into DbContext change tracking such that the local view stays in sync with the DbContext. Specifically: @@ -579,10 +579,10 @@ The output remains unchanged from the previous example because changes made to t ### Using the local view for Windows Forms or WPF data binding - forms the basis for data binding to EF Core entities. However, both Windows Forms and WPF work best when used with the specific type of notifying collection that they expect. The local view supports creating these specific collection types: + forms the basis for data binding to EF Core entities. However, both Windows Forms and WPF work best when used with the specific type of notifying collection that they expect. The local view supports creating these specific collection types: -- returns an for WPF data binding. -- returns a for Windows Forms data binding. +- returns an for WPF data binding. +- returns a for Windows Forms data binding. For example: diff --git a/entity-framework/core/change-tracking/explicit-tracking.md b/entity-framework/core/change-tracking/explicit-tracking.md index 2a8d862d0d..4fb359d737 100644 --- a/entity-framework/core/change-tracking/explicit-tracking.md +++ b/entity-framework/core/change-tracking/explicit-tracking.md @@ -1,16 +1,16 @@ --- title: Explicitly Tracking Entities - EF Core description: Explicitly tracking entities with DbContext using Add, Attach, Update, and Remove -author: ajcvickers +author: SamMonoRT ms.date: 12/30/2020 uid: core/change-tracking/explicit-tracking --- # Explicitly Tracking Entities -Each instance tracks changes made to entities. These tracked entities in turn drive the changes to the database when is called. +Each instance tracks changes made to entities. These tracked entities in turn drive the changes to the database when is called. -Entity Framework Core (EF Core) change tracking works best when the same instance is used to both query for entities and update them by calling . This is because EF Core automatically tracks the state of queried entities and then detects any changes made to these entities when SaveChanges is called. This approach is covered in [Change Tracking in EF Core](xref:core/change-tracking/index). +Entity Framework Core (EF Core) change tracking works best when the same instance is used to both query for entities and update them by calling . This is because EF Core automatically tracks the state of queried entities and then detects any changes made to these entities when SaveChanges is called. This approach is covered in [Change Tracking in EF Core](xref:core/change-tracking/index). > [!TIP] > This document assumes that entity states and the basics of EF Core change tracking are understood. See [Change Tracking in EF Core](xref:core/change-tracking/index) for more information on these topics. @@ -18,9 +18,6 @@ Entity Framework Core (EF Core) change tracking works best when the same [!TIP] > You can run and debug into all the code in this document by [downloading the sample code from GitHub](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/ChangeTracking/ChangeTrackingInEFCore). -> [!TIP] -> For simplicity, this document uses and references synchronous methods such as rather than their async equivalents such as . Calling and awaiting the async method can be substituted unless otherwise noted. - ## Introduction Entities can be explicitly "attached" to a such that the context then tracks those entities. This is primarily useful when: @@ -28,11 +25,11 @@ Entities can be explicitly "attached" to a methods. +The first of these will be needed by most applications, and is primarily handled by the methods. The second is only needed by applications that change entities or their relationships **_while the entities are not being tracked_**. For example, a web application may send entities to the web client where the user makes changes and sends the entities back. These entities are referred to as "disconnected" since they were originally queried from a DbContext, but were then disconnected from that context when sent to the client. -The web application must now re-attach these entities so that they are again tracked and indicate the changes that have been made such that can make appropriate updates to the database. This is primarily handled by the and methods. +The web application must now re-attach these entities so that they are again tracked and indicate the changes that have been made such that can make appropriate updates to the database. This is primarily handled by the and methods. > [!TIP] > Attaching entities to the _same DbContext instance_ that they were queried from should not normally be needed. Do not routinely perform a no-tracking query and then attach the returned entities to the same context. This will be slower than using a tracking query, and may also result in issues such as missing shadow property values, making it harder to get right. @@ -99,7 +96,7 @@ Notice that the key properties in this model need no additional configuration he ### Explicit key values -An entity must be tracked in the `Added` state to be inserted by . Entities are typically put in the Added state by calling one of , , , , or the equivalent methods on . +An entity must be tracked in the `Added` state to be inserted by . Entities are typically put in the Added state by calling one of , , , , or the equivalent methods on . > [!TIP] > These methods all work in the same way in the context of change tracking. See [Additional Change Tracking Features](xref:core/change-tracking/miscellaneous) for more information. @@ -312,7 +309,7 @@ This is exactly the same end-state as the previous example that used explicit ke ### Explicit key values -Entities returned from queries are tracked in the `Unchanged` state. The `Unchanged` state means that the entity has not been modified since it was queried. A disconnected entity, perhaps returned from a web client in an HTTP request, can be put into this state using either , , or the equivalent methods on . For example, to start tracking an existing blog: +Entities returned from queries are tracked in the `Unchanged` state. The `Unchanged` state means that the entity has not been modified since it was queried. A disconnected entity, perhaps returned from a web client in an HTTP request, can be put into this state using either , , or the equivalent methods on . For example, to start tracking an existing blog: [!code-csharp[Pet](../../../samples/core/ChangeTracking/IdentityResolutionInEFCore/IdentityResolutionSamples.cs?name=Pet)] -Consider code that attempts to tracker two new entity instances without setting key values: +Consider code that attempts to track two new entity instances without setting key values: [!code-csharp[DbContext_versus_DbSet_methods_1](../../../samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/Samples.cs?name=DbContext_versus_DbSet_methods_1)] -Notice that is used to create a DbSet for the `PostTag` entity type. This DbSet can then be used to call `Add` with the new join entity instance. +Notice that is used to create a DbSet for the `PostTag` entity type. This DbSet can then be used to call `Add` with the new join entity instance. > [!IMPORTANT] > The CLR type used for join entity types by convention may change in future releases to improve performance. Do not depend on any specific join entity type unless it has been explicitly configured as is done for `Dictionary` in the code above. @@ -97,10 +97,10 @@ Access to entity properties uses the backing field of the property by default. T Sometimes it may be desirable for EF Core to generate side-effects when it modifies property values. For example, when data binding to entities, setting a property may generate notifications to the U.I. which do not happen when setting the field directly. This can be achieved by changing the for: -- All entity types in the model using -- All properties and navigations of a specific entity type using -- A specific property using -- A specific navigation using +- All entity types in the model using +- All properties and navigations of a specific entity type using +- A specific property using +- A specific navigation using Property access modes `Field` and `PreferField` will cause EF Core to access the property value through its backing field. Likewise, `Property` and `PreferProperty` will cause EF Core to access the property value through its getter and setter. @@ -127,7 +127,7 @@ EF Core creates temporary key values when tracking new entities that will have r ### Accessing temporary values -Temporary values are stored in the change tracker and not set onto entity instances directly. However, these temporary values _are_ exposed when using the various mechanisms for [Accessing Tracked Entities](xref:core/change-tracking/entity-entries). For example, the following code accesses a temporary value using : +Temporary values are stored in the change tracker and not set onto entity instances directly. However, these temporary values _are_ exposed when using the various mechanisms for [Accessing Tracked Entities](xref:core/change-tracking/entity-entries). For example, the following code accesses a temporary value using : [!code-csharp[Model](../../../samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityWithStringPayloadSamples.cs?name=Model)] -A post can now be tagged in the same way as before, and the join entity will still be created automatically. This entity can then be accessed using one of the mechanisms described in [Accessing Tracked Entities](xref:core/change-tracking/entity-entries). For example, the code below uses to access the join entity instance: +A post can now be tagged in the same way as before, and the join entity will still be created automatically. This entity can then be accessed using one of the mechanisms described in [Accessing Tracked Entities](xref:core/change-tracking/entity-entries). For example, the code below uses to access the join entity instance: [!code-csharp[Many_to_many_relationships_9](../../../samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityWithStringPayloadSamples.cs?name=Many_to_many_relationships_9)] -Finally, another way to set payload data is by either overriding or using the event to process entities before updating the database. For example: +Finally, another way to set payload data is by either overriding or using the event to process entities before updating the database. For example: @@ -36,17 +36,26 @@ Service | Generates the code for corresponding model annotations. | Helps with generating C# code. | Pluralizes and singularizes words. + | Generates C# code for migration operations. + | Generates C# code for model snapshots. | Generates code for a migration. + | Selects the appropriate migrations code generator. | The main class for managing migration files. + | Generates code for compiled model metadata. + | Selects the appropriate compiled model code generator. + | The main class for scaffolding compiled models. | Creates a database model from a database. | Generates code for a model. + | Selects the appropriate model code generator. | Generates OnConfiguring code. | The main class for scaffolding reverse engineered models. | Creates a model from a database model. + | Generates code for precompiled queries. + | Selects the appropriate precompiled query code generator. ## Using services -These services can also be useful for creating your own tools. For example, when you want to automate part of you design-time workflow. +These services can also be useful for creating your own tools. For example, when you want to automate part of your design-time workflow. You can build a service provider containing these services using the AddEntityFrameworkDesignTimeServices and AddDbContextDesignTimeServices extension methods. diff --git a/entity-framework/core/dbcontext-configuration/index.md b/entity-framework/core/dbcontext-configuration/index.md index 6bc1d0ba33..55d3738ccb 100644 --- a/entity-framework/core/dbcontext-configuration/index.md +++ b/entity-framework/core/dbcontext-configuration/index.md @@ -1,7 +1,7 @@ --- title: DbContext Lifetime, Configuration, and Initialization - EF Core description: Patterns for creating and managing DbContext instances with or without dependency injection -author: ajcvickers +author: SamMonoRT ms.date: 11/07/2020 uid: core/dbcontext-configuration/index --- @@ -10,6 +10,8 @@ uid: core/dbcontext-configuration/index This article shows basic patterns for initialization and configuration of a instance. +[!INCLUDE [managed-identities-test-non-production](~/core/includes/managed-identities-test-non-production.md)] + ## The DbContext lifetime The lifetime of a `DbContext` begins when the instance is created and ends when the instance is [disposed](/dotnet/standard/garbage-collection/unmanaged). A `DbContext` instance is designed to be used for a _single_ [unit-of-work](https://www.martinfowler.com/eaaCatalog/unitOfWork.html). This means that the lifetime of a `DbContext` instance is usually very short. @@ -24,20 +26,22 @@ A typical unit-of-work when using Entity Framework Core (EF Core) involves: - Being [returned from a query](xref:core/querying/tracking) - Being [added or attached to the context](xref:core/saving/disconnected-entities) - Changes are made to the tracked entities as needed to implement the business rule -- or is called. EF Core detects the changes made and writes them to the database. +- or is called. EF Core detects the changes made and writes them to the database. - The `DbContext` instance is disposed > [!IMPORTANT] > -> - It is very important to dispose the after use. This ensures both that any unmanaged resources are freed, and that any events or other hooks are unregistered so as to prevent memory leaks in case the instance remains referenced. -> - [DbContext is **not thread-safe**](#avoiding-dbcontext-threading-issues). Do not share contexts between threads. Make sure to [await](/dotnet/csharp/language-reference/operators/await) all async calls before continuing to use the context instance. +> - It is important to dispose the after use. This ensures any: +> - Unmanaged resources are freed. +> - Events or other hooks are unregistered. Unregistering prevents memory leaks when the instance remains referenced. +> - [DbContext is **Not thread-safe**](#avoiding-dbcontext-threading-issues). Don't share contexts between threads. Make sure to [await](/dotnet/csharp/language-reference/operators/await) all async calls before continuing to use the context instance. > - An thrown by EF Core code can put the context into an unrecoverable state. Such exceptions indicate a program error and are not designed to be recovered from. ## DbContext in dependency injection for ASP.NET Core In many web applications, each HTTP request corresponds to a single unit-of-work. This makes tying the context lifetime to that of the request a good default for web applications. -ASP.NET Core applications are [configured using dependency injection](/aspnet/core/fundamentals/startup). EF Core can be added to this configuration using in the [`ConfigureServices`](/aspnet/core/fundamentals/startup#the-configureservices-method) method of `Startup.cs`. For example: +ASP.NET Core applications are [configured using dependency injection](/aspnet/core/fundamentals/startup). EF Core can be added to this configuration using in `Program.cs`. For example: -[!code-csharp[ConfigureServices](../../../samples/core/Miscellaneous/ConfiguringDbContext/WebApp/Startup.cs?name=ConfigureServices)] -This example registers a `DbContext` subclass called `ApplicationDbContext` as a scoped service in the ASP.NET Core application service provider (a.k.a. the dependency injection container). The context is configured to use the SQL Server database provider and will read the connection string from ASP.NET Core configuration. It typically does not matter _where_ in `ConfigureServices` the call to `AddDbContext` is made. +[!code-csharp[snippet_1](../../../samples/core/Miscellaneous/ConfiguringDbContext/WebApp9/Program9.cs?name=snippet_1)] + +The preceding code registers `ApplicationDbContext`, a subclass of `DbContext`, as a scoped service in the ASP.NET Core app service provider. The service provider is also known as the dependency injection container. The context is configured to use the SQL Server database provider and reads the connection string from [ASP.NET Core configuration](xref:core/miscellaneous/connection-strings#aspnet-core). The `ApplicationDbContext` class must expose a public constructor with a `DbContextOptions` parameter. This is how context configuration from `AddDbContext` is passed to the `DbContext`. For example: @@ -63,9 +68,10 @@ The `ApplicationDbContext` class must expose a public constructor with a `DbCont } } --> + [!code-csharp[ApplicationDbContext](../../../samples/core/Miscellaneous/ConfiguringDbContext/WebApp/ApplicationDbContext.cs?name=ApplicationDbContext)] -`ApplicationDbContext` can then be used in ASP.NET Core controllers or other services through constructor injection. For example: +`ApplicationDbContext` can be used in ASP.NET Core controllers or other services through constructor injection: -## Simple DbContext initialization with 'new' +## Basic DbContext initialization with 'new' -`DbContext` instances can be constructed in the normal .NET way, for example with `new` in C#. Configuration can be performed by overriding the `OnConfiguring` method, or by passing options to the constructor. For example: +`DbContext` instances can be constructed with `new` in C#. Configuration can be performed by overriding the `OnConfiguring` method, or by passing options to the constructor. For example: [!code-csharp[UseNewForWebApp](../../../samples/core/Miscellaneous/ConfiguringDbContext/WebApp/UseNewForWebApp.cs?name=UseNewForWebApp)] -## Using a DbContext factory (e.g. for Blazor) +## Use a DbContext factory Some application types (e.g. [ASP.NET Core Blazor](/aspnet/core/blazor/)) use dependency injection but do not create a service scope that aligns with the desired `DbContext` lifetime. Even where such an alignment does exist, the application may need to perform multiple units-of-work within this scope. For example, multiple units-of-work within a single HTTP request. -In these cases, can be used to register a factory for creation of `DbContext` instances. For example: +In these cases, can be used to register a factory for creation of `DbContext` instances. For example: [!code-csharp[Main](../../../samples/core/Miscellaneous/Logging/Logging/BloggingContext.cs#DefineLoggerFactory)] -### [EF Core 2.1](#tab/v2) - -```csharp -public static readonly LoggerFactory MyLoggerFactory - = new LoggerFactory(new[] { new ConsoleLoggerProvider((_, __) => true, true) }); -``` - -> [!WARNING] -> In EF Core 2.1, It is very important that applications do not create a new LoggerFactory instance for each DbContext instance. Doing so will result in a memory leak and poor performance. This has been fixed in EF Core 3.0 and above. - -*** - This singleton/global instance should then be registered with EF Core on the . For example: [!code-csharp[RegisterInterceptor](../../../samples/core/Miscellaneous/CommandInterception/Program.cs?name=RegisterInterceptor)] -Alternately, `AddInterceptors` can be called as part of or when creating a instance to pass to the DbContext constructor. +Alternately, `AddInterceptors` can be called as part of or when creating a instance to pass to the DbContext constructor. > [!TIP] > OnConfiguring is still called when AddDbContext is used or a DbContextOptions instance is passed to the DbContext constructor. This makes it the ideal place to apply context configuration regardless of how the DbContext is constructed. @@ -63,7 +63,7 @@ Low-level database interception is split into the three interfaces shown in the The base classes , , and contain no-op implementations for each method in the corresponding interface. Use the base classes to avoid the need to implement unused interception methods. -The methods on each interceptor type come in pairs, with the first being called before the database operation is started, and the second after the operation has completed. For example, is called before a query is executed, and is called after query has been sent to the database. +The methods on each interceptor type come in pairs, with the first being called before the database operation is started, and the second after the operation has completed. For example, is called before a query is executed, and is called after query has been sent to the database. Each pair of methods have both sync and async variations. This allows for asynchronous I/O, such as requesting an access token, to happen as part of intercepting an async database operation. @@ -250,7 +250,7 @@ In the `Executing` method (i.e. before making a database call), the interceptor --> [!code-csharp[ReaderExecutingAsync](../../../samples/core/Miscellaneous/CachingInterception/CachingCommandInterceptor.cs?name=ReaderExecutingAsync)] -Notice how the code calls and passes a replacement containing the cached data. This InterceptionResult is then returned, causing suppression of query execution. The replacement reader is instead used by EF Core as the results of the query. +Notice how the code calls and passes a replacement containing the cached data. This InterceptionResult is then returned, causing suppression of query execution. The replacement reader is instead used by EF Core as the results of the query. This interceptor also manipulates the command text. This manipulation is not required, but improves clarity in log messages. The command text does not need to be valid SQL since the query is now not going to be executed. @@ -392,7 +392,7 @@ Notice from the log output that the application continues to use the cached mess > [!TIP] > You can [download the SaveChanges interceptor sample](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Miscellaneous/SaveChangesInterception) from GitHub. - and interception points are defined by the interface. As for other interceptors, the base class with no-op methods is provided as a convenience. + and interception points are defined by the interface. As for other interceptors, the base class with no-op methods is provided as a convenience. > [!TIP] > Interceptors are powerful. However, in many cases it may be easier to override the SaveChanges method or use the [.NET events for SaveChanges](xref:core/logging-events-diagnostics/events) exposed on DbContext. @@ -493,7 +493,7 @@ The general idea for auditing with the interceptor is: * If SaveChanges succeeds, then the audit message is updated to indicate success * If SaveChanges fails, then the audit message is updated to indicate the failure -The first stage is handled before any changes are sent to the database using overrides of and . +The first stage is handled before any changes are sent to the database using overrides of and . [!code-csharp[LogToConsole](../../../samples/core/Miscellaneous/Logging/SimpleLogging/Program.cs?name=LogToConsole)] -Alternately, `LogTo` can be called as part of or when creating a instance to pass to the `DbContext` constructor. +Alternately, `LogTo` can be called as part of or when creating a instance to pass to the `DbContext` constructor. > [!TIP] > OnConfiguring is still called when AddDbContext is used or a DbContextOptions instance is passed to the DbContext constructor. This makes it the ideal place to apply context configuration regardless of how the DbContext is constructed. @@ -35,13 +35,13 @@ Alternately, `LogTo` can be called as part of delegate that accepts a string. EF Core will call this delegate with a string for each log message generated. It is then up to the delegate to do something with the given message. +`LogTo` requires an delegate that accepts a string. EF Core will call this delegate with a string for each log message generated. It is then up to the delegate to do something with the given message. -The method is often used for this delegate, as shown above. This results in each log message being written to the console. +The method is often used for this delegate, as shown above. This results in each log message being written to the console. ### Logging to the debug window - can be used to send output to the Debug window in Visual Studio or other IDEs. [Lambda syntax](/dotnet/csharp/language-reference/operators/lambda-expressions) must be used in this case because the `Debug` class is compiled out of release builds. For example: + can be used to send output to the Debug window in Visual Studio or other IDEs. [Lambda syntax](/dotnet/csharp/language-reference/operators/lambda-expressions) must be used in this case because the `Debug` class is compiled out of release builds. For example: -#### [.NET Core CLI](#tab/dotnet-core-cli) +#### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet ef database update @@ -140,10 +140,10 @@ Sometimes you may want to reference types from another DbContext. This can lead ### Next steps -The above was only a brief introduction to migrations. Please consult the other documentation pages to learn more about [managing migrations](xref:core/managing-schemas/migrations/managing), [applying them](xref:core/managing-schemas/migrations/applying), and other aspects. The [.NET Core CLI tool reference](xref:core/cli/index) also contains useful information on the different commands +The above was only a brief introduction to migrations. Please consult the other documentation pages to learn more about [managing migrations](xref:core/managing-schemas/migrations/managing), [applying them](xref:core/managing-schemas/migrations/applying), and other aspects. The [.NET CLI tool reference](xref:core/cli/index) also contains useful information on the different commands ## Additional resources -* [Entity Framework Core tools reference - .NET Core CLI](xref:core/cli/dotnet) : Includes commands to update, drop, add, remove, and more. +* [Entity Framework Core tools reference - .NET CLI](xref:core/cli/dotnet) : Includes commands to update, drop, add, remove, and more. * [Entity Framework Core tools reference - Package Manager Console in Visual Studio](xref:core/cli/powershell) : Includes commands to update, drop, add, remove, and more. * [.NET Data Community Standup session](https://www.youtube.com/watch?v=mSsGERmrhnE&list=PLdo4fOcmZ0oX-DBuRG4u58ZTAJgBAeQ-t&index=20) going over new migration features in EF Core 5.0. diff --git a/entity-framework/core/managing-schemas/migrations/managing.md b/entity-framework/core/managing-schemas/migrations/managing.md index eac9066ced..23d3da2a5f 100644 --- a/entity-framework/core/managing-schemas/migrations/managing.md +++ b/entity-framework/core/managing-schemas/migrations/managing.md @@ -1,7 +1,7 @@ --- title: Managing Migrations - EF Core description: Adding, removing and otherwise managing database schema migrations with Entity Framework Core -author: bricelam +author: SamMonoRT ms.date: 10/27/2020 uid: core/managing-schemas/migrations/managing --- @@ -10,13 +10,13 @@ uid: core/managing-schemas/migrations/managing As your model changes, migrations are added and removed as part of normal development, and the migration files are checked into your project's source control. To manage migrations, you must first install the [EF Core command-line tools](xref:core/cli/index). > [!TIP] -> If the `DbContext` is in a different assembly than the startup project, you can explicitly specify the target and startup projects in either the [Package Manager Console tools](xref:core/cli/powershell#target-and-startup-project) or the [.NET Core CLI tools](xref:core/cli/dotnet#target-project-and-startup-project). +> If the `DbContext` is in a different assembly than the startup project, you can explicitly specify the target and startup projects in either the [Package Manager Console tools](xref:core/cli/powershell#target-and-startup-project) or the [.NET CLI tools](xref:core/cli/dotnet#target-project-and-startup-project). ## Add a migration After your model has been changed, you can add a migration for that change: -### [.NET Core CLI](#tab/dotnet-core-cli) +### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet ef migrations add AddBlogCreatedTimestamp @@ -34,8 +34,8 @@ The migration name can be used like a commit message in a version control system Three files are added to your project under the **Migrations** directory: -* **XXXXXXXXXXXXXX_AddCreatedTimestamp.cs**--The main migrations file. Contains the operations necessary to apply the migration (in `Up`) and to revert it (in `Down`). -* **XXXXXXXXXXXXXX_AddCreatedTimestamp.Designer.cs**--The migrations metadata file. Contains information used by EF. +* **XXXXXXXXXXXXXX_AddBlogCreatedTimestamp.cs**--The main migrations file. Contains the operations necessary to apply the migration (in `Up`) and to revert it (in `Down`). +* **XXXXXXXXXXXXXX_AddBlogCreatedTimestamp.Designer.cs**--The migrations metadata file. Contains information used by EF. * **MyContextModelSnapshot.cs**--A snapshot of your current model. Used to determine what changed when adding the next migration. The timestamp in the filename helps keep them ordered chronologically so you can see the progression of changes. @@ -44,7 +44,7 @@ The timestamp in the filename helps keep them ordered chronologically so you can You are free to move Migrations files and change their namespace manually. New migrations are created as siblings of the last migration. Alternatively, you can specify the directory at generation time as follows: -#### [.NET Core CLI](#tab/dotnet-core-cli) +#### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet ef migrations add InitialCreate --output-dir Your/Directory @@ -170,7 +170,7 @@ In most cases, EF Core will automatically wrap each migration in its own transac Sometimes you add a migration and realize you need to make additional changes to your EF Core model before applying it. To remove the last migration, use this command. -### [.NET Core CLI](#tab/dotnet-core-cli) +### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet ef migrations remove @@ -193,7 +193,7 @@ After removing the migration, you can make the additional model changes and add You can list all existing migrations as follows: -### [.NET Core CLI](#tab/dotnet-core-cli) +### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet ef migrations list @@ -242,5 +242,5 @@ VALUES (N'', N''); ## Additional resources -* [Entity Framework Core tools reference - .NET Core CLI](xref:core/cli/dotnet) : Includes commands to update, drop, add, remove, and more. +* [Entity Framework Core tools reference - .NET CLI](xref:core/cli/dotnet) : Includes commands to update, drop, add, remove, and more. * [Entity Framework Core tools reference - Package Manager Console in Visual Studio](xref:core/cli/powershell) : Includes commands to update, drop, add, remove, and more. diff --git a/entity-framework/core/managing-schemas/migrations/operations.md b/entity-framework/core/managing-schemas/migrations/operations.md index f15e366fb6..0e3495517c 100644 --- a/entity-framework/core/managing-schemas/migrations/operations.md +++ b/entity-framework/core/managing-schemas/migrations/operations.md @@ -1,7 +1,7 @@ --- title: Custom Migrations Operations - EF Core description: Managing custom and raw SQL migrations for database schema management with Entity Framework Core -author: bricelam +author: SamMonoRT ms.date: 10/27/2020 uid: core/managing-schemas/migrations/operations --- @@ -22,7 +22,7 @@ The easiest way to implement a custom operation is to define an extension method [!code-csharp[](../../../../samples/core/Schemas/Migrations/CustomOperationSql.cs#snippet_CustomOperationSql)] > [!TIP] -> Use the `EXEC` function when a statement must be the first or only one in a SQL batch. It might also be needed to work around parser errors in idempotent migration scripts that can occur when referenced columns don't currently exist on a table. +> On SQL Server, use the `EXEC` function when a statement must be the first or only one in a SQL batch. It might also be needed to work around parser errors in idempotent migration scripts that can occur when referenced columns don't currently exist on a table. If your migrations need to support multiple database providers, you can use the `MigrationBuilder.ActiveProvider` property. Here's an example supporting both Microsoft SQL Server and PostgreSQL. diff --git a/entity-framework/core/managing-schemas/migrations/projects.md b/entity-framework/core/managing-schemas/migrations/projects.md index 471dcfd288..a306bde830 100644 --- a/entity-framework/core/managing-schemas/migrations/projects.md +++ b/entity-framework/core/managing-schemas/migrations/projects.md @@ -1,7 +1,7 @@ --- title: Using a Separate Migrations Project - EF Core description: Using a separate migration project for managing database schemas with Entity Framework Core -author: bricelam +author: SamMonoRT ms.date: 11/06/2020 uid: core/managing-schemas/migrations/projects --- @@ -46,7 +46,7 @@ You may want to store your migrations in a different project than the one contai If you did everything correctly, you should be able to add new migrations to the project. -## [.NET Core CLI](#tab/dotnet-core-cli) +## [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet ef migrations add NewMigration --project WebApplication1.Migrations diff --git a/entity-framework/core/managing-schemas/migrations/providers.md b/entity-framework/core/managing-schemas/migrations/providers.md index f5984096f0..1705faa841 100644 --- a/entity-framework/core/managing-schemas/migrations/providers.md +++ b/entity-framework/core/managing-schemas/migrations/providers.md @@ -1,7 +1,7 @@ --- title: Migrations with Multiple Providers - EF Core description: Using migrations to manage database schemas when targeting multiple database providers with Entity Framework Core -author: bricelam +author: SamMonoRT ms.date: 10/29/2020 uid: core/managing-schemas/migrations/providers --- @@ -23,7 +23,7 @@ class SqliteBlogContext : BlogContext Specify the context type when adding new migrations. -### [.NET Core CLI](#tab/dotnet-core-cli) +### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet ef migrations add InitialCreate --context BlogContext --output-dir Migrations/SqlServerMigrations @@ -58,7 +58,7 @@ Here's one pattern that works well when using a [Generic Host](/dotnet/core/exte Since the default host builder reads configuration from command-line arguments, you can specify the provider when running the tools. -### [.NET Core CLI](#tab/dotnet-core-cli) +### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet ef migrations add MyMigration --project ../SqlServerMigrations -- --provider SqlServer diff --git a/entity-framework/core/managing-schemas/migrations/teams.md b/entity-framework/core/managing-schemas/migrations/teams.md index b7bb90e3f4..0a99ca8231 100644 --- a/entity-framework/core/managing-schemas/migrations/teams.md +++ b/entity-framework/core/managing-schemas/migrations/teams.md @@ -1,7 +1,7 @@ --- title: Migrations in Team Environments - EF Core description: Best practices for managing migrations and resolving conflicts in team environments with Entity Framework Core -author: bricelam +author: SamMonoRT ms.date: 10/30/2017 uid: core/managing-schemas/migrations/teams --- diff --git a/entity-framework/core/managing-schemas/scaffolding/index.md b/entity-framework/core/managing-schemas/scaffolding/index.md index fd8afe18d9..56f11947b5 100644 --- a/entity-framework/core/managing-schemas/scaffolding/index.md +++ b/entity-framework/core/managing-schemas/scaffolding/index.md @@ -1,13 +1,13 @@ --- title: Reverse Engineering - EF Core description: Reverse engineering a model from an existing database using Entity Framework Core -author: bricelam +author: SamMonoRT ms.date: 03/27/2023 uid: core/managing-schemas/scaffolding --- # Scaffolding (Reverse Engineering) -Reverse engineering is the process of scaffolding entity type classes and a `DbContext` class based on a database schema. It can be performed using the `Scaffold-DbContext` command of the EF Core Package Manager Console (PMC) tools or the `dotnet ef dbcontext scaffold` command of the .NET Command-line Interface (CLI) tools. +Reverse engineering is the process of scaffolding entity type classes and a [DbContext](/dotnet/api/microsoft.entityframeworkcore.dbcontext) class based on a database schema. It can be performed using the `Scaffold-DbContext` command of the EF Core Package Manager Console (PMC) tools or the `dotnet ef dbcontext scaffold` command of the .NET Command-line Interface (CLI) tools. > [!NOTE] > The scaffolding of a `DbContext` and entity types documented here is distinct from the [scaffolding of controllers in ASP.NET Core](/aspnet/mvc/overview/getting-started/introduction/adding-a-controller) using Visual Studio, which is not documented here. @@ -27,13 +27,15 @@ Both the PMC and the .NET CLI commands have two required arguments: the connecti ### Connection string -The first argument to the command is a connection string to the database. The tools will use this connection string to read the database schema. +[!INCLUDE [managed-identities-test-non-production](~/core/includes/managed-identities-test-non-production.md)] -How you quote and escape the connection string depends on which shell you are using to execute the command; refer to your shell's documentation for more information. For example, PowerShell requires you to escape the `$` character, but not `\`. +The first argument to the command is a connection string to the database. The tools use this connection string to read the database schema. + +How the connection string is quoted and escaped depends on the shell that is used to run the command. Refer to the shell's documentation. For example, PowerShell requires escaping `$`, but not `\`. The following example scaffolds entity types and a `DbContext` from the `Chinook` database located on the machine's SQL Server LocalDB instance, making use of the `Microsoft.EntityFrameworkCore.SqlServer` database provider. -#### [.NET Core CLI](#tab/dotnet-core-cli) +#### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet ef dbcontext scaffold "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Chinook" Microsoft.EntityFrameworkCore.SqlServer @@ -47,67 +49,8 @@ Scaffold-DbContext 'Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Chinook' *** -#### User secrets for connection strings - -If you have a .NET application that uses the hosting model and configuration system, such as an ASP.NET Core project, then you can use the `Name=` syntax to read the connection string from configuration. - -For example, consider an ASP.NET Core application with the following configuration file: - -```json -{ - "ConnectionStrings": { - "Chinook": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Chinook" - } -} -``` - -This connection string in the config file can be used to scaffold from a database using: - -#### [.NET Core CLI](#tab/dotnet-core-cli) - -```dotnetcli -dotnet ef dbcontext scaffold "Name=ConnectionStrings:Chinook" Microsoft.EntityFrameworkCore.SqlServer -``` - -#### [Visual Studio PMC](#tab/vs) - -```powershell -Scaffold-DbContext 'Name=ConnectionStrings:Chinook' Microsoft.EntityFrameworkCore.SqlServer -``` - -*** - -However, storing connection strings in configuration files is not a good idea, since it is too easy to accidentally expose them, for example, by pushing to source control. Instead, connection strings should be stored in a secure way, such as using [Azure Key Vault](/azure/key-vault/keys/quick-create-net) or, when working locally, the [Secret Manager tool](/aspnet/core/security/app-secrets#secret-manager), aka "User Secrets". - -For example, to use the User Secrets, first remove the connection string from your ASP.NET Core configuration file. Next, initialize User Secrets by executing the following command in the same directory as the ASP.NET Core project: - -```dotnetcli -dotnet user-secrets init -``` - -This command sets up storage on your computer separate from your source code and adds a key for this storage to the project. - -Next, store the connection string in user secrets. For example: - -```dotnetcli -dotnet user-secrets set ConnectionStrings:Chinook "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Chinook" -``` - -Now the same command that previous used the named connection string from the config file will instead use the connection string stored in User Secrets. For example: - -#### [.NET Core CLI](#tab/dotnet-core-cli) - -```dotnetcli -dotnet ef dbcontext scaffold "Name=ConnectionStrings:Chinook" Microsoft.EntityFrameworkCore.SqlServer -``` - -#### [Visual Studio PMC](#tab/vs) - -```powershell -Scaffold-DbContext 'Name=ConnectionStrings:Chinook' Microsoft.EntityFrameworkCore.SqlServer -``` - -*** +> [!TIP] +> You can [use Configuration to store and retrieve the connection string](xref:core/miscellaneous/connection-strings#aspnet-core) #### Connection strings in the scaffolded code @@ -258,7 +201,7 @@ public partial class post ### Use mapping attributes (aka Data Annotations) -Entity types are configured using the [`ModelBuilder` API in `OnModelCreating`](xref:core/modeling/index#use-fluent-api-to-configure-a-model) by default. Specify `-DataAnnotations` (PMC) or `--data-annotations` (.NET Core CLI) to instead use [mapping attributes](xref:core/modeling/index#use-data-annotations-to-configure-a-model) when possible. +Entity types are configured using the [`ModelBuilder` API in `OnModelCreating`](xref:core/modeling/index#use-fluent-api-to-configure-a-model) by default. Specify `-DataAnnotations` (PMC) or `--data-annotations` (.NET CLI) to instead use [mapping attributes](xref:core/modeling/index#use-data-annotations-to-configure-a-model) when possible. For example, using the Fluent API will scaffold this: @@ -281,7 +224,7 @@ public string Title { get; set; } ### DbContext name -The scaffolded `DbContext` class name will be the name of the database suffixed with _Context_ by default. To specify a different one, use `-Context` in PMC and `--context` in the .NET Core CLI. +The scaffolded `DbContext` class name will be the name of the database suffixed with _Context_ by default. To specify a different one, use `-Context` in PMC and `--context` in the .NET CLI. ### Target directories and namespaces diff --git a/entity-framework/core/managing-schemas/scaffolding/templates.md b/entity-framework/core/managing-schemas/scaffolding/templates.md index 271ba728da..c7499a0e00 100644 --- a/entity-framework/core/managing-schemas/scaffolding/templates.md +++ b/entity-framework/core/managing-schemas/scaffolding/templates.md @@ -1,7 +1,7 @@ --- title: Custom Reverse Engineering Templates - EF Core description: Using T4 text templates to customize the scaffolded code when reverse engineering an Entity Framework Core model from a database -author: bricelam +author: SamMonoRT ms.date: 08/16/2022 uid: core/managing-schemas/scaffolding/templates --- @@ -120,7 +120,7 @@ var usings = new List Test the changes by using the reverse engineering commands. The templates inside your project are used automatically by the commands. -### [.NET Core CLI](#tab/dotnet-core-cli) +### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet ef dbcontext scaffold "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Chinook" Microsoft.EntityFrameworkCore.SqlServer @@ -178,6 +178,24 @@ For large models, the OnModelCreating method of the DbContext class can become u To scaffold these classes, you can use a third template called `EntityTypeConfiguration.t4`. Like the `EntityType.t4` template, it gets used for each entity type in the model and uses the `EntityType` template parameter. +### Generate Join Table in Many to Many Relationships + +By default, the scaffolding process does not generate an entity for join tables in simple many-to-many relationships. However, there are cases where explicitly generating the join table as an entity might be necessary (e.g., when finer control over the generated SQL query is required). + +The scaffolding behavior for each entity is controlled by the EntityType.t4 template file. Within this file, there is a condition that short-circuits entity generation for simple many-to-many join tables. To override this behavior and generate the join entity, you can comment out this condition in the 'EntityType.t4' file. + +```T4 +<# + // Comment this condition + if (EntityType.IsSimpleManyToManyJoinEntityType()) + { + // Don't scaffold these + return ""; + } + . . . +#> +``` + ### Scaffolding other types of files The primary purpose of reverse engineering in EF Core is to scaffold a DbContext and entity types. However, there's nothing in the tools that require you to actually scaffold code. For example, you could instead scaffold an entity relationship diagram using [Mermaid](https://mermaid-js.github.io/). diff --git a/entity-framework/core/miscellaneous/async.md b/entity-framework/core/miscellaneous/async.md index 4d8d8723d0..7360e38ec8 100644 --- a/entity-framework/core/miscellaneous/async.md +++ b/entity-framework/core/miscellaneous/async.md @@ -26,19 +26,31 @@ For more information, see [the general C# asynchronous programming docs](/dotnet ## Async LINQ operators -In order to support executing LINQ queries asynchronously, EF Core provides a set of async extension methods which execute the query and return results. These counterparts to the standard, synchronous LINQ operators include , , , etc.: +In order to support executing LINQ queries asynchronously, EF Core provides a set of async extension methods which execute the query and return results. These counterparts to the standard, synchronous LINQ operators include , , , etc.: [!code-csharp[Main](../../../samples/core/Miscellaneous/Async/Program.cs#ToListAsync)] -Note that there are no async versions of some LINQ operators such as or , because these only build up the LINQ expression tree and don't cause the query to be executed in the database. Only operators which cause query execution have async counterparts. +Note that there are no async versions of some LINQ operators such as or , because these only build up the LINQ expression tree and don't cause the query to be executed in the database. Only operators which cause query execution have async counterparts. > [!IMPORTANT] > The EF Core async extension methods are defined in the `Microsoft.EntityFrameworkCore` namespace. This namespace must be imported for the methods to be available. ## Client-side async LINQ operators -The async LINQ operators discussed above can only be used on EF queries - you cannot use them with client-side LINQ to Objects query. To perform client-side async LINQ operations outside of EF, use the [`System.Linq.Async` package](https://www.nuget.org/packages/System.Linq.Async); this package can be especially useful for performing operations on the client that cannot be translated for evaluation at the server. +In certain cases, you may want to apply client-side LINQ operators to results coming back from the database; this is needed especially when you need to perform an operation that cannot be translated to SQL. For such cases, use to execute the query on the database, and continue composing client-side LINQ operators over the resulting . For example, the following executes a local .NET function on the asynchronous results of the EF LINQ query: -In EF Core 6.0 and lower, referencing `System.Linq.Async` unfortunately causes ambiguous invocation compilation errors on LINQ operators applied to EF's DbSets; this makes it hard to use both EF and `System.Linq.Async` in the same project. To work around this issue, add to your DbSet: +```c# +var blogs = context.Blogs + .Where(b => b.Rating > 3) // server-evaluated (translated to SQL) + .AsAsyncEnumerable() + .Where(b => SomeLocalFunction(b)); // client-evaluated (in .NET) -[!code-csharp[Main](../../../samples/core/Miscellaneous/AsyncWithSystemInteractive/Program.cs#SystemInteractiveAsync)] +await foreach (var blog in blogs) +{ + // ... +} + +``` + +> [!NOTE] +> LINQ operators over are being introduced in .NET 10. When using an older version of .NET, reference the [`System.Linq.Async` package](https://www.nuget.org/packages/System.Linq.Async). diff --git a/entity-framework/core/miscellaneous/connection-resiliency.md b/entity-framework/core/miscellaneous/connection-resiliency.md index 219bc39797..79072409ed 100644 --- a/entity-framework/core/miscellaneous/connection-resiliency.md +++ b/entity-framework/core/miscellaneous/connection-resiliency.md @@ -47,9 +47,9 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) ## Execution strategies and transactions -An execution strategy that automatically retries on failures needs to be able to play back each operation in a retry block that fails. When retries are enabled, each operation you perform via EF Core becomes its own retriable operation. That is, each query and each call to `SaveChanges()` will be retried as a unit if a transient failure occurs. +An execution strategy that automatically retries on failures needs to be able to play back each operation in a retry block that fails. When retries are enabled, each operation you perform via EF Core becomes its own retriable operation. That is, each query and each call to `SaveChangesAsync()` will be retried as a unit if a transient failure occurs. -However, if your code initiates a transaction using `BeginTransaction()` you are defining your own group of operations that need to be treated as a unit, and everything inside the transaction would need to be played back shall a failure occur. You will receive an exception like the following if you attempt to do this when using an execution strategy: +However, if your code initiates a transaction using `BeginTransactionAsync()` you are defining your own group of operations that need to be treated as a unit, and everything inside the transaction would need to be played back if a failure occurs. You will receive an exception like the following if you attempt to do this when using an execution strategy: > InvalidOperationException: The configured execution strategy 'SqlServerRetryingExecutionStrategy' does not support user-initiated transactions. Use the execution strategy returned by 'DbContext.Database.CreateExecutionStrategy()' to execute all the operations in the transaction as a retriable unit. diff --git a/entity-framework/core/miscellaneous/connection-strings.md b/entity-framework/core/miscellaneous/connection-strings.md index ba3004cde9..8340bc4df1 100644 --- a/entity-framework/core/miscellaneous/connection-strings.md +++ b/entity-framework/core/miscellaneous/connection-strings.md @@ -1,26 +1,59 @@ --- title: Connection Strings - EF Core description: Managing connection strings under different environments with Entity Framework Core -author: bricelam +author: SamMonoRT ms.date: 10/27/2016 uid: core/miscellaneous/connection-strings --- # Connection Strings -Most database providers require some form of connection string to connect to the database. Sometimes this connection string contains sensitive information that needs to be protected. You may also need to change the connection string as you move your application between environments, such as development, testing, and production. +Most database providers require a connection string to connect to the database. The connection string: + +* Can contain sensitive information that needs to be protected. +* May need to change when the app moves to different environments, such as development, testing, and production. + +For more information, see [Secure authentication flows](/aspnet/core/security/#secure-authentication-flows) ## ASP.NET Core -In ASP.NET Core the configuration system is very flexible, and the connection string could be stored in `appsettings.json`, an environment variable, the user secret store, or another configuration source. See the [Configuration section of the ASP.NET Core documentation](/aspnet/core/fundamentals/configuration) for more details. +The ASP.NET Core configuration can store connection strings with various providers: + +* In the `appsettings.Development.json` or `appsettings.json` file. +* In an environment variable +* Using [Azure Key Vault](/azure/key-vault/keys/quick-create-net) +* Using the [Secret Manager tool](/aspnet/core/security/app-secrets#secret-manager) + +> [!WARNING] +> Secrets should never be added to configuration files. + +For example, the [Secret Manager tool](/aspnet/core/security/app-secrets#secret-manager) can store the database password. When scaffolding and using Secret manager, a connection string consists of `Name=`. -For instance, you can use the [Secret Manager tool](/aspnet/core/security/app-secrets#secret-manager) to store your database password and then, in scaffolding, use a connection string that simply consists of `Name=`. +See the [Configuration section of the ASP.NET Core documentation](/aspnet/core/fundamentals/configuration) for more information. ```dotnetcli +dotnet user-secrets init dotnet user-secrets set ConnectionStrings:YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase" +``` + +Then, in scaffolding, use a connection string that consists of `Name=`. + +### [.NET CLI](#tab/dotnet-core-cli) + +```dotnetcli dotnet ef dbcontext scaffold Name=ConnectionStrings:YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer ``` -Or the following example shows the connection string stored in `appsettings.json`. +### [Visual Studio PMC](#tab/vs) + +```powershell +Scaffold-DbContext 'Name=ConnectionStrings:YourDatabaseAlias' Microsoft.EntityFrameworkCore.SqlServer +``` + +*** + +[!INCLUDE [managed-identities-test-non-production](~/core/includes/managed-identities-test-non-production.md)] + +The following example shows the connection string stored in `appsettings.json`. ```json { @@ -30,19 +63,19 @@ Or the following example shows the connection string stored in `appsettings.json } ``` -Then the context is typically configured in `Startup.cs` with the connection string being read from configuration. Note the `GetConnectionString()` method looks for a configuration value whose key is `ConnectionStrings:`. You need to import the [Microsoft.Extensions.Configuration](/dotnet/api/microsoft.extensions.configuration) namespace to use this extension method. +The context is typically configured in `Program.cs` with the connection string being read from configuration. Note the [GetConnectionString](/dotnet/api/microsoft.extensions.configuration.configurationextensions.getconnectionstring) method looks for a configuration value whose key is `ConnectionStrings:`. `GetConnectionString` requires the [Microsoft.Extensions.Configuration](/dotnet/api/microsoft.extensions.configuration) namespace. ```csharp -public void ConfigureServices(IServiceCollection services) -{ - services.AddDbContext(options => - options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase"))); -} +var conString = builder.Configuration.GetConnectionString("BloggingContext") ?? + throw new InvalidOperationException("Connection string 'BloggingContext'" + + " not found."); +builder.Services.AddDbContext(options => + options.UseSqlServer(conString)); ``` ## WinForms & WPF Applications -WinForms, WPF, and ASP.NET 4 applications have a tried and tested connection string pattern. The connection string should be added to your application's App.config file (Web.config if you are using ASP.NET). If your connection string contains sensitive information, such as username and password, you can protect the contents of the configuration file using [Protected Configuration](/dotnet/framework/data/adonet/connection-strings-and-configuration-files#encrypting-configuration-file-sections-using-protected-configuration). +WinForms, WPF, and ASP.NET 4 applications have a tried and tested connection string pattern. The connection string should be added to your application's `App.config` file, or `Web.config` when using ASP.NET. Connection string containing sensitive information, such as username and password, should protect the contents of the configuration file using [Protected Configuration](/dotnet/framework/data/adonet/connection-strings-and-configuration-files#encrypting-configuration-file-sections-using-protected-configuration). ```xml @@ -75,7 +108,7 @@ public class BloggingContext : DbContext ## Universal Windows Platform (UWP) -Connection strings in a UWP application are typically a SQLite connection that just specifies a local filename. They typically do not contain sensitive information, and do not need to be changed as an application is deployed. As such, these connection strings are usually fine to be left in code, as shown below. If you wish to move them out of code then UWP supports the concept of settings, see the [App Settings section of the UWP documentation](/windows/uwp/app-settings/store-and-retrieve-app-data) for details. +Connection strings in a UWP application are typically a SQLite connection that just specifies a local filename. They typically don't contain sensitive information, and don't need to be changed as an application is deployed. As such, these connection strings are usually fine to be left in code, as shown below. If you wish to move them out of code then UWP supports the concept of settings, see the [App Settings section of the UWP documentation](/windows/uwp/app-settings/store-and-retrieve-app-data) for details. ```csharp public class BloggingContext : DbContext diff --git a/entity-framework/core/miscellaneous/internals/index.md b/entity-framework/core/miscellaneous/internals/index.md index 9aa19a4eba..8530230247 100644 --- a/entity-framework/core/miscellaneous/internals/index.md +++ b/entity-framework/core/miscellaneous/internals/index.md @@ -1,7 +1,7 @@ --- title: Architecture - EF Core description: The internal architecture of Entity Framework Core -author: bricelam +author: SamMonoRT ms.date: 11/27/2023 uid: core/miscellaneous/internals/index --- diff --git a/entity-framework/core/miscellaneous/internals/tools.md b/entity-framework/core/miscellaneous/internals/tools.md index 97fe76854d..56b7dc40b0 100644 --- a/entity-framework/core/miscellaneous/internals/tools.md +++ b/entity-framework/core/miscellaneous/internals/tools.md @@ -1,8 +1,8 @@ --- title: Design-time Tools Architecture - EF Core description: The architecture of design-time tools in Entity Framework Core -author: bricelam -ms.date: 11/27/2023 +author: SamMonoRT +ms.date: 01/17/2025 uid: core/miscellaneous/internals/tools --- # Design-time Tools Architecture @@ -23,12 +23,7 @@ There are two primary inputs to this command: the startup project and the target It reads information about the projects by injecting an MSBuild .targets file and calling the custom MSBuild target. The .targets file is compiled into dotnet-ef as an embedded resource. The source is located at [src/dotnet-ef/Resources/EntityFrameworkCore.targets](https://github.com/dotnet/efcore/blob/main/src/dotnet-ef/Resources/EntityFrameworkCore.targets). -It has a bit of logic at the beginning to handle multi-targeting projects. Essentially, it just picks the first target framework and re-invokes itself. After a single target framework has been determined, it writes several MSBuild properties like AssemblyName, OutputPath, RootNamespace, etc. to a temporary file that dotnet-ef then reads. - -> [!TIP] -> .NET 8 adds a new, streamlined way to read MSBuild properties that will enable us to remove this .targets file. See issue [#32113](https://github.com/dotnet/efcore/issues/32113). - -We need to inject this target into both the startup and target project. We do that by leveraging an MSBuild hook created for NuGet and other package managers. That hook automatically loads any file under `$(MSBuildProjectExtensionsPath)` with a name matching the pattern `$(MSBuildProjectName).*.targets`. Unfortunately, we don't know the actual value of the MSBuildProjectExtensionsPath property, and we need it before we can read any MSBuild properties. So, we assume it's set to the default value of `$(MSBuildProjectDirectory)\obj`. If it's not, the user must specify it using the `--msbuildprojectextensionspath` option. +It has a bit of logic at the beginning to handle multi-targeting projects. Essentially, it just picks the first target framework and re-invokes itself. After a single target framework has been determined, it gets several MSBuild properties like AssemblyName, OutputPath, RootNamespace, etc. After we've collected the project information, we compile the startup project. We assume that the target project will also be compiled transitively. @@ -119,7 +114,7 @@ In a nutshell, here are some of the strategies it uses. ### Design-time services -In addition to the application services and the internal DbContext services, there is a third set of [design-time services](xref:core/cli/services). These aren't added to internal service provider since they're never needed at runtime. The design-time services are built by [DesignTimeServicesBuilder](https://github.com/dotnet/efcore/blob/main/src/EFCore.Design/Design/Internal/DesignTimeServicesBuilder.cs). There are two main path--one with a context instance and one without. The one without is primarily used when scaffolding a new DbContext. There are several extensibility points here to allow the user, providers, and extensions to override and customize the services. +In addition to the application services and the internal DbContext services, there is a third set of [design-time services](xref:core/cli/services). These aren't added to internal service provider since they're never needed at runtime. The design-time services are built by [DesignTimeServicesBuilder](https://github.com/dotnet/efcore/blob/main/src/EFCore.Design/Design/Internal/DesignTimeServicesBuilder.cs). There are two main paths--one with a context instance and one without. The one without is primarily used when scaffolding a new DbContext. There are several extensibility points here to allow the user, providers, and extensions to override and customize the services. The user can customize services by adding an implementation of `IDesignTimeServices` to the startup assembly. diff --git a/entity-framework/core/miscellaneous/multitenancy.md b/entity-framework/core/miscellaneous/multitenancy.md index 51cd9f7bd4..44e0fdbca8 100644 --- a/entity-framework/core/miscellaneous/multitenancy.md +++ b/entity-framework/core/miscellaneous/multitenancy.md @@ -10,6 +10,8 @@ uid: core/miscellaneous/multitenancy Many line of business applications are designed to work with multiple customers. It is important to secure the data so that customer data isn't "leaked" or seen by other customers and potential competitors. These applications are classified as "multi-tenant" because each customer is considered a tenant of the application with their own set of data. +[!INCLUDE [managed-identities-test-non-production](~/core/includes/managed-identities-test-non-production.md)] + > [!IMPORTANT] > This document provides examples and solutions "as is." These are not intended to be "best practices" but rather "working practices" for your consideration. @@ -46,11 +48,11 @@ A possible solution is to create a simple `ITenantService` service that handles The `DbContext` can then manage the multi-tenancy. The approach depends on your database strategy. If you are storing all tenants in a single database, you are likely going to use a query filter. The `ITenantService` is passed to the constructor via dependency injection and used to resolve and store the tenant identifier. -:::code language="csharp" source="../../../samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Data/ContactContext.cs" range="10-13"::: +:::code language="csharp" source="../../../samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Data/ContactContext.cs" range="11-14"::: The `OnModelCreating` method is overridden to specify the query filter: -:::code language="csharp" source="../../../samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Data/ContactContext.cs" range="31-33"::: +:::code language="csharp" source="../../../samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Data/ContactContext.cs" range="32-34"::: This ensures that every query is filtered to the tenant on every request. There is no need to filter in application code because the global filter will be automatically applied. diff --git a/entity-framework/core/miscellaneous/nullable-reference-types.md b/entity-framework/core/miscellaneous/nullable-reference-types.md index 6350821821..5c000b5f22 100644 --- a/entity-framework/core/miscellaneous/nullable-reference-types.md +++ b/entity-framework/core/miscellaneous/nullable-reference-types.md @@ -7,7 +7,7 @@ uid: core/miscellaneous/nullable-reference-types --- # Working with Nullable Reference Types -C# 8 introduced a new feature called [nullable reference types (NRT)](/dotnet/csharp/tutorials/nullable-reference-types), allowing reference types to be annotated, indicating whether it is valid for them to contain `null` or not. If you are new to this feature, it is recommended that make yourself familiar with it by reading the C# docs. Nullable reference types are enabled by default in new project templates, but remain disabled in existing projects unless explicitly opted into. +C# [nullable reference types (NRT)](/dotnet/csharp/tutorials/nullable-reference-types) allow reference types to be annotated, indicating whether it is valid for them to contain `null` or not. If you are new to this feature, it is recommended that you make yourself familiar with it by reading the C# docs. Nullable reference types are enabled by default in new project templates, but remain disabled in existing projects unless explicitly opted into. This page introduces EF Core's support for nullable reference types, and describes best practices for working with them. @@ -95,9 +95,9 @@ Another strategy is to use non-nullable auto-properties, but to initialize them When dealing with optional relationships, it's possible to encounter compiler warnings where an actual `null` reference exception would be impossible. When translating and executing your LINQ queries, EF Core guarantees that if an optional related entity does not exist, any navigation to it will simply be ignored, rather than throwing. However, the compiler is unaware of this EF Core guarantee, and produces warnings as if the LINQ query were executed in memory, with LINQ to Objects. As a result, it is necessary to use the null-forgiving operator (!) to inform the compiler that an actual `null` value isn't possible: ```csharp -var order = context.Orders +var order = await context.Orders .Where(o => o.OptionalInfo!.SomeProperty == "foo") - .ToList(); + .ToListAsync(); ``` A similar issue occurs when including multiple levels of relationships across optional navigations: diff --git a/entity-framework/core/miscellaneous/platforms.md b/entity-framework/core/miscellaneous/platforms.md index db68ab27ec..43a590cc1f 100644 --- a/entity-framework/core/miscellaneous/platforms.md +++ b/entity-framework/core/miscellaneous/platforms.md @@ -1,7 +1,7 @@ --- title: Supported .NET implementations - EF Core description: Information on supported platforms across Entity Framework Core versions -author: bricelam +author: SamMonoRT ms.date: 12/13/2022 uid: core/miscellaneous/platforms --- @@ -13,16 +13,17 @@ We want EF Core to be available to developers on all modern .NET implementations Several older .NET implementations are no longer supported. See the sections below for more guidance. | EF Core | .NET & .NET Core | .NET Standard | .NET Framework | -|-------------------|------------------|---------------|----------------| +|------------------ | ---------------- | ------------- | -------------- | +| **9.0** | 8.0 | | | | **8.0** | 8.0 | | | -| **7.0** | 6.0 | | | -| **6.0** | 6.0 | | | +| ~~**7.0**~~ (EOL) | 6.0 | | | +| ~~**6.0**~~ (EOL) | 6.0 | | | | ~~**5.0**~~ (EOL) | 5.0 | 2.1 | | | ~~**3.1**~~ (EOL) | 3.1 | 2.0 | 4.7.2 | ## .NET -EF Core is a .NET library. EF Core version 8.0 targets .NET version 8.0, while both EF Core versions 6.0 and 7.0 target .NET version 6.0. In general, we target the latest [LTS release](/lifecycle/products/microsoft-net-and-net-core) of .NET. This enables you to upgrade to a newer, STS release of EF Core to take advantage of the latest features without having to upgrade your entire app. There may be exceptions to this, however, as runtime features sometimes get added that require us to depend on the latest version of .NET. +EF Core is a .NET library. EF Core version versions 8.0 and 9.0 both target .NET version 8.0. In general, we target the latest [LTS release](/lifecycle/products/microsoft-net-and-net-core) of .NET. This enables you to upgrade to a newer, STS release of EF Core to take advantage of the latest features without having to upgrade your entire app. There may be exceptions to this, however, as runtime features sometimes get added that require us to depend on the latest version of .NET. .NET supports multiple platforms including Windows, Linux, macOS, iOS, Android, and Wasm. For more details on which version are supported, see the [.NET Supported OS Policy](https://github.com/dotnet/core/blob/main/os-lifecycle-policy.md). @@ -40,7 +41,7 @@ The last version of EF Core that supported .NET Framework was version 3.1. We re ## Xamarin -The last version of EF Core that supported Xamarin was version 5.0. We recommend using .NET and [.NET MAUI](/dotnet/maui/) instead. .NET supports multiple platforms including Android, iOS, macOS, and Windows. .NET MAUI is an evolution of the Xamarin.Forms UI framework. +The last version of EF Core that supported Xamarin was version 5.0. We recommend using .NET and [.NET MAUI](/dotnet/maui/) instead. .NET supports multiple platforms including Android, iOS, macOS, and Windows. .NET MAUI is an evolution of the Xamarin.Forms UI framework. Xamarin.Android, Xamarin.iOS, Xamarin.Mac are now integrated directly into .NET (starting with .NET 6) as .NET for Android, .NET for iOS, and .NET for macOS. If you're building with these project types today, they should be upgraded to .NET SDK-style projects for continued support. For more information about upgrading Xamarin projects to .NET, see the [Upgrade from Xamarin to .NET & .NET MAUI](/dotnet/maui/migration) documentation. ## Universal Windows Platform diff --git a/entity-framework/core/miscellaneous/plugins.md b/entity-framework/core/miscellaneous/plugins.md index a7ed041470..c08cc5806a 100644 --- a/entity-framework/core/miscellaneous/plugins.md +++ b/entity-framework/core/miscellaneous/plugins.md @@ -1,7 +1,7 @@ --- title: Plug-in APIs - EF Core description: APIs extensions can use to plug into certain Entity Framework Core components -author: bricelam +author: SamMonoRT ms.date: 8/31/2023 uid: core/miscellaneous/plugins --- diff --git a/entity-framework/core/modeling/backing-field.md b/entity-framework/core/modeling/backing-field.md index 3644ed907f..ed79fd8db9 100644 --- a/entity-framework/core/modeling/backing-field.md +++ b/entity-framework/core/modeling/backing-field.md @@ -1,7 +1,7 @@ --- title: Backing Fields - EF Core description: Configuring backing fields for properties in an Entity Framework Core model -author: ajcvickers +author: SamMonoRT ms.date: 11/15/2021 uid: core/modeling/backing-field --- diff --git a/entity-framework/core/modeling/bulk-configuration.md b/entity-framework/core/modeling/bulk-configuration.md index a6b182dcbc..56bf6ff4e0 100644 --- a/entity-framework/core/modeling/bulk-configuration.md +++ b/entity-framework/core/modeling/bulk-configuration.md @@ -28,12 +28,12 @@ Properties of this type are not discovered by default as the current EF provider ### Drawbacks of the Metadata API - Unlike [Fluent API](xref:core/modeling/index#use-fluent-api-to-configure-a-model), every modification to the model needs to be done explicitly. For example, if some of the `Currency` properties were configured as navigations by a convention then you need to first remove the navigation referencing the CLR property before adding an entity type property for it. [#9117](https://github.com/dotnet/efcore/issues/9117) will improve this. -- The conventions run after each change. If you remove a navigation discovered by a convention then the convention will run again and could add it back. To prevent this from happening you would need to either delay the conventions until after the property is added by calling and later disposing the returned object or to mark the CLR property as ignored using . +- The conventions run after each change. If you remove a navigation discovered by a convention then the convention will run again and could add it back. To prevent this from happening you would need to either delay the conventions until after the property is added by calling and later disposing the returned object or to mark the CLR property as ignored using . - Entity types might be added after this iteration happens and the configuration won't be applied to them. This can usually be prevented by placing this code at the end of `OnModelCreating`, but if you have two interdependent sets of configurations there might not be an order that will allow them to be applied consistently. ## Pre-convention configuration -EF Core allows the mapping configuration to be specified once for a given CLR type; that configuration is then applied to all properties of that type in the model as they are discovered. This is called "pre-convention model configuration", since it configures aspects of the model before the model building conventions are allowed to run. Such configuration is applied by overriding on the type derived from . +EF Core allows the mapping configuration to be specified once for a given CLR type; that configuration is then applied to all properties of that type in the model as they are discovered. This is called "pre-convention model configuration", since it configures aspects of the model before the model building conventions are allowed to run. Such configuration is applied by overriding on the type derived from . This example shows how configure all properties of type `Currency` to have a value converter: @@ -63,7 +63,7 @@ Pre-convention configuration also allows to ignore a type and prevent it from be ### Default type mapping -Generally, EF is able to translate queries with constants of a type that is not supported by the provider, as long as you have specified a value converter for a property of this type. However, in queries that don't involve any properties of this type, there is no way for EF to find the correct value converter. In this case, it's possible to call to add or override a provider type mapping: +Generally, EF is able to translate queries with constants of a type that is not supported by the provider, as long as you have specified a value converter for a property of this type. However, in queries that don't involve any properties of this type, there is no way for EF to find the correct value converter. In this case, it's possible to call to add or override a provider type mapping: [!code-csharp[Main](../../../samples/core/Modeling/BulkConfiguration/PreConventionContext.cs?name=DefaultTypeMapping)] @@ -75,9 +75,6 @@ Generally, EF is able to translate queries with constants of a type that is not ## Conventions -> [!NOTE] -> Custom model building conventions were introduced in EF Core 7.0. - EF Core model building conventions are classes that contain logic that is triggered based on changes being made to the model as it is being built. This keeps the model up-to-date as explicit configuration is made, mapping attributes are applied, and other conventions run. To participate in this, every convention implements one or more interfaces which determine when the corresponding method will be triggered. For example, a convention that implements will be triggered whenever a new entity type is added to the model. Likewise, a convention that implements both and will be triggered whenever either a key or a foreign key is added to the model. Model building conventions are a powerful way to control the model configuration, but can be complex and hard to get right. In many cases, the [pre-convention model configuration](#pre-convention-configuration) can be used instead to easily specify common configuration for properties and types. @@ -116,7 +113,7 @@ public class DiscriminatorLengthConvention1 : IEntityTypeBaseTypeChangedConventi This convention implements , which means it will be triggered whenever the mapped inheritance hierarchy for an entity type is changed. The convention then finds and configures the string discriminator property for the hierarchy. -This convention is then used by calling in `ConfigureConventions`: +This convention is then used by calling in `ConfigureConventions`: ```csharp protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) @@ -334,7 +331,7 @@ public class AttributeBasedPropertyDiscoveryConvention : PropertyDiscoveryConven > [!TIP] > When replacing a built-in convention, the new convention implementation should inherit from the existing convention class. Note that some conventions have relational or provider-specific implementations, in which case the new convention implementation should inherit from the most specific existing convention class for the database provider in use. -The convention is then registered using the method in `ConfigureConventions`: +The convention is then registered using the method in `ConfigureConventions`: [!code-csharp[BookEntityType](../../../samples/core/Miscellaneous/NewInEFCore6/EntityTypeConfigurationAttributeSample.cs?name=BookEntityType)] -This attribute means that EF Core will use the specified `IEntityTypeConfiguration` implementation whenever the `Book` entity type is included in a model. The entity type is included in a model using one of the normal mechanisms. For example, by creating a property for the entity type: +This attribute means that EF Core will use the specified `IEntityTypeConfiguration` implementation whenever the `Book` entity type is included in a model. The entity type is included in a model using one of the normal mechanisms. For example, by creating a property for the entity type: [!code-csharp[DbContext](../../../samples/core/Miscellaneous/NewInEFCore6/EntityTypeConfigurationAttributeSample.cs?name=DbContext)] -Or by registering it in : +Or by registering it in : ```csharp protected override void OnModelCreating(ModelBuilder modelBuilder) diff --git a/entity-framework/core/modeling/indexes.md b/entity-framework/core/modeling/indexes.md index 3505a66246..003ca0c9cb 100644 --- a/entity-framework/core/modeling/indexes.md +++ b/entity-framework/core/modeling/indexes.md @@ -58,9 +58,6 @@ Attempting to insert more than one entity with the same values for the index's c ## Index sort order -> [!NOTE] -> This feature is being introduced in EF Core 7.0. - In most databases, each column covered by an index can be either ascending or descending. For indexes covering only one column, this typically does not matter: the database can traverse the index in reverse order as needed. However, for composite indexes, the ordering can be crucial for good performance, and can mean the difference between an index getting used by a query or not. In general, the index columns' sort orders should correspond to those specified in the `ORDER BY` clause of your query. The index sort order is ascending by default. You can make all columns have descending order as follows: @@ -106,12 +103,12 @@ You can set the name of the index created in the database: Note that if you call `HasIndex` more than once on the same set of properties, that continues to configure a single index rather than create a new one: ```csharp -modelBuilder.Entity() - .HasIndex(b => new { b.FirstName, b.LastName }) +modelBuilder.Entity() + .HasIndex(p => new { p.FirstName, p.LastName }) .HasDatabaseName("IX_Names_Ascending"); -modelBuilder.Entity() - .HasIndex(b => new { b.FirstName, b.LastName }) +modelBuilder.Entity() + .HasIndex(p => new { p.FirstName, p.LastName }) .HasDatabaseName("IX_Names_Descending") .IsDescending(); ``` @@ -121,11 +118,11 @@ Since the second `HasIndex` call overrides the first one, this creates only a si To create multiple indexes over the same set of properties, pass a name to the `HasIndex`, which will be used to identify the index in the EF model, and to distinguish it from other indexes over the same properties: ```c# -modelBuilder.Entity() - .HasIndex(b => new { b.FirstName, b.LastName }, "IX_Names_Ascending"); +modelBuilder.Entity() + .HasIndex(p => new { p.FirstName, p.LastName }, "IX_Names_Ascending"); -modelBuilder.Entity() - .HasIndex(b => new { b.FirstName, b.LastName }, "IX_Names_Descending") +modelBuilder.Entity() + .HasIndex(p => new { p.FirstName, p.LastName }, "IX_Names_Descending") .IsDescending(); ``` diff --git a/entity-framework/core/modeling/inheritance.md b/entity-framework/core/modeling/inheritance.md index 67a4161df7..0fa7c0ff02 100644 --- a/entity-framework/core/modeling/inheritance.md +++ b/entity-framework/core/modeling/inheritance.md @@ -102,9 +102,6 @@ If you are employing bulk configuration you can retrieve the column name for a s ## Table-per-concrete-type configuration -> [!NOTE] -> The table-per-concrete-type (TPC) feature was introduced in EF Core 7.0. - In the TPC mapping pattern, all the types are mapped to individual tables. Each table contains columns for all properties on the corresponding entity type. This addresses some common performance issues with the TPT strategy. > [!TIP] diff --git a/entity-framework/core/modeling/keyless-entity-types.md b/entity-framework/core/modeling/keyless-entity-types.md index 4dc89282e4..f1c22e0799 100644 --- a/entity-framework/core/modeling/keyless-entity-types.md +++ b/entity-framework/core/modeling/keyless-entity-types.md @@ -94,4 +94,4 @@ Finally, we can query the database view in the standard way: > Note we have also defined a context level query property (DbSet) to act as a root for queries against this type. > [!TIP] -> To test keyless entity types mapped to views using the in-memory provider, map them to a query via . See the [in-memory provider docs](xref:core/testing/testing-without-the-database#in-memory-provider) for more information. +> To test keyless entity types mapped to views using the in-memory provider, map them to a query via . See the [in-memory provider docs](xref:core/testing/testing-without-the-database#in-memory-provider) for more information. diff --git a/entity-framework/core/modeling/keys.md b/entity-framework/core/modeling/keys.md index 2589255fba..7094a44fed 100644 --- a/entity-framework/core/modeling/keys.md +++ b/entity-framework/core/modeling/keys.md @@ -34,9 +34,6 @@ You can also configure multiple properties to be the key of an entity - this is ### [Data Annotations](#tab/data-annotations) -> [!NOTE] -> The `[PrimaryKey]` attribute was introduced in EF Core 7.0. Use the Fluent API in older versions. - [!code-csharp[BeastAndRider](../../../samples/core/Modeling/ValueConversions/EnumToStringConversions.cs?name=BeastAndRider)] -Conversions can be configured in to store the enum values as strings such as "Donkey", "Mule", etc. in the database; you simply need to provide one function which converts from the `ModelClrType` to the `ProviderClrType`, and another for the opposite conversion: +Conversions can be configured in to store the enum values as strings such as "Donkey", "Mule", etc. in the database; you simply need to provide one function which converts from the `ModelClrType` to the `ProviderClrType`, and another for the opposite conversion: [!code-csharp[ConversionByBuiltInBoolToInt](../../../samples/core/Modeling/ValueConversions/EnumToStringConversions.cs?name=ConversionByBuiltInBoolToInt)] -This is functionally the same as creating an instance of the built-in and setting it explicitly: +This is functionally the same as creating an instance of the built-in and setting it explicitly: [!code-csharp[ConfigurePrimitiveCollection](../../../samples/core/Modeling/ValueConversions/PrimitiveCollection.cs?name=ConfigurePrimitiveCollection)] -`ICollection` represents a mutable reference type. This means that a is needed so that EF Core can track and detect changes correctly. See [Value Comparers](xref:core/modeling/value-comparers) for more information. +`ICollection` represents a mutable reference type. This means that a is needed so that EF Core can track and detect changes correctly. See [Value Comparers](xref:core/modeling/value-comparers) for more information. ### Collections of value objects @@ -547,7 +547,7 @@ And again use serialization to store this: [!code-csharp[ConfigureValueObjectCollection](../../../samples/core/Modeling/ValueConversions/ValueObjectCollection.cs?name=ConfigureValueObjectCollection)] > [!NOTE] -> As before, this conversion requires a . See [Value Comparers](xref:core/modeling/value-comparers) for more information. +> As before, this conversion requires a . See [Value Comparers](xref:core/modeling/value-comparers) for more information. ### Value objects as keys @@ -647,7 +647,7 @@ This can be mapped to a SQL server `rowversion` column using a value converter: ### Specify the DateTime.Kind when reading dates -SQL Server discards the flag when storing a as a [`datetime`](/sql/t-sql/data-types/datetime-transact-sql) or [`datetime2`](/sql/t-sql/data-types/datetime2-transact-sql). This means that DateTime values coming back from the database always have a of `Unspecified`. +SQL Server discards the flag when storing a as a [`datetime`](/sql/t-sql/data-types/datetime-transact-sql) or [`datetime2`](/sql/t-sql/data-types/datetime2-transact-sql). This means that DateTime values coming back from the database always have a of `Unspecified`. Value converters can be used in two ways to deal with this. First, EF Core has a value converter that creates an 8-byte opaque value which preserves the `Kind` flag. For example: diff --git a/entity-framework/core/performance/advanced-performance-topics.md b/entity-framework/core/performance/advanced-performance-topics.md index 0cf60ec244..7c69c33411 100644 --- a/entity-framework/core/performance/advanced-performance-topics.md +++ b/entity-framework/core/performance/advanced-performance-topics.md @@ -1,5 +1,5 @@ --- -title: Advanced Performance Topics +title: Advanced Performance Topics - EF Core description: Advanced performance topics for Entity Framework Core author: roji ms.date: 9/26/2023 @@ -15,13 +15,13 @@ Note that context pooling is orthogonal to database connection pooling, which is ### [With dependency injection](#tab/with-di) -The typical pattern in an ASP.NET Core app using EF Core involves registering a custom type into the [dependency injection](/aspnet/core/fundamentals/dependency-injection) container via . Then, instances of that type are obtained through constructor parameters in controllers or Razor Pages. +The typical pattern in an ASP.NET Core app using EF Core involves registering a custom type into the [dependency injection](/aspnet/core/fundamentals/dependency-injection) container via . Then, instances of that type are obtained through constructor parameters in controllers or Razor Pages. -To enable context pooling, simply replace `AddDbContext` with : +To enable context pooling, simply replace `AddDbContext` with : [!code-csharp[Main](../../../samples/core/Performance/AspNetContextPooling/Program.cs#AddDbContextPool)] -The `poolSize` parameter of sets the maximum number of instances retained by the pool (defaults to 1024). Once `poolSize` is exceeded, new context instances are not cached and EF falls back to the non-pooling behavior of creating instances on demand. +The `poolSize` parameter of sets the maximum number of instances retained by the pool (defaults to 1024). Once `poolSize` is exceeded, new context instances are not cached and EF falls back to the non-pooling behavior of creating instances on demand. ### [Without dependency injection](#tab/without-di) @@ -77,13 +77,19 @@ The full source code for this sample is available [here](https://github.com/dotn > [!NOTE] > Although EF Core takes care of resetting internal state for `DbContext` and its related services, it generally does not reset state in the underlying database driver, which is outside of EF. For example, if you manually open and use a `DbConnection` or otherwise manipulate ADO.NET state, it's up to you to restore that state before returning the context instance to the pool, e.g. by closing the connection. Failure to do so may cause state to get leaked across unrelated requests. +### Connection Pooling Considerations + +With most databases, a long-lived connection is required for performing database operations, and such connections can be expensive to open and close. EF does not implement connection pooling itself, but relies on the underlying database driver (e.g. ADO.NET driver) for managing database connections. Connection pooling is a client-side mechanism that reuses existing database connections to reduce the overhead of opening and closing connections repeatedly. This mechanism is generally consistent across databases supported by EF, such as Azure SQL Database, PostgreSQL, and others., although factors specific to the database or environment, such as resource limits or service configurations, may affect pooling efficiency. Connection pooling is usually enabled by default, and any pooling configuration must be performed at the low-level driver level as documented by that driver; for example, when using ADO.NET, parameters such as minimum or maximum pool sizes are usually configured via the connection string. + +Connection pooling is completely orthogonal to EF's `DbContext` pooling, which is described above: while the low-level database driver pools database connections (to avoid the overhead of opening/closing connections), EF can pool context instances (to avoid context memory allocation and initialization overheads). Regardless of whether a context instance is pooled or not, EF generally opens connections just before each operation (e.g. query), and closes it right afterwards, causing it to be returned to the pool; this is done to avoid keeping connections out of the pool any longer than is necessary. + ## Compiled queries When EF receives a LINQ query tree for execution, it must first "compile" that tree, e.g. produce SQL from it. Because this task is a heavy process, EF caches queries by the query tree shape, so that queries with the same structure reuse internally-cached compilation outputs. This caching ensures that executing the same LINQ query multiple times is very fast, even if parameter values differ. However, EF must still perform certain tasks before it can make use of the internal query cache. For example, your query's expression tree must be recursively compared with the expression trees of cached queries, to find the correct cached query. The overhead for this initial processing is negligible in the majority of EF applications, especially when compared to other costs associated with query execution (network I/O, actual query processing and disk I/O at the database...). However, in certain high-performance scenarios it may be desirable to eliminate it. -EF supports *compiled queries*, which allow the explicit compilation of a LINQ query into a .NET delegate. Once this delegate is acquired, it can be invoked directly to execute the query, without providing the LINQ expression tree. This technique bypasses the cache lookup, and provides the most optimized way to execute a query in EF Core. Following are some benchmark results comparing compiled and non-compiled query performance; benchmark on your platform before making any decisions. [The source code is available here](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Benchmarks/ContextPooling.cs), feel free to use it as a basis for your own measurements. +EF supports *compiled queries*, which allow the explicit compilation of a LINQ query into a .NET delegate. Once this delegate is acquired, it can be invoked directly to execute the query, without providing the LINQ expression tree. This technique bypasses the cache lookup, and provides the most optimized way to execute a query in EF Core. Following are some benchmark results comparing compiled and non-compiled query performance; benchmark on your platform before making any decisions. [The source code is available here](https://github.com/dotnet/EntityFramework.Docs/blob/main/samples/core/Benchmarks/CompiledQueries.cs), feel free to use it as a basis for your own measurements. | Method | NumBlogs | Mean | Error | StdDev | Gen 0 | Allocated | |--------------------- |--------- |---------:|---------:|---------:|-------:|----------:| @@ -92,7 +98,7 @@ EF supports *compiled queries*, which allow the explicit compilation of a LINQ q | WithCompiledQuery | 10 | 645.3 us | 10.00 us | 9.35 us | 2.9297 | 13 KB | | WithoutCompiledQuery | 10 | 709.8 us | 25.20 us | 73.10 us | 3.9063 | 18 KB | -To use compiled queries, first compile a query with as follows (use for synchronous queries): +To use compiled queries, first compile a query with as follows (use for synchronous queries): [!code-csharp[Main](../../../samples/core/Performance/Other/Program.cs#CompiledQueryCompile)] @@ -119,12 +125,12 @@ Since the expression trees contains different constants, the expression tree dif ```sql SELECT TOP(1) [b].[Id], [b].[Name] -FROM [Blogs] AS [b] -WHERE [b].[Name] = N'blog1' +FROM [Posts] AS [b] +WHERE [b].[Name] = N'post1' SELECT TOP(1) [b].[Id], [b].[Name] -FROM [Blogs] AS [b] -WHERE [b].[Name] = N'blog2' +FROM [Posts] AS [b] +WHERE [b].[Name] = N'post2' ``` Because the SQL differs, your database server will likely also need to produce a query plan for both queries, rather than reusing the same plan. @@ -137,14 +143,14 @@ Since the blog name is now *parameterized*, both queries have the same tree shap ```sql SELECT TOP(1) [b].[Id], [b].[Name] -FROM [Blogs] AS [b] -WHERE [b].[Name] = @__blogName_0 +FROM [Posts] AS [b] +WHERE [b].[Name] = @__postTitle_0 ``` Note that there is no need to parameterize each and every query: it's perfectly fine to have some queries with constants, and indeed, databases (and EF) can sometimes perform certain optimization around constants which aren't possible when the query is parameterized. See the section on [dynamically-constructed queries](#dynamically-constructed-queries) for an example where proper parameterization is crucial. > [!NOTE] -> EF Core's [event counters](xref:core/logging-events-diagnostics/event-counters) report the Query Cache Hit Rate. In a normal application, this counter reaches 100% soon after program startup, once most queries have executed at least once. If this counter remains stable below 100%, that is an indication that your application may be doing something which defeats the query cache - it's a good idea to investigate that. +> EF Core's [metrics](xref:core/logging-events-diagnostics/metrics) report the Query Cache Hit Rate. In a normal application, this metric reaches 100% soon after program startup, once most queries have executed at least once. If this metric remains stable below 100%, that is an indication that your application may be doing something which defeats the query cache - it's a good idea to investigate that. > [!NOTE] > How the database manages caches query plans is database-dependent. For example, SQL Server implicitly maintains an LRU query plan cache, whereas PostgreSQL does not (but prepared statements can produce a very similar end effect). Consult your database documentation for more details. @@ -289,6 +295,7 @@ Compiled models have some limitations: * [Global query filters are not supported](https://github.com/dotnet/efcore/issues/24897). * [Lazy loading and change-tracking proxies are not supported](https://github.com/dotnet/efcore/issues/24902). +* Value converters that reference private methods are not supported. Make referenced methods public or internal instead. * [The model must be manually synchronized by regenerating it any time the model definition or configuration change](https://github.com/dotnet/efcore/issues/24894). * Custom IModelCacheKeyFactory implementations are not supported. However, you can compile multiple models and load the appropriate one as needed. @@ -296,6 +303,10 @@ Because of these limitations, you should only use compiled models if your EF Cor If supporting any of these features is critical to your success, then please vote for the appropriate issues linked above. +### Handling compilation errors due to ambiguous type references + +When compiling models with types that have the same name but exist in different namespaces, the generated code may produce compilation errors due to ambiguous type references. To resolve this, you can customize the code generation to use fully-qualified type names by overriding `CSharpHelper.ShouldUseFullName` to return `true`. See [Design-time services](xref:core/cli/services) for information on how to override design-time services like `ICSharpHelper`. + ## Reducing runtime overhead As with any layer, EF Core adds a bit of runtime overhead compared to coding directly against lower-level database APIs. This runtime overhead is unlikely to impact most real-world applications in a significant way; the other topics in this performance guide, such as query efficiency, index usage and minimizing roundtrips, are far more important. In addition, even for highly-optimized applications, network latency and database I/O will usually dominate any time spent inside EF Core itself. However, for high-performance, low-latency applications where every bit of perf is important, the following recommendations can be used to reduce EF Core overhead to a minimum: diff --git a/entity-framework/core/performance/efficient-querying.md b/entity-framework/core/performance/efficient-querying.md index e4eab9de86..2e9756d17b 100644 --- a/entity-framework/core/performance/efficient-querying.md +++ b/entity-framework/core/performance/efficient-querying.md @@ -156,7 +156,7 @@ Whether a query buffers or streams depends on how it is evaluated: If your queries return just a few results, then you probably don't have to worry about this. However, if your query might return large numbers of rows, it's worth giving thought to streaming instead of buffering. > [!NOTE] -> Avoid using or if you intend to use another LINQ operator on the result - this will needlessly buffer all results into memory. Use instead. +> Avoid using or if you intend to use another LINQ operator on the result - this will needlessly buffer all results into memory. Use instead. ### Internal buffering by EF @@ -165,16 +165,16 @@ In certain situations, EF will itself buffer the resultset internally, regardles * When a retrying execution strategy is in place. This is done to make sure the same results are returned if the query is retried later. * When [split query](xref:core/querying/single-split-queries) is used, the resultsets of all but the last query are buffered - unless MARS (Multiple Active Result Sets) is enabled on SQL Server. This is because it is usually impossible to have multiple query resultsets active at the same time. -Note that this internal buffering occurs in addition to any buffering you cause via LINQ operators. For example, if you use on a query and a retrying execution strategy is in place, the resultset is loaded into memory *twice*: once internally by EF, and once by . +Note that this internal buffering occurs in addition to any buffering you cause via LINQ operators. For example, if you use on a query and a retrying execution strategy is in place, the resultset is loaded into memory *twice*: once internally by EF, and once by . ## Tracking, no-tracking and identity resolution It's recommended to read [the dedicated page on tracking and no-tracking](xref:core/querying/tracking) before continuing with this section. -EF tracks entity instances by default, so that changes on them are detected and persisted when is called. Another effect of tracking queries is that EF detects if an instance has already been loaded for your data, and will automatically return that tracked instance rather than returning a new one; this is called *identity resolution*. From a performance perspective, change tracking means the following: +EF tracks entity instances by default, so that changes on them are detected and persisted when is called. Another effect of tracking queries is that EF detects if an instance has already been loaded for your data, and will automatically return that tracked instance rather than returning a new one; this is called *identity resolution*. From a performance perspective, change tracking means the following: * EF internally maintains a dictionary of tracked instances. When new data is loaded, EF checks the dictionary to see if an instance is already tracked for that entity's key (identity resolution). The dictionary maintenance and lookups take up some time when loading the query's results. -* Before handing a loaded instance to the application, EF *snapshots* that instance and keeps the snapshot internally. When is called, the application's instance is compared with the snapshot to discover the changes to be persisted. The snapshot takes up more memory, and the snapshotting process itself takes time; it's sometimes possible to specify different, possibly more efficient snapshotting behavior via [value comparers](xref:core/modeling/value-comparers), or to use change-tracking proxies to bypass the snapshotting process altogether (though that comes with its own set of disadvantages). +* Before handing a loaded instance to the application, EF *snapshots* that instance and keeps the snapshot internally. When is called, the application's instance is compared with the snapshot to discover the changes to be persisted. The snapshot takes up more memory, and the snapshotting process itself takes time; it's sometimes possible to specify different, possibly more efficient snapshotting behavior via [value comparers](xref:core/modeling/value-comparers), or to use change-tracking proxies to bypass the snapshotting process altogether (though that comes with its own set of disadvantages). In read-only scenarios where changes aren't saved back to the database, the above overheads can be avoided by using [no-tracking queries](xref:core/querying/tracking#no-tracking-queries). However, since no-tracking queries do not perform identity resolution, a database row which is referenced by multiple other loaded rows will be materialized as different instances. @@ -193,7 +193,7 @@ Finally, it is possible to perform updates without the overhead of change tracki In some cases, more optimized SQL exists for your query, which EF does not generate. This can happen when the SQL construct is an extension specific to your database that's unsupported, or simply because EF does not translate to it yet. In these cases, writing SQL by hand can provide a substantial performance boost, and EF supports several ways to do this. -* Use SQL queries [directly in your query](xref:core/querying/sql-queries), e.g. via . EF even lets you compose over the SQL with regular LINQ queries, allowing you to express only a part of the query in SQL. This is a good technique when the SQL only needs to be used in a single query in your codebase. +* Use SQL queries [directly in your query](xref:core/querying/sql-queries), e.g. via . EF even lets you compose over the SQL with regular LINQ queries, allowing you to express only a part of the query in SQL. This is a good technique when the SQL only needs to be used in a single query in your codebase. * Define a [user-defined function](xref:core/querying/database-functions) (UDF), and then call that from your queries. Note that EF allows UDFs to return full resultsets - these are known as table-valued functions (TVFs) - and also allows mapping a `DbSet` to a function, making it look just like just another table. * Define a database view and query from it in your queries. Note that unlike functions, views cannot accept parameters. @@ -202,7 +202,7 @@ In some cases, more optimized SQL exists for your query, which EF does not gener ## Asynchronous programming -As a general rule, in order for your application to be scalable, it's important to always use asynchronous APIs rather than synchronous one (e.g. rather than ). Synchronous APIs block the thread for the duration of database I/O, increasing the need for threads and the number of thread context switches that must occur. +As a general rule, in order for your application to be scalable, it's important to always use asynchronous APIs rather than synchronous one (e.g. rather than ). Synchronous APIs block the thread for the duration of database I/O, increasing the need for threads and the number of thread context switches that must occur. For more information, see the page on [async programming](xref:core/miscellaneous/async). diff --git a/entity-framework/core/performance/efficient-updating.md b/entity-framework/core/performance/efficient-updating.md index 97e8e91eab..7a2a6c4f81 100644 --- a/entity-framework/core/performance/efficient-updating.md +++ b/entity-framework/core/performance/efficient-updating.md @@ -13,7 +13,7 @@ EF Core helps minimize roundtrips by automatically batching together all updates [!code-csharp[Main](../../../samples/core/Performance/Other/Program.cs#SaveChangesBatching)] -The above loads a blog from the database, changes its URL, and then adds two new blogs; to apply this, two SQL INSERT statements and one UPDATE statement are sent to the database. Rather than sending them one by one, as Blog instances are added, EF Core tracks these changes internally, and executes them in a single roundtrip when is called. +The above loads a blog from the database, changes its URL, and then adds two new blogs; to apply this, two SQL INSERT statements and one UPDATE statement are sent to the database. Rather than sending them one by one, as Blog instances are added, EF Core tracks these changes internally, and executes them in a single roundtrip when is called. The number of statements that EF batches in a single roundtrip depends on the database provider being used. For example, performance analysis has shown batching to be generally less efficient for SQL Server when less than 4 statements are involved. Similarly, the benefits of batching degrade after around 40 statements for SQL Server, so EF Core will by default only execute up to 42 statements in a single batch, and execute additional statements in separate roundtrips. @@ -30,7 +30,7 @@ foreach (var employee in context.Employees) { employee.Salary += 1000; } -context.SaveChanges(); +await context.SaveChangesAsync(); ``` While this is perfectly valid code, let's analyze what it does from a performance perspective: @@ -39,10 +39,10 @@ While this is perfectly valid code, let's analyze what it does from a performanc * EF Core's change tracking creates snapshots when loading the entities, and then compares those snapshots to the instances to find out which properties changed. * Typically, a second database roundtrip is performed to save all the changes (note that some database providers split the changes into multiples roundtrips). Although this batching behavior is far better than doing a roundtrip for each update, EF Core still sends an UPDATE statement per employee, and the database must execute each statement separately. -Starting with EF Core 7.0, you can use the `ExecuteUpdate` and `ExecuteDelete` methods to do the same thing far more efficiently: +Starting with EF Core 7.0, you can use the `ExecuteUpdateAsync` and `ExecuteDeleteAsync` methods to do the same thing far more efficiently: ```c# -context.Employees.ExecuteUpdate(s => s.SetProperty(e => e.Salary, e => e.Salary + 1000)); +await context.Employees.ExecuteUpdateAsync(s => s.SetProperty(e => e.Salary, e => e.Salary + 1000)); ``` This sends the following SQL statement to the database: diff --git a/entity-framework/core/performance/nativeaot-and-precompiled-queries.md b/entity-framework/core/performance/nativeaot-and-precompiled-queries.md new file mode 100644 index 0000000000..50e0394211 --- /dev/null +++ b/entity-framework/core/performance/nativeaot-and-precompiled-queries.md @@ -0,0 +1,126 @@ +--- +title: NativeAOT Support and Precompiled Queries (Experimental) - EF Core +description: Publishing NativeAOT Entity Framework Core applications and using precompiled queries +author: roji +ms.date: 11/10/2024 +uid: core/performance/nativeaot-and-precompiled-queries +--- +# NativeAOT Support and Precompiled Queries (Experimental) + +> [!WARNING] +> NativeAOT and query precompilation are highly experimental feature, and are not yet suited for production use. The support described below should be viewed as infrastructure towards the final feature, which will be released in a future version. We encourage you to experiment with the current support and report on your experiences, but recommend against deploying EF NativeAOT applications in production. See below for specific known limitations. + +[.NET NativeAOT](/dotnet/core/deploying/native-aot) allows publishing self-contained .NET applications that have been compiled ahead-of-time (AOT). Doing so offers the following advantages: + +* Significantly faster application startup time +* Small, self-contained binaries that have smaller memory footprints and are easier to deploy +* Running applications in environments where just-in-time compilation isn't supported + +EF applications published with NativeAOT start up much faster than the same applications without it. In addition to the general .NET startup improvements that NativeAOT offers (i.e. no JIT compilation required each time), EF also precompiles LINQ queries when publishing your application, so that no processing is needed when starting up and the SQL is already available for immediate execution. The more EF LINQ queries an application has in its code, the faster the startup gains are expected to be. + +## Publishing an EF NativeAOT Application + +First, enable NativeAOT publishing for your project as follows: + +```xml + + true + +``` + +EF's support for LINQ query execution under NativeAOT relies on *query precompilation*: this mechanism statically identifies EF LINQ queries and generates C# [*interceptors*](/dotnet/csharp/whats-new/csharp-12#interceptors), which contain code to execute each specific query. This can significantly cut down on your application's startup time, as the heavy lifting of processing and compiling your LINQ queries into SQL no longer happens every time your application starts up. Instead, each query's interceptor contains the finalized SQL for that query, as well as optimized code to materialize database results as .NET objects. + +C# interceptors are currently an experimental feature, and require a special opt-in in your project file: + +```xml + + $(InterceptorsNamespaces);Microsoft.EntityFrameworkCore.GeneratedInterceptors + +``` + +Finally, the [`Microsoft.EntityFrameworkCore.Tasks`](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Tasks) package contains [MSBuild integration](xref:core/cli/msbuild) that will perform the query precompilation (and generate the required compiled model) when you publish your application: + +```xml + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + +``` + +You're now ready to publish your EF NativeAOT application: + +```console +dotnet publish -r linux-arm64 -c Release +``` + +> [!NOTE] +> +> The publish command may fail with error `CS9137`. The cause of this error are outdated transitive package references `Microsoft.CodeAnalysis.CSharp.Workspaces` and `Microsoft.CodeAnalysis.Workspaces.MSBuild`. As a workaround add those packages explicitly to your .csproj file: +> +> ```xml +> +> +> ``` +> +> See [this issue](https://github.com/dotnet/efcore/issues/35945) for more information. + +This shows publishing a NativeAOT publishing for Linux running on ARM64; [consult this catalog](/dotnet/core/rid-catalog) to find your runtime identifier. If you'd like to generate the interceptors without publishing - for example to examine the generated sources - you can do so via the `dotnet ef dbcontext optimize --precompile-queries --nativeaot` command. + +Due to the way C# interceptors work, any change in the application source invalidates them and requires repeating the above process. As a result, interceptor generation and actual publishing aren't expected to happen in the inner loop, as the developer is working on code; instead, both `dotnet ef dbcontext optimize` and `dotnet publish` can be executed in a publishing/deployment workflow, in a CI/CD system. + +> [!NOTE] +> Publishing currently reports a number of trimming and NativeAOT warnings, meaning that your application isn't fully guaranteed to run properly. This is expected given the current experimental state of NativeAOT support; the final, non-experimental feature will report no warnings. + +## Limitations + +### Dynamic queries are not supported + +Query precompilation performs static analysis of your source code, identifying EF LINQ queries and generating C# interceptors for them. LINQ allows expressing highly dynamic queries, where LINQ operators are composed based on arbitrary conditions; such queries unfortunately cannot be statically analyzed, and are currently unsupported. Consider the following example: + +```c# +IAsyncEnumerable GetBlogs(BlogContext context, bool applyFilter) +{ + IQueryable query = context.Blogs.OrderBy(b => b.Id); + + if (applyFilter) + { + query = query.Where(b => b.Name != "foo"); + } + + return query.AsAsyncEnumerable(); +} +``` + +The above query is split across several statements, and dynamically composes the `Where` operator based on an external parameter; such queries cannot be precompiled. However, it is sometimes possible to rewrite such dynamic queries as multiple non-dynamic queries: + +```c# +IAsyncEnumerable GetBlogs(BlogContext context, bool applyFilter) + => applyFilter + ? context.Blogs.OrderBy(b => b.Id).Where(b => b.Name != "foo").AsAsyncEnumerable() + : context.Blogs.OrderBy(b => b.Id).AsAsyncEnumerable(); +``` + +Since the two queries can each be statically analyzed from start to finish, precompilation can handle them. + +Note that dynamic queries will likely be supported in the future when using NativeAOT; however, since they cannot be precompiled, they will continue to slow down your application startup, and will also generally perform less efficiently compared to non-NativeAOT execution; this is because EF internally relies on code generation to materialize database results, but code generation is not supported when using NativeAOT. + +### Other limitations + +* LINQ query expression syntax (sometimes termed "comprehension syntax") is not supported. +* The generated compiled model and query interceptors may currently be quite large in terms of code size, and take a long while to generate. We plan on improving this. +* EF providers may need to build in support for precompiled queries; check your provider's documentation to know whether it is compatible with EF's NativeAOT support. +* Value converters that use captured state are not supported. + +## Precompiled queries without NativeAOT + +Because of the current limitations of EF's NativeAOT support, it may not be usable for some applications. However, you may be able to take advantage of precompiled queries while publishing regular, non-NativeAOT applications; this allows you to at least benefit from the startup time reduction that precompiled queries offer, while being able to use dynamic queries and other features not currently supported with NativeAOT. + +Using precompiled queries without NativeAOT is simply a matter of executing the following: + +```console +dotnet ef dbcontext optimize --precompile-queries +``` + +As shown above, this will generate a compiled model and interceptors for queries which could be precompiled, removing their overhead from your application's startup time. diff --git a/entity-framework/core/performance/performance-diagnosis.md b/entity-framework/core/performance/performance-diagnosis.md index 05741022af..09492fac7b 100644 --- a/entity-framework/core/performance/performance-diagnosis.md +++ b/entity-framework/core/performance/performance-diagnosis.md @@ -81,11 +81,11 @@ While the above information is specific to SQL Server, other databases typically > [!IMPORTANT] > Databases sometimes generate different query plans depending on actual data in the database. For example, if a table contains only a few rows, a database may choose not to use an index on that table, but to perform a full table scan instead. If analyzing query plans on a test database, always make sure it contains data that is similar to your production system. -## Event counters +## Metrics -The above sections focused on how to get information about your commands, and how these commands are executed in the database. In addition to that, EF exposes a set of *event counters* which provide more lower-level information on what's happening inside EF itself, and how your application is using it. These counters can be very useful for diagnosing specific performance issues and performance anomalies, such as [query caching issues](xref:core/performance/advanced-performance-topics#dynamically-constructed-queries) which cause constant recompilation, undisposed DbContext leaks, and others. +The above sections focused on how to get information about your commands, and how these commands are executed in the database. In addition to that, EF exposes a set of *metrics* which provide more lower-level information on what's happening inside EF itself, and how your application is using it. These metrics can be very useful for diagnosing specific performance issues and performance anomalies, such as [query caching issues](xref:core/performance/advanced-performance-topics#dynamically-constructed-queries) which cause constant recompilation, undisposed DbContext leaks, and others. -See the dedicated page on [EF's event counters](xref:core/logging-events-diagnostics/event-counters) for more information. +See the dedicated page on [EF's metrics](xref:core/logging-events-diagnostics/metrics) for more information. ## Benchmarking with EF Core diff --git a/entity-framework/core/providers/cosmos/full-text-search.md b/entity-framework/core/providers/cosmos/full-text-search.md new file mode 100644 index 0000000000..0140b7d07f --- /dev/null +++ b/entity-framework/core/providers/cosmos/full-text-search.md @@ -0,0 +1,126 @@ +--- +title: Full-Text Search - Azure Cosmos DB Provider - EF Core +description: Full-text search with the Azure Cosmos DB EF Core Provider +author: maumar +ms.date: 04/19/2025 +uid: core/providers/cosmos/full-text-search +--- +# Full-text search + +> [!NOTE] +> Full-text search support for Cosmos was introduced in EF 10. + +Azure Cosmos DB now offers support for [full-text search](/azure/cosmos-db/gen-ai/full-text-search). It enables efficient and effective text searches using advanced techniques like stemming, as well as evaluating the relevance of documents to a given search query. It can be used in combination with vector search (i.e. hybrid search) to improve the accuracy of responses in some AI scenarios. +EF Core allows for modeling the database with full-text search enabled properties and using full-text search functions inside queries targeting Azure Cosmos DB. + +## Model configuration + +A property can be configured inside `OnModelCreating` to use full-text search by enabling it for the property and defining a full-text index: + +```c# +public class Blog +{ + ... + + public string Contents { get; set; } +} + +public class BloggingContext +{ + ... + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(b => + { + b.Property(x => x.Contents).EnableFullTextSearch(); + b.HasIndex(x => x.Contents).IsFullTextIndex(); + }); + } +} +``` + +> [!NOTE] +> Configuring the index is not mandatory, but it is recommended as it greatly improves performance of full-text search queries. + +Full-text search operations are language specific, using American English (`en-US`) by default. You can customize the language for individual properties as part of `EnableFullTextSearch` call: + +```c# +protected override void OnModelCreating(ModelBuilder modelBuilder) +{ + modelBuilder.Entity(b => + { + b.Property(x => x.Contents).EnableFullTextSearch(); + b.HasIndex(x => x.Contents).IsFullTextIndex(); + b.Property(x => x.ContentsGerman).EnableFullTextSearch("de-DE"); + b.HasIndex(x => x.ContentsGerman).IsFullTextIndex(); + }); +} +``` + +You can also set a default language for the container - unless overridden in the `EnableFullTextSearch` method, all full-text properties inside the container will use that language. + +```c# +protected override void OnModelCreating(ModelBuilder modelBuilder) +{ + modelBuilder.Entity(b => + { + b.HasDefaultFullTextLanguage("de-DE"); + b.Property(x => x.ContentsEnglish).EnableFullTextSearch("en-US"); + b.HasIndex(x => x.ContentsEnglish).IsFullTextIndex(); + b.Property(x => x.ContentsGerman).EnableFullTextSearch(); + b.HasIndex(x => x.ContentsGerman).IsFullTextIndex(); + b.Property(x => x.TagsGerman).EnableFullTextSearch(); + b.HasIndex(x => x.TagsGerman).IsFullTextIndex(); + }); +} +``` + +## Querying + +As part of the full-text search feature, Azure Cosmos DB introduced several built-in functions which allow for efficient querying of content inside the full-text search enabled properties. These functions are: [`FullTextContains`](/azure/cosmos-db/nosql/query/fulltextcontains), [`FullTextContainsAll`](/azure/cosmos-db/nosql/query/fulltextcontainsall), [`FullTextContainsAny`](/azure/cosmos-db/nosql/query/fulltextcontainsany), which look for specific keyword or keywords and [`FullTextScore`](/azure/cosmos-db/nosql/query/fulltextscore), which returns [BM25 score](https://en.wikipedia.org/wiki/Okapi_BM25) based on provided keywords. + +> [!NOTE] +> `FullTextScore` can only be used inside `OrderBy` to rank the documents based on the score. + +EF Core exposes these functions as part of `EF.Functions` so they can be used in queries: + +```c# +var cosmosBlogs = await context.Blogs.Where(x => EF.Functions.FullTextContainsAll(x.Contents, "database", "cosmos")).ToListAsync(); + +var keywords = new string[] { "AI", "agent", "breakthrough" }; +var mostInteresting = await context.Blogs.OrderBy(x => EF.Functions.FullTextScore(x.Contents, keywords)).Take(5).ToListAsync(); +``` + +## Hybrid search + +Full-text search can be used with [vector search](xref:core/providers/cosmos/vector-search) in the same query; this is sometimes known as "hybrid search", and involves combining the scoring results from multiple searches via the [RRF (Reciprocal Rank Fusion) function](/azure/cosmos-db/nosql/query/rrf). Once you have your vector and full-text search configuration properly set up, you can perform hybrid search as follows: + +```c# +float[] myVector = /* generate vector data from text, image, etc. */ +var hybrid = await context.Blogs + .OrderBy(x => EF.Functions.Rrf( + EF.Functions.FullTextScore(x.Contents, "database"), + EF.Functions.VectorDistance(x.Vector, myVector))) + .Take(10) + .ToListAsync(); +``` + +The RRF function also allows assigning different weights to each search function, allowing e.g. the vector search to have great weight in the overall results: + +```c# +float[] myVector = /* generate vector data from text, image, etc. */ +var hybrid = await context.Blogs + .OrderBy(x => EF.Functions.Rrf( + new[] + { + EF.Functions.FullTextScore(x.Contents, "database"), + EF.Functions.VectorDistance(x.Vector, myVector) + }, + weights: new[] { 1, 2 })) + .Take(10) + .ToListAsync(); +``` + +> [!TIP] +> You can combine more than two scoring functions inside `Rrf` call, as well as using only `FullTextScore`, or only `VectorDistance` invocations. diff --git a/entity-framework/core/providers/cosmos/functions.md b/entity-framework/core/providers/cosmos/functions.md deleted file mode 100644 index fb66960203..0000000000 --- a/entity-framework/core/providers/cosmos/functions.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Function Mappings - Azure Cosmos DB Provider - EF Core -description: Function Mappings of the Azure Cosmos DB EF Core Provider -author: bricelam -ms.date: 7/26/2023 -uid: core/providers/cosmos/functions ---- -# Function Mappings of the Azure Cosmos DB EF Core Provider - -This page shows which .NET members are translated into which SQL functions when using the Azure Cosmos DB provider. - -## Date and time functions - -.NET | SQL ---------------------- | --- -DateTime.UtcNow | GetCurrentDateTime() -DateTimeOffset.UtcNow | GetCurrentDateTime() - -## Numeric functions - -.NET | SQL | Added in --------------------------- | ----------------- | -------- -double.DegreesToRadians(x) | RADIANS(@x) | EF Core 8.0 -double.RadiansToDegrees(x) | DEGREES(@x) | EF Core 8.0 -EF.Functions.Random() | RAND() -Math.Abs(value) | ABS(@value) -Math.Acos(d) | ACOS(@d) -Math.Asin(d) | ASIN(@d) -Math.Atan(d) | ATAN(@d) -Math.Atan2(y, x) | ATN2(@y, @x) -Math.Ceiling(d) | CEILING(@d) -Math.Cos(d) | COS(@d) -Math.Exp(d) | EXP(@d) -Math.Floor(d) | FLOOR(@d) -Math.Log(a, newBase) | LOG(@a, @newBase) -Math.Log(d) | LOG(@d) -Math.Log10(d) | LOG10(@d) -Math.Pow(x, y) | POWER(@x, @y) -Math.Round(d) | ROUND(@d) -Math.Sign(value) | SIGN(@value) -Math.Sin(a) | SIN(@a) -Math.Sqrt(d) | SQRT(@d) -Math.Tan(a) | TAN(@a) -Math.Truncate(d) | TRUNC(@d) - -> [!TIP] -> In addition to the methods listed here, corresponding [generic math](/dotnet/standard/generics/math) implementations -> and [MathF](/dotnet/api/system.mathf) methods are also translated. For example, `Math.Sin`, `MathF.Sin`, `double.Sin`, -> and `float.Sin` all map to the `SIN` function in SQL. - -## String functions - -.NET | SQL | Added in -------------------------------------------------------------- | ---------------------------------------------------------- | -------- -Regex.IsMatch(input, pattern) | RegexMatch(@pattern, @input) | EF Core 7.0 -Regex.IsMatch(input, pattern, options) | RegexMatch(@input, @pattern, @options) | EF Core 7.0 -string.Concat(str0, str1) | @str0 + @str1 -string.Equals(a, b, StringComparison.Ordinal) | STRINGEQUALS(@a, @b) -string.Equals(a, b, StringComparison.OrdinalIgnoreCase) | STRINGEQUALS(@a, @b, true) -stringValue.Contains(value) | CONTAINS(@stringValue, @value) -stringValue.EndsWith(value) | ENDSWITH(@stringValue, @value) -stringValue.Equals(value, StringComparison.Ordinal) | STRINGEQUALS(@stringValue, @value) -stringValue.Equals(value, StringComparison.OrdinalIgnoreCase) | STRINGEQUALS(@stringValue, @value, true) -stringValue.FirstOrDefault() | LEFT(@stringValue, 1) -stringValue.IndexOf(value) | INDEX_OF(@stringValue, @value) -stringValue.IndexOf(value, startIndex) | INDEX_OF(@stringValue, @value, @startIndex) -stringValue.LastOrDefault() | RIGHT(@stringValue, 1) -stringValue.Length | LENGTH(@stringValue) -stringValue.Replace(oldValue, newValue) | REPLACE(@stringValue, @oldValue, @newValue) -stringValue.StartsWith(value) | STARTSWITH(@stringValue, @value) -stringValue.Substring(startIndex) | SUBSTRING(@stringValue, @startIndex, LENGTH(@stringValue)) -stringValue.Substring(startIndex, length) | SUBSTRING(@stringValue, @startIndex, @length) -stringValue.ToLower() | LOWER(@stringValue) -stringValue.ToUpper() | UPPER(@stringValue) -stringValue.Trim() | TRIM(@stringValue) -stringValue.TrimEnd() | RTRIM(@stringValue) -stringValue.TrimStart() | LTRIM(@stringValue) - -## Miscellaneous functions - -.NET | SQL ---------------------------|---- -collection.Contains(item) | @item IN @collection diff --git a/entity-framework/core/providers/cosmos/index.md b/entity-framework/core/providers/cosmos/index.md index 1e13188251..ce701a3afc 100644 --- a/entity-framework/core/providers/cosmos/index.md +++ b/entity-framework/core/providers/cosmos/index.md @@ -7,6 +7,9 @@ uid: core/providers/cosmos/index --- # EF Core Azure Cosmos DB Provider +> [!WARNING] +> Extensive work has gone into the Azure Cosmos DB provider in 9.0. In order to improve the provider, a number of high-impact breaking changes had to be made; if you are upgrading an existing application, please read the [breaking changes section](xref:core/what-is-new/ef-core-9.0/breaking-changes#cosmos-breaking-changes) carefully. + This database provider allows Entity Framework Core to be used with Azure Cosmos DB. The provider is maintained as part of the [Entity Framework Core Project](https://github.com/dotnet/efcore). It is strongly recommended to familiarize yourself with the [Azure Cosmos DB documentation](/azure/cosmos-db/introduction) before reading this section. @@ -18,7 +21,7 @@ It is strongly recommended to familiarize yourself with the [Azure Cosmos DB doc Install the [Microsoft.EntityFrameworkCore.Cosmos NuGet package](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Cosmos/). -### [.NET Core CLI](#tab/dotnet-core-cli) +### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet add package Microsoft.EntityFrameworkCore.Cosmos @@ -56,6 +59,8 @@ Saving and querying data follows the normal EF pattern: > [!IMPORTANT] > Calling [EnsureCreatedAsync](/dotnet/api/Microsoft.EntityFrameworkCore.Storage.IDatabaseCreator.EnsureCreatedAsync) is necessary to create the required containers and insert the [seed data](xref:core/modeling/data-seeding) if present in the model. However `EnsureCreatedAsync` should only be called during deployment, not normal operation, as it may cause performance issues. +> +> Azure Cosmos DB SDK does not support RBAC for management plane operations in Azure Cosmos DB. Use Azure Management API instead of EnsureCreatedAsync with RBAC. ## Connecting and authenticating @@ -63,73 +68,13 @@ The Azure Cosmos DB provider for EF Core has multiple overloads of the [UseCosmo > [!IMPORTANT] > Make sure to understand [_Secure access to data in Azure Cosmos DB_](/azure/cosmos-db/secure-access-to-data) to understand the security implications and best practices for using each overload of the `UseCosmos` method. +> Generally, RBAC with token credentials is the recommended access-control mechanism. | Connection Mechanism | UseCosmos Overload | More information | -|----------------------------|------------------------------------------------------------------------|-------------------------------------------------------------------------------------------| -| Account endpoint and key | `UseCosmos(accountEndpoint, accountKey, databaseName)` | [Primary/secondary keys](/azure/cosmos-db/secure-access-to-data#primary-keys) | -| Account endpoint and token | `UseCosmos(accountEndpoint, tokenCredential, databaseName)` | [Resource tokens](/azure/cosmos-db/secure-access-to-data#primary-keys) | -| Connection string | `UseCosmos(connectionString, databaseName)` | [Work with account keys and connection strings](/azure/cosmos-db/scripts/cli/common/keys) | - -## Queries - -### LINQ queries - -[EF Core LINQ queries](xref:core/querying/index) can be executed against Azure Cosmos DB in the same way as for other database providers. For example: - - -[!code-csharp[StringTranslations](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosQueriesSample.cs?name=StringTranslations)] - -> [!NOTE] -> The Azure Cosmos DB provider does not translate the same set of LINQ queries as other providers. See [_Limitations_](xref:core/providers/cosmos/limitations) for more information. - -### SQL queries - -Queries can also be written [directly in SQL](xref:core/querying/sql-queries). For example: - - -[!code-csharp[FromSql](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosQueriesSample.cs?name=FromSql)] - -This query results in the following query execution: - -```sql -SELECT c -FROM ( - SELECT * FROM root c WHERE c["Angle1"] <= @p0 OR c["Angle2"] <= @p0 -) c -``` - -Just like for relational `FromSql` queries, the hand written SQL can be further composed using LINQ operators. For example: - - -[!code-csharp[FromSqlComposed](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosQueriesSample.cs?name=FromSqlComposed)] - -This combination of SQL and LINQ is translated to: - -```sql -SELECT DISTINCT c["Angle1"] -FROM ( - SELECT * FROM root c WHERE c["Angle1"] <= @p0 OR c["Angle2"] <= @p0 -) c -WHERE (c["InsertedOn"] <= GetCurrentDateTime()) -``` +|----------------------------|------------------------------------------------------------------------|----------------------------------------------------------------------------------------------| +| Account endpoint and key | `UseCosmos(accountEndpoint, accountKey, databaseName)` | [Primary/secondary keys](/azure/cosmos-db/secure-access-to-data#primary-keys) | +| Account endpoint and token | `UseCosmos(accountEndpoint, tokenCredential, databaseName)` | [RBAC and Resource tokens](/azure/cosmos-db/secure-access-to-data#role-based-access-control) | +| Connection string | `UseCosmos(connectionString, databaseName)` | [Work with account keys and connection strings](/azure/cosmos-db/scripts/cli/common/keys) | ## Azure Cosmos DB options @@ -137,307 +82,4 @@ It is also possible to configure the Azure Cosmos DB provider with a single conn [!code-csharp[Configuration](../../../../samples/core/Cosmos/ModelBuilding/OptionsContext.cs?name=Configuration)] -> [!TIP] -> The code above shows possible options. It is not intended that these will all be used at the same time! See the [Azure Cosmos DB Options documentation](/dotnet/api/microsoft.azure.cosmos.cosmosclientoptions) for a detailed description of the effect of each option mentioned above. - -## Cosmos-specific model customization - -By default all entity types are mapped to the same container, named after the derived context (`"OrderContext"` in this case). To change the default container name use [HasDefaultContainer](/dotnet/api/Microsoft.EntityFrameworkCore.CosmosModelBuilderExtensions.HasDefaultContainer): - -[!code-csharp[DefaultContainer](../../../../samples/core/Cosmos/ModelBuilding/OrderContext.cs?name=DefaultContainer)] - -To map an entity type to a different container use [ToContainer](/dotnet/api/Microsoft.EntityFrameworkCore.CosmosEntityTypeBuilderExtensions.ToContainer): - -[!code-csharp[Container](../../../../samples/core/Cosmos/ModelBuilding/OrderContext.cs?name=Container)] - -To identify the entity type that a given item represent EF Core adds a discriminator value even if there are no derived entity types. The name and value of the discriminator [can be changed](xref:core/modeling/inheritance). - -If no other entity type will ever be stored in the same container the discriminator can be removed by calling [HasNoDiscriminator](/dotnet/api/Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder.HasNoDiscriminator): - -[!code-csharp[NoDiscriminator](../../../../samples/core/Cosmos/ModelBuilding/OrderContext.cs?name=NoDiscriminator)] - -### Partition keys - -By default, EF Core will create containers with the partition key set to `"__partitionKey"` without supplying any value for it when inserting items. But to fully leverage the performance capabilities of Azure Cosmos DB, a [carefully selected partition key](/azure/cosmos-db/partition-data) should be used. It can be configured by calling [HasPartitionKey](/dotnet/api/Microsoft.EntityFrameworkCore.CosmosEntityTypeBuilderExtensions.HasPartitionKey): - -[!code-csharp[PartitionKey](../../../../samples/core/Cosmos/ModelBuilding/OrderContext.cs?name=PartitionKey)] - -> [!NOTE] ->The partition key property can be of any type as long as it is [converted to string](xref:core/modeling/value-conversions). - -Once configured the partition key property should always have a non-null value. A query can be made single-partition by adding a call. - -[!code-csharp[PartitionKey](../../../../samples/core/Cosmos/ModelBuilding/Sample.cs?name=PartitionKey&highlight=14)] - -It is generally recommended to add the partition key to the primary key as that best reflects the server semantics and allows some optimizations, for example in `FindAsync`. - -### Provisioned throughput - -If you use EF Core to create the Azure Cosmos DB database or containers you can configure [provisioned throughput](/azure/cosmos-db/set-throughput) for the database by calling or . For example: - - -[!code-csharp[ModelThroughput](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=ModelThroughput)] - -To configure provisioned throughput for a container call or . For example: - - -[!code-csharp[EntityTypeThroughput](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=EntityTypeThroughput)] - -### Time-to-live - -Entity types in the Azure Cosmos DB model can now be configured with a default time-to-live. For example: - -```csharp -modelBuilder.Entity().HasDefaultTimeToLive(3600); -``` - -Or, for the analytical store: - -```csharp -modelBuilder.Entity().HasAnalyticalStoreTimeToLive(3600); -``` - -Time-to-live for individual entities can be set using a property mapped to "ttl" in the JSON document. For example: - - -[!code-csharp[TimeToLiveProperty](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=TimeToLiveProperty)] - -> [!NOTE] -> A default time-to-live must configured on the entity type for the "ttl" to have any effect. See [_Time to Live (TTL) in Azure Cosmos DB_](/azure/cosmos-db/nosql/time-to-live) for more information. - -The time-to-live property is then set before the entity is saved. For example: - - -[!code-csharp[SetTtl](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=SetTtl)] - -The time-to-live property can be a [shadow property](xref:core/modeling/shadow-properties) to avoid polluting the domain entity with database concerns. For example: - - -[!code-csharp[TimeToLiveShadowProperty](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=TimeToLiveShadowProperty)] - -The shadow time-to-live property is then set by [accessing the tracked entity](xref:core/change-tracking/entity-entries). For example: - - -[!code-csharp[SetTtlShadow](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=SetTtlShadow)] - -## Embedded entities - -> [!NOTE] -> Related entity types are configured as owned by default. To prevent this for a specific entity type call . - -For Azure Cosmos DB, owned entities are embedded in the same item as the owner. To change a property name use [ToJsonProperty](/dotnet/api/Microsoft.EntityFrameworkCore.CosmosEntityTypeBuilderExtensions.ToJsonProperty): - -[!code-csharp[PropertyNames](../../../../samples/core/Cosmos/ModelBuilding/OrderContext.cs?name=PropertyNames)] - -With this configuration the order from the example above is stored like this: - -```json -{ - "Id": 1, - "PartitionKey": "1", - "TrackingNumber": null, - "id": "1", - "Address": { - "ShipsToCity": "London", - "ShipsToStreet": "221 B Baker St" - }, - "_rid": "6QEKAM+BOOABAAAAAAAAAA==", - "_self": "dbs/6QEKAA==/colls/6QEKAM+BOOA=/docs/6QEKAM+BOOABAAAAAAAAAA==/", - "_etag": "\"00000000-0000-0000-683c-692e763901d5\"", - "_attachments": "attachments/", - "_ts": 1568163674 -} -``` - -Collections of owned entities are embedded as well. For the next example we'll use the `Distributor` class with a collection of `StreetAddress`: - -[!code-csharp[Distributor](../../../../samples/core/Cosmos/ModelBuilding/Distributor.cs?name=Distributor)] - -The owned entities don't need to provide explicit key values to be stored: - -[!code-csharp[OwnedCollection](../../../../samples/core/Cosmos/ModelBuilding/Sample.cs?name=OwnedCollection)] - -They will be persisted in this way: - -```json -{ - "Id": 1, - "Discriminator": "Distributor", - "id": "Distributor|1", - "ShippingCenters": [ - { - "City": "Phoenix", - "Street": "500 S 48th Street" - }, - { - "City": "Anaheim", - "Street": "5650 Dolly Ave" - } - ], - "_rid": "6QEKANzISj0BAAAAAAAAAA==", - "_self": "dbs/6QEKAA==/colls/6QEKANzISj0=/docs/6QEKANzISj0BAAAAAAAAAA==/", - "_etag": "\"00000000-0000-0000-683c-7b2b439701d5\"", - "_attachments": "attachments/", - "_ts": 1568163705 -} -``` - -Internally EF Core always needs to have unique key values for all tracked entities. The primary key created by default for collections of owned types consists of the foreign key properties pointing to the owner and an `int` property corresponding to the index in the JSON array. To retrieve these values entry API could be used: - -[!code-csharp[ImpliedProperties](../../../../samples/core/Cosmos/ModelBuilding/Sample.cs?name=ImpliedProperties)] - -> [!TIP] -> When necessary the default primary key for the owned entity types can be changed, but then key values should be provided explicitly. - -### Collections of primitive types - -Collections of supported primitive types, such as `string` and `int`, are discovered and mapped automatically. Supported collections are all types that implement or . For example, consider this entity type: - - -[!code-csharp[BookEntity](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosPrimitiveTypesSample.cs?name=BookEntity)] - -Both the list and the dictionary can be populated and inserted into the database in the normal way: - - -[!code-csharp[Insert](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosPrimitiveTypesSample.cs?name=Insert)] - -This results in the following JSON document: - -```json -{ - "Id": "0b32283e-22a8-4103-bb4f-6052604868bd", - "Discriminator": "Book", - "Notes": { - "36": "The Terracotta Army", - "48": "Saint Mark's Basilica", - "121": "Fridges", - "144": "Peter Higgs" - }, - "Quotes": [ - "Thomas (Tommy) Flowers was the British engineer behind the design of the Colossus computer.", - "Invented originally for Guinness, plastic widgets are nitrogen-filled spheres.", - "For 20 years after its introduction in 1979, the Walkman dominated the personal stereo market." - ], - "Title": "How It Works: Incredible History", - "id": "Book|0b32283e-22a8-4103-bb4f-6052604868bd", - "_rid": "t-E3AIxaencBAAAAAAAAAA==", - "_self": "dbs/t-E3AA==/colls/t-E3AIxaenc=/docs/t-E3AIxaencBAAAAAAAAAA==/", - "_etag": "\"00000000-0000-0000-9b50-fc769dc901d7\"", - "_attachments": "attachments/", - "_ts": 1630075016 -} -``` - -These collections can then be updated, again in the normal way: - - -[!code-csharp[Updates](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosPrimitiveTypesSample.cs?name=Updates)] - -Limitations: - -* Only dictionaries with string keys are supported -* Querying into the contents of primitive collections is not currently supported. Vote for [#16926](https://github.com/dotnet/efcore/issues/16926), [#25700](https://github.com/dotnet/efcore/issues/25700), and [#25701](https://github.com/dotnet/efcore/issues/25701) if these features are important to you. - -## Working with disconnected entities - -Every item needs to have an `id` value that is unique for the given partition key. By default EF Core generates the value by concatenating the discriminator and the primary key values, using '|' as a delimiter. The key values are only generated when an entity enters the `Added` state. This might pose a problem when [attaching entities](xref:core/saving/disconnected-entities) if they don't have an `id` property on the .NET type to store the value. - -To work around this limitation one could create and set the `id` value manually or mark the entity as added first, then changing it to the desired state: - -[!code-csharp[Attach](../../../../samples/core/Cosmos/ModelBuilding/Sample.cs?highlight=4&name=Attach)] - -This is the resulting JSON: - -```json -{ - "Id": 1, - "Discriminator": "Distributor", - "id": "Distributor|1", - "ShippingCenters": [ - { - "City": "Phoenix", - "Street": "500 S 48th Street" - } - ], - "_rid": "JBwtAN8oNYEBAAAAAAAAAA==", - "_self": "dbs/JBwtAA==/colls/JBwtAN8oNYE=/docs/JBwtAN8oNYEBAAAAAAAAAA==/", - "_etag": "\"00000000-0000-0000-9377-d7a1ae7c01d5\"", - "_attachments": "attachments/", - "_ts": 1572917100 -} -``` - -## Optimistic concurrency with eTags - -To configure an entity type to use [optimistic concurrency](xref:core/saving/concurrency) call . This call will create an `_etag` property in [shadow state](xref:core/modeling/shadow-properties) and set it as the concurrency token. - -[!code-csharp[Main](../../../../samples/core/Cosmos/ModelBuilding/OrderContext.cs?name=ETag)] - -To make it easier to resolve concurrency errors you can map the eTag to a CLR property using . - -[!code-csharp[Main](../../../../samples/core/Cosmos/ModelBuilding/OrderContext.cs?name=ETagProperty)] +The code above shows some possible options - these are not intended to be used at the same time. See the [Azure Cosmos DB Options documentation](/dotnet/api/microsoft.azure.cosmos.cosmosclientoptions) for a detailed description of the effect of each option mentioned above. diff --git a/entity-framework/core/providers/cosmos/limitations.md b/entity-framework/core/providers/cosmos/limitations.md index 446e0aee1e..26cc0f153c 100644 --- a/entity-framework/core/providers/cosmos/limitations.md +++ b/entity-framework/core/providers/cosmos/limitations.md @@ -2,21 +2,23 @@ title: Azure Cosmos DB Provider - Limitations - EF Core description: Limitations of the Entity Framework Core Azure Cosmos DB provider as compared to other providers author: AndriySvyryd -ms.date: 02/14/2023 +ms.date: 09/26/2024 uid: core/providers/cosmos/limitations --- # EF Core Azure Cosmos DB Provider Limitations -The Azure Cosmos DB database provider targets the Azure Cosmos DB NoSQL store, which is a [document database](https://en.wikipedia.org/wiki/Document-oriented_database). Most EF Core providers target [relational databases](https://en.wikipedia.org/wiki/Relational_database). Document databases and relational databases behave in fundamentally different ways. EF Core does not attempt to hide these differences; rather EF Core provides common patterns that can be used successfully across both kinds of database, together with features tailed to a particular provider that follow best practices for a given type of database. If a feature of EF Core is a pit-of-failure for a certain kind of database, then typically the database provider will not implement that feature, and instead help steer uses towards a [pit-of-success](/archive/blogs/brada/the-pit-of-success) approach. +The Azure Cosmos DB database provider targets the Azure Cosmos DB NoSQL store, which is a [document database](https://en.wikipedia.org/wiki/Document-oriented_database). Most EF Core providers target [relational databases](https://en.wikipedia.org/wiki/Relational_database). Document databases and relational databases behave in fundamentally different ways. EF Core does not attempt to hide these differences; rather EF Core provides common patterns that can be used successfully across both kinds of database, together with features tailored to a particular provider that follow best practices for a given type of database. If a feature of EF Core is a pit-of-failure for a certain kind of database, then typically the database provider will not implement that feature, and instead help steer uses towards a [pit-of-success](/archive/blogs/brada/the-pit-of-success) approach. Common EF Core patterns that either do not apply, or are a pit-of-failure, when using a document database include: -- Schema migration is not supported, since there is no defined schema for the documents. However, there could be other mechanisms for dealing with evolving data shapes that do make sense with Azure Cosmos DB NoSQL, For example, [Schema versioning pattern with Cosmos DB](https://github.com/dotnet/efcore/issues/23753), and [Cosmos data migration](https://github.com/dotnet/efcore/issues/11099). -- Reverse-engineering (scaffolding) a model from an existing database is not supported. Again, this is not supported because there is no defined database schema to scaffold from. However, see [Use shape of documents in the Cosmos database to scaffold a schema](https://github.com/dotnet/efcore/issues/30290). +- Schema migration is not supported, since there is no defined schema for the documents. However, there could be other mechanisms for dealing with evolving data shapes that do make sense with Azure Cosmos DB NoSQL, For example, [Schema versioning pattern with Azure Cosmos DB](https://github.com/dotnet/efcore/issues/23753), and [Azure Cosmos DB data migration](https://github.com/dotnet/efcore/issues/11099). +- Reverse-engineering (scaffolding) a model from an existing database is not supported. Again, this is not supported because there is no defined database schema to scaffold from. However, see [Use shape of documents in the Azure Cosmos DB database to scaffold a schema](https://github.com/dotnet/efcore/issues/30290). - Schema concepts defined on the EF model, like indexes and constraints, are ignored when using a document database, since there is no schema. Note that Azure Cosmos DB NoSQL performs [automatic indexing of documents](/azure/cosmos-db/index-overview). -- Loading graphs of related entities from different documents is not supported. Document databases are not designed to perform joins across many documents; doing so would be very inefficient. Instead, it is more common to denormalize data so that everything needed is in one, or a small number, of documents. However, there are some forms of cross-document relationships that could be handled--see [Limited Include support for Cosmos](https://github.com/dotnet/efcore/issues/16920#issuecomment-989721078). +- Loading graphs of related entities from different documents is not supported. Document databases are not designed to perform joins across many documents; doing so would be very inefficient. Instead, it is more common to denormalize data so that everything needed is in one, or a small number, of documents. However, there are some forms of cross-document relationships that could be handled--see [Limited Include support for Azure Cosmos DB](https://github.com/dotnet/efcore/issues/16920#issuecomment-989721078). > [!WARNING] -> Since there are no sync versions of the low level methods EF Core relies on, the corresponding functionality is currently implemented by calling `.Wait()` on the returned `Task`. This means that using methods like `SaveChanges`, or `ToList` instead of their async counterparts could lead to a deadlock in your application +> The Azure Cosmos DB SDK, which the EF provider uses, does not support synchronous I/O. As a result, synchronous EF APIs such as `ToList` or `SaveChanges` throw in version 9.0 and above; always use asynchronous +> methods when using EF. +> Previous versions of EF supported the synchronous APIs by calling `.Wait()` on the returned `Task`; this is known as "sync over async", and is a highly discouraged technique that can lead to deadlocks. See the EF 9.0 [breaking change note](xref:core/what-is-new/ef-core-9.0/breaking-changes#cosmos-nosync) for more information. -Beyond the differences in relational and document databases, and limitations in the SDK, the EF Core provider for Azure Cosmos DB NoSQL does not include everything that _could_ be implemented using the combination of EF Core and the Cosmos SDK. Potential enhancements in this area are tracked by [issues in the EF Core GitHub repo marked with the label `area-cosmos`](https://github.com/dotnet/efcore/issues?q=is%3Aopen+is%3Aissue+label%3Aarea-cosmos+sort%3Areactions-%2B1-desc+label%3Atype-enhancement) The best way to indicate the importance of an issue is to vote (👍) for it. This data will then feed into the [planning process](xref:core/what-is-new/release-planning) for the next release. +Beyond the differences in relational and document databases, and limitations in the SDK, the EF Core provider for Azure Cosmos DB NoSQL does not include everything that _could_ be implemented using the combination of EF Core and the Azure Cosmos DB SDK. Potential enhancements in this area are tracked by [issues in the EF Core GitHub repo marked with the label `area-cosmos`](https://github.com/dotnet/efcore/issues?q=is%3Aopen+is%3Aissue+label%3Aarea-cosmos+sort%3Areactions-%2B1-desc+label%3Atype-enhancement) The best way to indicate the importance of an issue is to vote (👍) for it. This data will then feed into the [planning process](xref:core/what-is-new/release-planning) for the next release. diff --git a/entity-framework/core/providers/cosmos/modeling.md b/entity-framework/core/providers/cosmos/modeling.md new file mode 100644 index 0000000000..119775be25 --- /dev/null +++ b/entity-framework/core/providers/cosmos/modeling.md @@ -0,0 +1,358 @@ +--- +title: Modeling - Azure Cosmos DB Provider - EF Core +description: Configuring the model with the Azure Cosmos DB EF Core Provider +author: roji +ms.date: 09/26/2024 +uid: core/providers/cosmos/modeling +--- +# Configuring the model with the EF Core Azure Cosmos DB Provider + +## Containers and entity types + +In Azure Cosmos DB, JSON documents are stored in containers. Unlike tables in relational databases, Azure Cosmos DB containers can contain documents with different shapes - a container does not impose a uniform schema on its documents. However, various configuration options are defined at the container level, and therefore affect all documents contained within it. See the [Azure Cosmos DB documentation on containers](/azure/cosmos-db/resource-model) for more information. + +By default, EF maps all entity types to the same container; this is usually a good default in terms of performance and pricing. The default container is named after the .NET context type (`OrderContext` in this case). To change the default container name, use : + +```csharp +modelBuilder.HasDefaultContainer("Store"); +``` + +To map an entity type to a different container use : + +```csharp +modelBuilder.Entity().ToContainer("Orders"); +``` + +Before mapping entity types to different containers, make sure you understand the potential performance and pricing implications (e.g. with regards to dedicated and shared throughput); [see the Azure Cosmos DB documentation to learn more](/azure/cosmos-db/resource-model). + +## IDs and keys + +Azure Cosmos DB requires all documents to have an `id` JSON property which uniquely identifies them. Like other EF providers, the EF Azure Cosmos DB provider will attempt to find a property named `Id` or `Id`, and configure that property as the key of your entity type, mapping it to the `id` JSON property. You can configure any property to be the key property by using ; see [the general EF documentation on keys](xref:core/modeling/keys) for more information. + +Developers coming to Azure Cosmos DB from other databases sometimes expect the key (`Id`) property to be generated automatically. For example, on SQL Server, EF configures numeric key properties to be IDENTITY columns, where auto-incrementing values are generated in the database. In contrast, Azure Cosmos DB does not support automatic generation of properties, and so key properties must be explicitly set. Inserting an entity type with an unset key property will simply insert the CLR default value for that property (e.g. 0 for `int`), and a second insert will fail; EF issues a warning if you attempt to do this. + +If you'd like to have a GUID as your key property, you can configure EF to generate unique, random values at the client: + +```csharp +modelBuilder.Entity().Property(b => b.Id).HasValueGenerator(); +``` + +## Partition keys + +Azure Cosmos DB uses partitioning to achieve horizontal scaling; proper modeling and careful selection of the partition key is vital for achieving good performance and keeping costs down. It's highly recommended to read [the Azure Cosmos DB documentation on partitioning](/azure/cosmos-db/partition-data) and to plan your partitioning strategy in advance. + +To configure the partition key with EF, call [HasPartitionKey](/dotnet/api/Microsoft.EntityFrameworkCore.CosmosEntityTypeBuilderExtensions.HasPartitionKey), passing it a regular property on your entity type: + +```csharp +modelBuilder.Entity().HasPartitionKey(o => o.PartitionKey); +``` + +Any property can be made into a partition key as long as it is [converted to string](xref:core/modeling/value-conversions). Once configured, the partition key property should always have a non-null value; trying to insert a new entity type with an unset partition key property will result in an error. + +Note that Azure Cosmos DB allows two documents with the same `id` property to exist in a container, as long as they're in different partitions; this means that in order to uniquely identify a document within a container, both the `id` and the partition key properties must all be provided. Because of this, EF's internal notion of the entity primary key contains both of these elements by convention, unlike e.g. relational databases where there is no partition key concept. This means e.g. that [`FindAsync`](xref:core/change-tracking/entity-entries#find-and-findasync) requires both key and partition key properties ([see further docs](xref:core/providers/cosmos/querying#findasync)), and a query must specify these in its `Where` clause to benefit from efficient and cost-effective [`point reads`](xref:core/providers/cosmos/querying#point-reads). + +Note that the partition key is defined at the container level. This notably means that it's not possible for multiple entity types in the same container to have different partition key properties. If you need to define different partition keys, map the relevant entity types to different containers. + +### Hierarchical partition keys + +Azure Cosmos DB also supports _hierarchical_ partition keys to optimize data distribution even further; [see the documentation for more details](/azure/cosmos-db/hierarchical-partition-keys). EF 9.0 added support for hierarchical partition keys; to configure these, simply pass up to 3 properties to [HasPartitionKey](/dotnet/api/Microsoft.EntityFrameworkCore.CosmosEntityTypeBuilderExtensions.HasPartitionKey): + +```csharp +modelBuilder.Entity().HasPartitionKey(o => new { e.TenantId, e.UserId, e.SessionId }); +``` + +With such a hierarchical partition key, queries can be easily sent only to the a relevant subset of sub-partitions. For example, if you query for the Orders of a specific tenant, those queries will only be executed against the sub-partitions for that tenant. + +If you don't configure a partition key with EF, a warning will be logged at startup; EF Core will create containers with the partition key set to `__partitionKey`, and won't supply any value for it when inserting items. When no partition key is set, your container will be limited to 20 GB of data, which is the maximum storage for a single [logical partition](/azure/cosmos-db/partitioning-overview). While this can work for small dev/ test applications, it is highly discouraged to deploy a production application without a well-configured partition key strategy. + +Once your partition key properties are properly configured, you can provide values for them in queries; see [Querying with partition keys](xref:core/providers/cosmos/querying#partition-keys) for more information. + +## Discriminators + +Since multiple entity types may be mapped to the same container, EF Core always adds a `$type` discriminator property to all JSON documents you save (this property was called `Discriminator` before EF 9.0); this allows EF to recognize documents being loaded from the database, and materialize the right .NET type. Developers coming from relational databases may be familiar with discriminators in the context of [table-per-hierarchy inheritance (TPH)](xref:core/modeling/inheritance#table-per-hierarchy-and-discriminator-configuration); in Azure Cosmos DB, discriminators are used not just in inheritance mapping scenarios, but also because the same container can contain completely different document types. + +The discriminator property name and values can be configured with the standard EF APIs, [see these docs for more information](xref:core/modeling/inheritance). If you're mapping a single entity type to a container, are confident that you'll never be mapping another one, and would like to get rid of the discriminator property, call [HasNoDiscriminator](/dotnet/api/Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder.HasNoDiscriminator): + +```csharp +modelBuilder.Entity().HasNoDiscriminator(); +``` + +Since the same container can contain different entity types, and the JSON `id` property must be unique within a container partition, you cannot have the same `id` value for entities of different types in the same container partition. Compare this to relational databases, where each entity type is mapped to a different table, and therefore has its own, separate key space. It is therefore your responsibility to ensure the `id` uniqueness of documents you insert into a container. If you need to have different entity types with the same primary key values, you can instruct EF to automatically insert the discriminator into the `id` property as follows: + +```csharp +modelBuilder.Entity().HasDiscriminatorInJsonId(); +``` + +While this may make it easier to work with `id` values, it may make it harder to interoperate with external applications working with your documents, as they now must be aware of EF's concatenated `id` format, as well as the discriminator values, which are by default derived from your .NET types. Note that this was the default behavior prior to EF 9.0. + +An additional option is to instruct EF to insert only the _root discriminator_, which is the discriminator of the root entity type of the hierarchy, into the `id` property: + +```csharp +modelBuilder.Entity().HasRootDiscriminatorInJsonId(); +``` + +This is similar, but allows EF to use efficient [point reads](xref:core/providers/cosmos/querying#point-reads) in more scenarios. If you need to insert a discriminator into the `id` property, consider inserting the root discriminator for better performance. + +## Provisioned throughput + +If you use EF Core to create the Azure Cosmos DB database or containers you can configure [provisioned throughput](/azure/cosmos-db/set-throughput) for the database by calling or . For example: + + +[!code-csharp[ModelThroughput](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=ModelThroughput)] + +To configure provisioned throughput for a container call or . For example: + + +[!code-csharp[EntityTypeThroughput](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=EntityTypeThroughput)] + +## Time-to-live + +Entity types in the Azure Cosmos DB model can be configured with a default time-to-live. For example: + +```csharp +modelBuilder.Entity().HasDefaultTimeToLive(3600); +``` + +Or, for the analytical store: + +```csharp +modelBuilder.Entity().HasAnalyticalStoreTimeToLive(3600); +``` + +Time-to-live for individual entities can be set using a property mapped to "ttl" in the JSON document. For example: + + +[!code-csharp[TimeToLiveProperty](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=TimeToLiveProperty)] + +> [!NOTE] +> A default time-to-live must configured on the entity type for the "ttl" to have any effect. See [_Time to Live (TTL) in Azure Cosmos DB_](/azure/cosmos-db/nosql/time-to-live) for more information. + +The time-to-live property is then set before the entity is saved. For example: + + +[!code-csharp[SetTtl](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=SetTtl)] + +The time-to-live property can be a [shadow property](xref:core/modeling/shadow-properties) to avoid polluting the domain entity with database concerns. For example: + + +[!code-csharp[TimeToLiveShadowProperty](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=TimeToLiveShadowProperty)] + +The shadow time-to-live property is then set by [accessing the tracked entity](xref:core/change-tracking/entity-entries). For example: + + +[!code-csharp[SetTtlShadow](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosModelConfigurationSample.cs?name=SetTtlShadow)] + +## Embedded entities + +> [!NOTE] +> Related entity types are configured as owned by default. To prevent this for a specific entity type call . + +For Azure Cosmos DB, owned entities are embedded in the same item as the owner. To change a property name use [ToJsonProperty](/dotnet/api/Microsoft.EntityFrameworkCore.CosmosEntityTypeBuilderExtensions.ToJsonProperty): + +[!code-csharp[PropertyNames](../../../../samples/core/Cosmos/ModelBuilding/OrderContext.cs?name=PropertyNames)] + +With this configuration the order from the example above is stored like this: + +```json +{ + "Id": 1, + "PartitionKey": "1", + "TrackingNumber": null, + "id": "1", + "Address": { + "ShipsToCity": "London", + "ShipsToStreet": "221 B Baker St" + }, + "_rid": "6QEKAM+BOOABAAAAAAAAAA==", + "_self": "dbs/6QEKAA==/colls/6QEKAM+BOOA=/docs/6QEKAM+BOOABAAAAAAAAAA==/", + "_etag": "\"00000000-0000-0000-683c-692e763901d5\"", + "_attachments": "attachments/", + "_ts": 1568163674 +} +``` + +Collections of owned entities are embedded as well. For the next example we'll use the `Distributor` class with a collection of `StreetAddress`: + +[!code-csharp[Distributor](../../../../samples/core/Cosmos/ModelBuilding/Distributor.cs?name=Distributor)] + +The owned entities don't need to provide explicit key values to be stored: + +[!code-csharp[OwnedCollection](../../../../samples/core/Cosmos/ModelBuilding/Sample.cs?name=OwnedCollection)] + +They will be persisted in this way: + +```json +{ + "Id": 1, + "Discriminator": "Distributor", + "id": "Distributor|1", + "ShippingCenters": [ + { + "City": "Phoenix", + "Street": "500 S 48th Street" + }, + { + "City": "Anaheim", + "Street": "5650 Dolly Ave" + } + ], + "_rid": "6QEKANzISj0BAAAAAAAAAA==", + "_self": "dbs/6QEKAA==/colls/6QEKANzISj0=/docs/6QEKANzISj0BAAAAAAAAAA==/", + "_etag": "\"00000000-0000-0000-683c-7b2b439701d5\"", + "_attachments": "attachments/", + "_ts": 1568163705 +} +``` + +Internally EF Core always needs to have unique key values for all tracked entities. The primary key created by default for collections of owned types consists of the foreign key properties pointing to the owner and an `int` property corresponding to the index in the JSON array. To retrieve these values entry API could be used: + +[!code-csharp[ImpliedProperties](../../../../samples/core/Cosmos/ModelBuilding/Sample.cs?name=ImpliedProperties)] + +> [!TIP] +> When necessary the default primary key for the owned entity types can be changed, but then key values should be provided explicitly. + +### Collections of primitive types + +Collections of supported primitive types, such as `string` and `int`, are discovered and mapped automatically. Supported collections are all types that implement or . For example, consider this entity type: + + +[!code-csharp[BookEntity](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosPrimitiveTypesSample.cs?name=BookEntity)] + +The `IList` and the `IDictionary` can be populated and persisted to the database: + + +[!code-csharp[Insert](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosPrimitiveTypesSample.cs?name=Insert)] + +This results in the following JSON document: + +```json +{ + "Id": "0b32283e-22a8-4103-bb4f-6052604868bd", + "Discriminator": "Book", + "Notes": { + "36": "The Terracotta Army", + "48": "Saint Mark's Basilica", + "121": "Fridges", + "144": "Peter Higgs" + }, + "Quotes": [ + "Thomas (Tommy) Flowers was the British engineer behind the design of the Colossus computer.", + "Invented originally for Guinness, plastic widgets are nitrogen-filled spheres.", + "For 20 years after its introduction in 1979, the Walkman dominated the personal stereo market." + ], + "Title": "How It Works: Incredible History", + "id": "Book|0b32283e-22a8-4103-bb4f-6052604868bd", + "_rid": "t-E3AIxaencBAAAAAAAAAA==", + "_self": "dbs/t-E3AA==/colls/t-E3AIxaenc=/docs/t-E3AIxaencBAAAAAAAAAA==/", + "_etag": "\"00000000-0000-0000-9b50-fc769dc901d7\"", + "_attachments": "attachments/", + "_ts": 1630075016 +} +``` + +These collections can then be updated, again in the normal way: + + +[!code-csharp[Updates](../../../../samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosPrimitiveTypesSample.cs?name=Updates)] + +Limitations: + +* Only dictionaries with string keys are supported. +* Support for querying into primitive collections was added in EF Core 9.0. + +## Optimistic concurrency with eTags + +To configure an entity type to use [optimistic concurrency](xref:core/saving/concurrency) call . This call will create an `_etag` property in [shadow state](xref:core/modeling/shadow-properties) and set it as the concurrency token. + +[!code-csharp[Main](../../../../samples/core/Cosmos/ModelBuilding/OrderContext.cs?name=ETag)] + +To make it easier to resolve concurrency errors you can map the eTag to a CLR property using . + +[!code-csharp[Main](../../../../samples/core/Cosmos/ModelBuilding/OrderContext.cs?name=ETagProperty)] + +## Database triggers + +> [!NOTE] +> Database trigger execution support was introduced in EF Core 10.0. + +Azure Cosmos DB supports pre- and post-triggers that run before or after database operations. EF Core can be configured to execute these triggers when performing save operations. + +> [!IMPORTANT] +> Triggers are executed server-side by Azure Cosmos DB when EF Core performs operations, but they are not enforced - operations can be performed without running triggers if accessing the database directly. This means triggers should not be used for security-related functionality such as authentication or auditing, as they can be bypassed by applications that access the database directly without using EF Core. + +To configure triggers on an entity type, use the `HasTrigger` method: + +[!code-csharp[TriggerConfiguration](../../../../samples/core/Cosmos/ModelBuilding/TriggerSample.cs?name=TriggerConfiguration)] + +The `HasTrigger` method requires: + +* **modelName**: The name of the trigger in Azure Cosmos DB +* **triggerType**: Either `TriggerType.Pre` (executed before the operation) or `TriggerType.Post` (executed after the operation) +* **triggerOperation**: The operation that should execute the trigger - `Create`, `Replace`, `Delete`, or `All` + +Before triggers can be executed, they must be created in Azure Cosmos DB using the Cosmos SDK or Azure portal. The trigger name configured in EF Core must match the trigger name in Azure Cosmos DB. diff --git a/entity-framework/core/providers/cosmos/planetary-docs-sample.md b/entity-framework/core/providers/cosmos/planetary-docs-sample.md index 71fd6f8d56..2225fe864c 100644 --- a/entity-framework/core/providers/cosmos/planetary-docs-sample.md +++ b/entity-framework/core/providers/cosmos/planetary-docs-sample.md @@ -16,7 +16,7 @@ Here's how to get started in a few easy steps. ### Clone this repo -Using your preferred tools, clone the repository. The `git` commmand looks like this: +Using your preferred tools, clone the repository. The `git` command looks like this: ```bash git clone https://github.com/dotnet/EntityFramework.Docs diff --git a/entity-framework/core/providers/cosmos/querying.md b/entity-framework/core/providers/cosmos/querying.md new file mode 100644 index 0000000000..089a75e315 --- /dev/null +++ b/entity-framework/core/providers/cosmos/querying.md @@ -0,0 +1,323 @@ +--- +title: Querying - Azure Cosmos DB Provider - EF Core +description: Querying with the Azure Cosmos DB EF Core Provider +author: roji +ms.date: 09/19/2024 +uid: core/providers/cosmos/querying +--- +# Querying with the EF Core Azure Cosmos DB Provider + +## Querying basics + +[EF Core LINQ queries](xref:core/querying/index) can be executed against Azure Cosmos DB in the same way as for other database providers. For example: + +```csharp +public class Session +{ + public Guid Id { get; set; } + public string Category { get; set; } + + public string TenantId { get; set; } = null!; + public Guid UserId { get; set; } + public int SessionId { get; set; } +} + +var stringResults = await context.Sessions + .Where( + e => e.Category.Length > 4 + && e.Category.Trim().ToLower() != "disabled" + && e.Category.TrimStart().Substring(2, 2).Equals("xy", StringComparison.OrdinalIgnoreCase)) + .ToListAsync(); +``` + +> [!NOTE] +> The Azure Cosmos DB provider does not translate the same set of LINQ queries as other providers. +> For example, the EF `Include()` operator isn't supported on Azure Cosmos DB, since cross-document queries aren't supported in the database. + +## Partition keys + +The advantage of partitioning is to have your queries execute only against the partition where the relevant data is found, saving costs and ensuring faster result speed. Queries which don't specify partition keys are executed on all the partitions, which can be quite costly. + +Starting with EF 9.0, EF automatically detects and extracts partition key comparisons in your LINQ query's `Where` operators. Let's assume we execute the following query against our `Session` entity type, which is configured with a hierarchical partition key: + +```csharp +protected override void OnModelCreating(ModelBuilder modelBuilder) +{ + modelBuilder.Entity() + .HasPartitionKey(b => new { b.TenantId, b.UserId, b.SessionId }) +} + +var tenantId = "Microsoft"; +var userId = new Guid("99A410D7-E467-4CC5-92DE-148F3FC53F4C"); +var username = "scott"; + +var sessions = await context.Sessions + .Where( + e => e.TenantId == tenantId + && e.UserId == userId + && e.SessionId > 0 + && e.Username == username) + .ToListAsync(); +``` + +Examining the logs generated by EF, we see this query executed as follows: + +```sql +Executed ReadNext (166.6985 ms, 2.8 RU) ActivityId='312da0d2-095c-4e73-afab-27072b5ad33c', Container='test', Partition='["Microsoft","99a410d7-e467-4cc5-92de-148f3fc53f4c"]', Parameters=[] +SELECT VALUE c +FROM root c +WHERE ((c["SessionId"] > 0) AND CONTAINS(c["Username"], "a")) +``` + +In these logs, we notice the following: + +* The first two comparisons - on `TenantId` and `UserId` - have been lifted out, and appear in the `ReadNext` "Partition" rather than in the `WHERE` clause; this means that query will only execute on the subpartitions for those values. +* `SessionId` is also part of the hierarchical partition key, but instead of an equality comparison, it uses a greater-than operator (`>`), and therefore cannot be lifted out. It is part of the `WHERE` clause like any regular property. +* `Username` is a regular property - not part of the partition key - and therefore remains in the `WHERE` clause as well. + +Note that even though some of the partition key values are not provided, hierarchical partition keys still allow targeting only the subpartitions which correspond to the first two properties. While this isn't as efficient as targeting a single partition (as identified by all three properties), it's still much more efficient than targeting all partitions. + +Rather than referencing partition key properties in a `Where` operator, you can explicitly specify them by using the operator: + +```c# +var sessions = await context.Sessions + .WithPartitionKey(tenantId, userId) + .Where(e => e.SessionId > 0 && e.Username.Contains("a")) + .ToListAsync(); +``` + +This executes in the same way as the above query, and can be preferable if you want to make partition keys more explicit in your queries. Using may be necessary in versions of EF prior to 9.0 - keep an eye on the logs to ensure that queries are using partition keys as expected. + +## Point reads + +While Azure Cosmos DB allows for powerful querying via SQL, such queries can be quite expensive. Azure Cosmos DB also supports _point reads_, which should be used when retrieving a single document if both the `id` property and the entire partition key are known. Point reads directly identify a specific document in a specific partition, and execute extremely efficiently and with reduced costs compared to retrieving the same document with a query. It's recommended to design your system to leverage point reads as often as possible. To read more, see the [Azure Cosmos DB documentation](/azure/cosmos-db/nosql/how-to-dotnet-read-item). + +In the previous section, we saw EF identifying and extracting partition key comparisons from the `Where` clause for more efficient querying, restricting processing only to the relevant partitions. It's possible to go a step further, and provide the `id` property in the query as well. Let's examine the following query: + +```c# +var session = await context.Sessions.SingleAsync( + e => e.Id == someId + && e.TenantId == tenantId + && e.UserId == userId + && e.SessionId == sessionId); +``` + +In this query, a value for the `Id` property is provided (which is mapped to the Azure Cosmos DB `id` property), as well as values for all the partition key properties. Furthermore, there are no additional components to the query. When all these conditions are met, EF is able to execute the query as a point read: + +```console +Executed ReadItem (46 ms, 1 RU) ActivityId='d7391311-2266-4811-ae2d-535904c42c43', Container='test', Id='9', Partition='["Microsoft","99a410d7-e467-4cc5-92de-148f3fc53f4c",10.0]' +``` + +Note the `ReadItem`, which indicates that the query was executed as an efficient point read - no SQL query is involved. + +Note that as with partition key extraction, significant improvements have been made to this mechanism in EF 9.0; older versions do not reliably detect and use point reads. + +## Pagination + +> [!NOTE] +> This feature was introduced in EF Core 9.0 and is still experimental. Please let us know how it works for you and if you have any feedback. + +Pagination refers to retrieving results in pages, rather than all at once; this is typically done for large resultsets, where a user interface is displayed, allowing users to navigate through pages of the results. + +A common way to implement pagination with databases is to use the `Skip` and `Take` LINQ operators (`OFFSET` and `LIMIT` in SQL). Given a page size of 10 results, the third page can be fetched with EF Core as follows: + +```csharp +var position = 20; +var nextPage = await context.Session + .OrderBy(s => s.Id) + .Skip(position) + .Take(10) + .ToListAsync(); +``` + +Unfortunately, this technique is quite inefficient and can considerably increase querying costs. Azure Cosmos DB provides a special mechanism for paginating through the result of a query, via the use of _continuation tokens_: + +```csharp +CosmosPage firstPage = await context.Sessions + .OrderBy(s => s.Id) + .ToPageAsync(pageSize: 10, continuationToken: null); + +string continuationToken = firstPage.ContinuationToken; +foreach (var session in firstPage.Values) +{ + // Display/send the sessions to the user +} +``` + +Rather than terminating the LINQ query with `ToListAsync` or similar, we use the `ToPageAsync` method, instructing it to get at most 10 items in every page (note that there may be fewer items in the database). Since this is our first query, we'd like to get results from the beginning, and pass `null` as the continuation token. `ToPageAsync` returns a `CosmosPage`, which exposes a continuation token and the values in the page (up to 10 items). Your program will typically send those values to the client, along with the continuation token; this will allow resuming the query later and fetching more results. + +Let's assume the user now clicks on the "Next" button in their UI, asking for the next 10 items. You can then execute the query as follows: + +```csharp +CosmosPage nextPage = await context.Sessions.OrderBy(s => s.Id).ToPageAsync(10, continuationToken); +string continuationToken = nextPage.ContinuationToken; +foreach (var session in nextPage.Values) +{ + // Display/send the sessions to the user +} +``` + +We execute the same query, but this time we pass in the continuation token received from the first execution; this instructs the query engine to continue the query where it left off, and fetch the next 10 items. Once we fetch the last page and there are no more results, the continuation token will be `null`, and the "Next" button can be grayed out. This method of paginating is extremely efficient and cost-effective compared to using `Skip` and `Take`. + +To learn more about pagination in Azure Cosmos DB, [see this page](/azure/cosmos-db/nosql/query/pagination). + +> [!NOTE] +> Azure Cosmos DB does not support backwards pagination, and does not provide a count of the total pages or items. +> +> `ToPageAsync` is currently annotated as experimental, since it may be replaced with a more generic EF pagination API that isn't Azure Cosmos DB specific. Although using the current API will generate a compilation warning (`EF9102`), doing so should be safe - future changes may require minor tweaks in the API shape. + +## `FindAsync` + +[`FindAsync`](xref:core/change-tracking/entity-entries#find-and-findasync) is a useful API for getting an entity by its primary key, and avoiding a database roundtrip when the entity has already been loaded and is tracked by the context. + +Developers familiar with relational databases are used to the primary key of an entity type consisting e.g. of an `Id` property. When using the EF Azure Cosmos DB provider, the primary key contains the partition key properties in addition to the property mapped to the JSON `id` property; this is the case since Azure Cosmos DB allows different partitions to contain documents with the same JSON `id` property, and so only the combined `id` and partition key uniquely identify a single document in a container: + +```csharp +public class Session +{ + public Guid Id { get; set; } + public string PartitionKey { get; set; } + ... +} + +var mySession = await context.FindAsync(id, pkey); +``` + +If you have a hierarchical partition key, you must pass all partition key values to `FindAsync`, in the order in which they were configured. + +> [!NOTE] +> Use `FindAsync` only when the entity might already be tracked by your context, and you want to avoid the database roundtrip. +> Otherwise, simply use `SingleAsync` - there is no performance difference between the two when the entity needs to be loaded from the database. + +## SQL queries + +Queries can also be written [directly in SQL](xref:core/querying/sql-queries). For example: + +```csharp +var rating = 3; +_ = await context.Blogs + .FromSql($"SELECT VALUE c FROM root c WHERE c.Rating > {rating}") + .ToListAsync(); +``` + +This query results in the following query execution: + +```sql +SELECT VALUE s +FROM ( + SELECT VALUE c FROM root c WHERE c.Angle1 <= @p0 +) s +``` + +Note that `FromSql` was introduced in EF 9.0. In previous versions, `FromSqlRaw` can be used instead, although note that that method is vulnerable to SQL injection attacks. + +For more information on SQL querying, see the [relational documentation on SQL queries](xref:core/querying/sql-queries); most of that content is relevant for the Azure Cosmos DB provider as well. + +## Function mappings + +This section shows which .NET methods and members are translated into which SQL functions when querying with the Azure Cosmos DB provider. + +### Date and time functions + +.NET | SQL | Added in +------------------------------------------ | --------------------------------------------------------------------------------- | -------- +DateTime.UtcNow | [GetCurrentDateTime()](/azure/cosmos-db/nosql/query/getcurrentdatetime) +DateTimeOffset.UtcNow | [GetCurrentDateTime()](/azure/cosmos-db/nosql/query/getcurrentdatetime) +dateTime.Year1 | [DateTimePart("yyyy", dateTime)](/azure/cosmos-db/nosql/query/datetimepart) | EF 9 +dateTimeOffset.Year1 | [DateTimePart("yyyy", dateTimeOffset)](/azure/cosmos-db/nosql/query/datetimepart) | EF 9 +dateTime.AddYears(years)1 | [DateTimeAdd("yyyy", dateTime)](/azure/cosmos-db/nosql/query/datetimeadd) | EF 9 +dateTimeOffset.AddYears(years)1 | [DateTimeAdd("yyyy", dateTimeOffset)](/azure/cosmos-db/nosql/query/datetimeadd) | EF 9 + +1 The other component members are translated as well (Month, Day...). + +### Numeric functions + +.NET | SQL +-------------------------- | --------------------------------------------------- +double.DegreesToRadians(x) | [RADIANS(@x)](/azure/cosmos-db/nosql/query/radians) +double.RadiansToDegrees(x) | [DEGREES(@x)](/azure/cosmos-db/nosql/query/degrees) +EF.Functions.Random() | [RAND()](/azure/cosmos-db/nosql/query/rand) +Math.Abs(value) | [ABS(@value)](/azure/cosmos-db/nosql/query/abs) +Math.Acos(d) | [ACOS(@d)](/azure/cosmos-db/nosql/query/acos) +Math.Asin(d) | [ASIN(@d)](/azure/cosmos-db/nosql/query/asin) +Math.Atan(d) | [ATAN(@d)](/azure/cosmos-db/nosql/query/atan) +Math.Atan2(y, x) | [ATN2(@y, @x)](/azure/cosmos-db/nosql/query/atn2) +Math.Ceiling(d) | [CEILING(@d)](/azure/cosmos-db/nosql/query/ceiling) +Math.Cos(d) | [COS(@d)](/azure/cosmos-db/nosql/query/cos) +Math.Exp(d) | [EXP(@d)](/azure/cosmos-db/nosql/query/exp) +Math.Floor(d) | [FLOOR(@d)](/azure/cosmos-db/nosql/query/floor) +Math.Log(a, newBase) | [LOG(@a, @newBase)](/azure/cosmos-db/nosql/query/log) +Math.Log(d) | [LOG(@d)](/azure/cosmos-db/nosql/query/log) +Math.Log10(d) | [LOG10(@d)](/azure/cosmos-db/nosql/query/log10) +Math.Pow(x, y) | [POWER(@x, @y)](/azure/cosmos-db/nosql/query/power) +Math.Round(d) | [ROUND(@d)](/azure/cosmos-db/nosql/query/round) +Math.Sign(value) | [SIGN(@value)](/azure/cosmos-db/nosql/query/sign) +Math.Sin(a) | [SIN(@a)](/azure/cosmos-db/nosql/query/sin) +Math.Sqrt(d) | [SQRT(@d)](/azure/cosmos-db/nosql/query/sqrt) +Math.Tan(a) | [TAN(@a)](/azure/cosmos-db/nosql/query/atan) +Math.Truncate(d) | [TRUNC(@d)](/azure/cosmos-db/nosql/query/trunc) + +> [!TIP] +> In addition to the methods listed here, corresponding [generic math](/dotnet/standard/generics/math) implementations +> and [MathF](/dotnet/api/system.mathf) methods are also translated. For example, `Math.Sin`, `MathF.Sin`, `double.Sin`, +> and `float.Sin` all map to the `SIN` function in SQL. + +### String functions + +.NET | SQL | Added in +----------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -------- +Regex.IsMatch(input, pattern) | [RegexMatch(@pattern, @input)](/azure/cosmos-db/nosql/query/regexmatch) +Regex.IsMatch(input, pattern, options) | [RegexMatch(@input, @pattern, @options)](/azure/cosmos-db/nosql/query/regexmatch) +string.Concat(str0, str1) | @str0 + @str1 +string.Equals(a, b, StringComparison.Ordinal) | [STRINGEQUALS(@a, @b)](/azure/cosmos-db/nosql/query/stringequals) +string.Equals(a, b, StringComparison.OrdinalIgnoreCase) | [STRINGEQUALS(@a, @b, true)](/azure/cosmos-db/nosql/query/stringequals) +stringValue.Contains(value) | [CONTAINS(@stringValue, @value)](/azure/cosmos-db/nosql/query/contains) +stringValue.Contains(value, StringComparison.Ordinal) | [CONTAINS(@stringValue, @value, false)](/azure/cosmos-db/nosql/query/contains) | EF 9 +stringValue.Contains(value, StringComparison.OrdinalIgnoreCase) | [CONTAINS(@stringValue, @value, true)](/azure/cosmos-db/nosql/query/contains) | EF 9 +stringValue.EndsWith(value) | [ENDSWITH(@stringValue, @value)](/azure/cosmos-db/nosql/query/endswith) +stringValue.EndsWith(value, StringComparison.Ordinal) | [ENDSWITH(@stringValue, @value, false)](/azure/cosmos-db/nosql/query/endswith) | EF 9 +stringValue.EndsWith(value, StringComparison.OrdinalIgnoreCase) | [ENDSWITH(@stringValue, @value, true)](/azure/cosmos-db/nosql/query/endswith) | EF 9 +stringValue.Equals(value, StringComparison.Ordinal) | [STRINGEQUALS(@stringValue, @value)](/azure/cosmos-db/nosql/query/stringequals) +stringValue.Equals(value, StringComparison.OrdinalIgnoreCase) | [STRINGEQUALS(@stringValue, @value, true)](/azure/cosmos-db/nosql/query/stringequals) +stringValue.FirstOrDefault() | [LEFT(@stringValue, 1)](/azure/cosmos-db/nosql/query/left) +stringValue.IndexOf(value) | [INDEX_OF(@stringValue, @value)](/azure/cosmos-db/nosql/query/index-of) +stringValue.IndexOf(value, startIndex) | [INDEX_OF(@stringValue, @value, @startIndex)](/azure/cosmos-db/nosql/query/index-of) +stringValue.LastOrDefault() | [RIGHT(@stringValue, 1)](/azure/cosmos-db/nosql/query/right) +stringValue.Length | [LENGTH(@stringValue)](/azure/cosmos-db/nosql/query/length) +stringValue.Replace(oldValue, newValue) | [REPLACE(@stringValue, @oldValue, @newValue)](/azure/cosmos-db/nosql/query/replace) +stringValue.StartsWith(value) | [STARTSWITH(@stringValue, @value)](/azure/cosmos-db/nosql/query/startswith) +stringValue.StartsWith(value, StringComparison.Ordinal) | [STARTSWITH(@stringValue, @value, false)](/azure/cosmos-db/nosql/query/startswith) | EF 9 +stringValue.StartsWith(value, StringComparison.OrdinalIgnoreCase) | [STARTSWITH(@stringValue, @value, true)](/azure/cosmos-db/nosql/query/startswith) | EF 9 +stringValue.Substring(startIndex) | [SUBSTRING(@stringValue, @startIndex, LENGTH(@stringValue))](/azure/cosmos-db/nosql/query/substring) +stringValue.Substring(startIndex, length) | [SUBSTRING(@stringValue, @startIndex, @length)](/azure/cosmos-db/nosql/query/substring) +stringValue.ToLower() | [LOWER(@stringValue)](/azure/cosmos-db/nosql/query/lower) +stringValue.ToUpper() | [UPPER(@stringValue)](/azure/cosmos-db/nosql/query/upper) +stringValue.Trim() | [TRIM(@stringValue)](/azure/cosmos-db/nosql/query/trim) +stringValue.TrimEnd() | [RTRIM(@stringValue)](/azure/cosmos-db/nosql/query/rtrim) +stringValue.TrimStart() | [LTRIM(@stringValue)](/azure/cosmos-db/nosql/query/ltrim) + +### Vector and full-text search + +.NET | SQL | Added in +--------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ----- +EF.Functions.VectorDistance(vector1, vector2). | [VectorDistance(vector1, vector2)](/azure/cosmos-db/nosql/query/vectordistance) | EF 9 +EF.Functions.VectorDistance(vector1, vector2, bruteForce) | [VectorDistance(vector1, vector2, bruteForce)](/azure/cosmos-db/nosql/query/vectordistance) | EF 9 +EF.Functions.VectorDistance(vector1, vector2, bruteForce, distanceFunction) | [VectorDistance(vector1, vector2, bruteForce, distanceFunction)](/azure/cosmos-db/nosql/query/vectordistance) | EF 9 +EF.Functions.FullTextContains(property, keyword) | [FullTextContains(property, keyword)](/azure/cosmos-db/nosql/query/fulltextcontains) | EF 10 +EF.Functions.FullTextContainsAll(property, keyword1, keyword2) | [FullTextContainsAll(property, keyword1, keyword2)](/azure/cosmos-db/nosql/query/fulltextcontainsall) | EF 10 +EF.Functions.FullTextContainsAny(property, keyword1, keyword2) | [FullTextContainsAny(property, keyword1, keyword2)](/azure/cosmos-db/nosql/query/fulltextcontainsany) | EF 10 +EF.Functions.FullTextScore(property, keyword1, keyword2) | [FullTextScore(property, keyword1, keyword2)](/azure/cosmos-db/nosql/query/fulltextscore) | EF 10 +EF.Functions.Rrf(search1, search2) | [RRF(property, search1, search2)](/azure/cosmos-db/nosql/query/rrf). | EF 10 +EF.Functions.Rrf(new[] { search1, search2 }, weights) | [RRF(property, search1, search2, weights)](/azure/cosmos-db/nosql/query/rrf) | EF 10 + +For more information on vector search, see [the documentation](xref:core/providers/cosmos/vector-search). For more information on full-text search, see [the documentation](xref:core/providers/cosmos/full-text-search). + +### Miscellaneous functions + +.NET | SQL | Added in +--------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ----- +collection.Contains(item) | @item IN @collection +EF.Functions.CoalesceUndefined(x, y)1 | [x ?? y](/azure/cosmos-db/nosql/query/ternary-coalesce-operators#coalesce-operator) | EF 9 +EF.Functions.IsDefined(x) | [IS_DEFINED(x)](/azure/cosmos-db/nosql/query/is-defined) | EF 9 + +1 Note that `EF.Functions.CoalesceUndefined` coalesces `undefined`, not `null`. To coalesce `null`, use the regular C# `??` operator. diff --git a/entity-framework/core/providers/cosmos/vector-search.md b/entity-framework/core/providers/cosmos/vector-search.md new file mode 100644 index 0000000000..8fdc7924ef --- /dev/null +++ b/entity-framework/core/providers/cosmos/vector-search.md @@ -0,0 +1,64 @@ +--- +title: Vector Search - Azure Cosmos DB Provider - EF Core +description: Vector search with the Azure Cosmos DB EF Core Provider +author: roji +ms.date: 09/20/2024 +uid: core/providers/cosmos/vector-search +--- +# Vector search + +> [!NOTE] +> The below describes the vector search support in EF 10. EF 9 includes similar experimental support with slightly different method naming. + +Azure Cosmos DB now offers support for vector similarity search. Vector search is a fundamental part of some application types, including AI, semantic search and others. Azure Cosmos DB allows you to store vectors directly in your documents alongside the rest of your data, meaning you can perform all of your queries against a single database. This can considerably simplify your architecture and remove the need for an additional, dedicated vector database solution in your stack. To learn more about Azure Cosmos DB vector search, [see the documentation](/azure/cosmos-db/nosql/vector-search). + +Vector property can be configured inside `OnModelCreating`: + +```c# +public class Blog +{ + ... + + public float[] Vector { get; set; } +} + +public class BloggingContext +{ + ... + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(b => + { + b.Property(b => b.Vector).IsVectorProperty(DistanceFunction.Cosine, dimensions: 1536); + b.HasIndex(x => x.Vector).IsVectorIndex(VectorIndexType.Flat); + }); + } +} +``` + +At this point your model is configured. Insertion of vector data is done just like any other data type with EF: + +```c# +float[] vector = /* generate vector data from text, image, etc. */ +context.Add(new Blog { Vector = vector }); +await context.SaveChangesAsync(); +``` + +Finally, use the `EF.Functions.VectorDistance()` function in LINQ queries to perform vector similarity search: + +```c# +float[] anotherVector = /* generate vector data from text, image, etc. */ +var blogs = await context.Blogs + .OrderBy(s => EF.Functions.VectorDistance(s.Vector, anotherVector)) + .Take(5) + .ToListAsync(); +``` + +This will returns the top five Blogs, based on the similarity of their `Vector` property and the externally-provided `anotherVector` data. + +## Hybrid search + +Vector similarity search can be used with full-text search in the same query (i.e. hybrid search), by combining results of `VectorDistance` and `FullTextScore` functions using the [`RRF`](/azure/cosmos-db/nosql/query/rrf) (Reciprocal Rank Fusion) function. + +See [documentation](xref:core/providers/cosmos/full-text-search?#hybrid-search) to learn how to enable full-text search support in EF model and how to use hybrid search in queries. diff --git a/entity-framework/core/providers/in-memory/index.md b/entity-framework/core/providers/in-memory/index.md index 3409d71575..645798c692 100644 --- a/entity-framework/core/providers/in-memory/index.md +++ b/entity-framework/core/providers/in-memory/index.md @@ -1,7 +1,7 @@ --- title: In-memory Database Provider - EF Core description: Information on the Entity Framework Core in-memory database provider -author: ajcvickers +author: SamMonoRT ms.date: 02/11/2023 uid: core/providers/in-memory/index --- @@ -19,7 +19,7 @@ This database provider allows Entity Framework Core to be used with an in-memory Install the [Microsoft.EntityFrameworkCore.InMemory NuGet package](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.InMemory/). -### [.NET Core CLI](#tab/dotnet-core-cli) +### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet add package Microsoft.EntityFrameworkCore.InMemory diff --git a/entity-framework/core/providers/index.md b/entity-framework/core/providers/index.md index 01c9492a66..ab4f846b38 100644 --- a/entity-framework/core/providers/index.md +++ b/entity-framework/core/providers/index.md @@ -1,7 +1,7 @@ --- title: Database Providers - EF Core description: Information about specific supported Entity Framework Core providers and about providers in general -author: ajcvickers +author: SamMonoRT ms.date: 12/13/2022 uid: core/providers/index --- @@ -16,54 +16,58 @@ Entity Framework Core can access many different databases through plug-in librar > EF Core providers are built by a variety of sources. Not all providers are maintained as part of the Microsoft [Entity Framework Core Project](https://github.com/dotnet/efcore). When considering a provider, be sure to evaluate quality, licensing, support, etc. to ensure they meet your requirements. Also make sure you review each provider's documentation for detailed version compatibility information. > [!IMPORTANT] -> EF Core providers typically do not work across major versions. For example, a provider released for EF Core 7 will not work with EF Core 8. - -| NuGet Package | Supported database engines | Maintainer / Vendor | Notes / Requirements | For EF Core | Useful links | -|----------------------------------------------------------------------------------------------------------------------|---------------------------------------|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Microsoft.EntityFrameworkCore.SqlServer](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer) | Azure SQL and SQL Server 2012 onwards | [EF Core Project](https://github.com/dotnet/efcore/) (Microsoft) | | 6, 7, 8 | [docs](xref:core/providers/sql-server/index) | -| [Microsoft.EntityFrameworkCore.Sqlite](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite) | SQLite 3.7 onwards | [EF Core Project](https://github.com/dotnet/efcore/) (Microsoft) | | 6, 7, 8 | [docs](xref:core/providers/sqlite/index) | -| [Microsoft.EntityFrameworkCore.InMemory](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.InMemory) | EF Core in-memory database | [EF Core Project](https://github.com/dotnet/efcore/) (Microsoft) | [Limitations](xref:core/testing/testing-without-the-database#inmemory-provider) | 6, 7, 8 | [docs](xref:core/providers/in-memory/index) | -| [Microsoft.EntityFrameworkCore.Cosmos](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Cosmos) | Azure Cosmos DB SQL API | [EF Core Project](https://github.com/dotnet/efcore/) (Microsoft) | | 6, 7, 8 | [docs](xref:core/providers/cosmos/index) | -| [Npgsql.EntityFrameworkCore.PostgreSQL](https://www.nuget.org/packages/Npgsql.EntityFrameworkCore.PostgreSQL) | PostgreSQL | [Npgsql Development Team](https://github.com/npgsql) | | 6, 7, 8 | [docs](https://www.npgsql.org/efcore/index.html) | -| [Pomelo.EntityFrameworkCore.MySql](https://www.nuget.org/packages/Pomelo.EntityFrameworkCore.MySql) | MySQL, MariaDB | [Pomelo Foundation Project](https://github.com/PomeloFoundation) | | 6, 7, 8 | [readme](https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/blob/master/README.md) | -| [MySql.EntityFrameworkCore](https://www.nuget.org/packages/MySql.EntityFrameworkCore) | MySQL | [MySQL project](https://dev.mysql.com) (Oracle) | | 6, 7 | [docs](https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework-core.html) | -| [Oracle.EntityFrameworkCore](https://www.nuget.org/packages/Oracle.EntityFrameworkCore/) | Oracle DB 11.2 onwards | [Oracle](https://www.oracle.com/technetwork/topics/dotnet/) | | 6, 7 | [website](https://www.oracle.com/technetwork/topics/dotnet/) | -| [MongoDB.EntityFrameworkCore](https://www.nuget.org/packages/MongoDB.EntityFrameworkCore/) | MongoDB | [MongoDB](https://www.mongodb.com/) | Currently in preview | 7 | [docs](https://www.mongodb.com/docs/entity-framework/current/) | -| [Devart.Data.MySql.EFCore](https://www.nuget.org/packages/Devart.Data.MySql.EFCore/) | MySQL 5 onwards | [DevArt](https://www.devart.com/dotconnect/mysql/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/mysql/GettingStarted.html) | -| [Devart.Data.Oracle.EFCore](https://www.nuget.org/packages/Devart.Data.Oracle.EFCore/) | Oracle DB 9.2.0.4 onwards | [DevArt](https://www.devart.com/dotconnect/oracle/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/oracle/GettingStarted.html) | -| [Devart.Data.PostgreSql.EFCore](https://www.nuget.org/packages/Devart.Data.PostgreSql.EFCore/) | PostgreSQL 8.0 onwards | [DevArt](https://www.devart.com/dotconnect/postgresql/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/postgresql/GettingStarted.html) | -| [Devart.Data.SQLite.EFCore](https://www.nuget.org/packages/Devart.Data.SQLite.EFCore/) | SQLite 3 onwards | [DevArt](https://www.devart.com/dotconnect/sqlite/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/sqlite/GettingStarted.html) | -| [Devart.Data.DB2.EFCore](https://www.nuget.org/packages/Devart.Data.DB2.EFCore) | DB2 | [DevArt](https://www.devart.com/dotconnect/db2/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/db2/GettingStarted.html) | -| [Devart.Data.Bigcommerce.EFCore](https://www.nuget.org/packages/Devart.Data.Bigcommerce.EFCore) | BigCommerce | [DevArt](https://www.devart.com/dotconnect/bigcommerce/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/bigcommerce/GettingStarted.html) | -| [Devart.Data.Dynamics.EFCore](https://www.nuget.org/packages/Devart.Data.Dynamics.EFCore) | Microsoft Dynamics 365 | [DevArt](https://www.devart.com/dotconnect/dynamicscrm/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/dynamics/GettingStarted.html) | -| [Devart.Data.FreshBooks.EFCore](https://www.nuget.org/packages/Devart.Data.FreshBooks.EFCore) | FreshBooks | [DevArt](https://www.devart.com/dotconnect/freshbooks/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/freshbooks/GettingStarted.html) | -| [Devart.Data.Magento.EFCore](https://www.nuget.org/packages/Devart.Data.Magento.EFCore) | Magento | [DevArt](https://www.devart.com/dotconnect/magento/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/magento/GettingStarted.html) | -| [Devart.Data.MailChimp.EFCore](https://www.nuget.org/packages/Devart.Data.MailChimp.EFCore) | Mailchimp | [DevArt](https://www.devart.com/dotconnect/mailchimp/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/mailchimp/GettingStarted.html) | -| [Devart.Data.QuickBooks.EFCore](https://www.nuget.org/packages/Devart.Data.QuickBooks.EFCore) | QuickBooks | [DevArt](https://www.devart.com/dotconnect/quickbooks/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/quickbooks/GettingStarted.html) | -| [Devart.Data.Salesforce.EFCore](https://www.nuget.org/packages/Devart.Data.Salesforce.EFCore) | Salesforce | [DevArt](https://www.devart.com/dotconnect/salesforce/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/salesforce/GettingStarted.html) | -| [Devart.Data.ExactTarget.EFCore](https://www.nuget.org/packages/Devart.Data.ExactTarget.EFCore) | Salesforce MC (ExactTarget) | [DevArt](https://www.devart.com/dotconnect/exacttarget/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/salesforcemc/GettingStarted.html) | -| [Devart.Data.Sugar.EFCore](https://www.nuget.org/packages/Devart.Data.Sugar.EFCore) | SugarCRM | [DevArt](https://www.devart.com/dotconnect/sugarcrm/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/sugarcrm/GettingStarted.html) | -| [Devart.Data.Zoho.EFCore](https://www.nuget.org/packages/Devart.Data.Zoho.EFCore) | Zoho CRM | [DevArt](https://www.devart.com/dotconnect/zohocrm/) | Paid | 6, 7, 8 | [docs](https://docs.devart.com/dotconnect/zohocrm/GettingStarted.html) | -| [MASES.EntityFrameworkCore.KNet](https://www.nuget.org/packages/MASES.EntityFrameworkCore.KNet/) | Apache Kafka | [MASES Group](https://masesgroup.com) | Trial, Subscription | 6, 7, 8 | [docs](https://kefcore.masesgroup.com/) | -| [InterBase](https://www.nuget.org/packages/InterBaseSql.EntityFrameworkCore.InterBase/) | InterBase | [InterBase](https://interbase.com/) | | 6 | [docs](https://docwiki.embarcadero.com/InterBase/2020/en/Entity_Framework) | -| [FirebirdSql.EntityFrameworkCore.Firebird](https://www.nuget.org/packages/FirebirdSql.EntityFrameworkCore.Firebird/) | Firebird 3.0 onwards | [Jiří Činčura](https://github.com/cincuranet) | | 7 | [docs](https://github.com/FirebirdSQL/NETProvider/blob/master/docs/entity-framework-core.md) | -| [IBM.EntityFrameworkCore](https://www.nuget.org/packages/IBM.EntityFrameworkCore) | Db2, Informix | [IBM](https://ibm.com) | Paid, Windows | 6 | [getting started](https://community.ibm.com/community/user/hybriddatamanagement/blogs/michelle-betbadal1/2020/04/29/getting-started-with-ibm-net-provider-for-net-core) | -| [IBM.EntityFrameworkCore-lnx](https://www.nuget.org/packages/IBM.EntityFrameworkCore-lnx) | Db2, Informix | [IBM](https://ibm.com) | Paid, Linux | 6 | [getting started](https://community.ibm.com/community/user/hybriddatamanagement/blogs/michelle-betbadal1/2020/04/29/getting-started-with-ibm-net-provider-for-net-core) | -| [IBM.EntityFrameworkCore-osx](https://www.nuget.org/packages/IBM.EntityFrameworkCore-osx) | Db2, Informix | [IBM](https://ibm.com) | Paid, macOS | 6 | [getting started](https://community.ibm.com/community/user/hybriddatamanagement/blogs/michelle-betbadal1/2020/04/29/getting-started-with-ibm-net-provider-for-net-core) | -| [EntityFrameworkCore.Jet](https://www.nuget.org/packages/EntityFrameworkCore.Jet/) | Microsoft Access files | [CirrusRedOrg](https://github.com/CirrusRedOrg) | Windows | 6, 7, 8 (Preview) | [readme](https://github.com/CirrusRedOrg/EntityFrameworkCore.Jet/blob/master/docs/README.md) | -| [Google.Cloud.EntityFrameworkCore.Spanner](https://www.nuget.org/packages/Google.Cloud.EntityFrameworkCore.Spanner) | Google Cloud Spanner | [Cloud Spanner Ecosystem](https://github.com/cloudspannerecosystem) | Currently in preview | 6 | [tutorial](https://medium.com/google-cloud/google-cloud-spanner-with-entity-framework-core-2ddd16d2b252) | -| [Teradata.EntityFrameworkCore](https://www.nuget.org/packages/Teradata.EntityFrameworkCore/) | Teradata Database 16.10 onwards | [Teradata](https://downloads.teradata.com/download/connectivity/net-data-provider-for-teradata) | | 3 | [website](https://www.nuget.org/packages/Teradata.EntityFrameworkCore/) | -| [FileContextCore](https://www.nuget.org/packages/FileContextCore/) | Stores data in files | [Morris Janatzek](https://github.com/morrisjdev) | For development purposes | 3 | [readme](https://github.com/morrisjdev/FileContextCore/blob/master/README.md) | -| [FileBaseContext](https://www.nuget.org/packages/FileBaseContext/) | Store tables in files | [k.D.g](https://github.com/dualbios) | For development purposes | 7, 8 | [readme](https://github.com/dualbios/FileBaseContext/blob/main/README.md) | -| [EntityFrameworkCore.SqlServerCompact35](https://www.nuget.org/packages/EntityFrameworkCore.SqlServerCompact35) | SQL Server Compact 3.5 | [Erik Ejlskov Jensen](https://github.com/ErikEJ/) | .NET Framework | 2 | [wiki](https://github.com/ErikEJ/EntityFramework.SqlServerCompact/wiki/Using-EF-Core-with-SQL-Server-Compact-in-Traditional-.NET-Applications) | -| [EntityFrameworkCore.SqlServerCompact40](https://www.nuget.org/packages/EntityFrameworkCore.SqlServerCompact40) | SQL Server Compact 4.0 | [Erik Ejlskov Jensen](https://github.com/ErikEJ/) | .NET Framework | 2 | [wiki](https://github.com/ErikEJ/EntityFramework.SqlServerCompact/wiki/Using-EF-Core-with-SQL-Server-Compact-in-Traditional-.NET-Applications) | -| [EntityFrameworkCore.OpenEdge](https://www.nuget.org/packages/EntityFrameworkCore.OpenEdge/) | Progress OpenEdge | [Alex Wiese](https://github.com/alexwiese) | | 2 | [readme](https://github.com/alexwiese/EntityFrameworkCore.OpenEdge/blob/master/README.md) | +> EF Core providers typically do not work across major versions. For example, a provider released for EF Core 8 will not work with EF Core 9. + +| NuGet Package | Supported database engines | Maintainer / Vendor | Notes / Requirements | For EF Core | Useful links | +|----------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| [Microsoft.EntityFrameworkCore.SqlServer](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer) | Azure SQL, SQL Server 2012 onwards, Azure Synapse Analytics | [EF Core Project](https://github.com/dotnet/efcore/) (Microsoft) | | 8, 9 | [docs](xref:core/providers/sql-server/index) | +| [Microsoft.EntityFrameworkCore.Sqlite](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite) | SQLite 3.46.1 onwards | [EF Core Project](https://github.com/dotnet/efcore/) (Microsoft) | | 8, 9 | [docs](xref:core/providers/sqlite/index) | +| [Microsoft.EntityFrameworkCore.InMemory](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.InMemory) | EF Core in-memory database | [EF Core Project](https://github.com/dotnet/efcore/) (Microsoft) | [Limitations](xref:core/testing/testing-without-the-database#inmemory-provider) | 8, 9 | [docs](xref:core/providers/in-memory/index) | +| [Microsoft.EntityFrameworkCore.Cosmos](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Cosmos) | Azure Cosmos DB SQL API | [EF Core Project](https://github.com/dotnet/efcore/) (Microsoft) | | 8, 9 | [docs](xref:core/providers/cosmos/index) | +| [Npgsql.EntityFrameworkCore.PostgreSQL](https://www.nuget.org/packages/Npgsql.EntityFrameworkCore.PostgreSQL) | PostgreSQL | [Npgsql Development Team](https://github.com/npgsql) | | 8, 9 | [docs](https://www.npgsql.org/efcore/index.html) | +| [Pomelo.EntityFrameworkCore.MySql](https://www.nuget.org/packages/Pomelo.EntityFrameworkCore.MySql) | MySQL, MariaDB | [Pomelo Foundation Project](https://github.com/PomeloFoundation) | | 8, 9 | [readme](https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/blob/master/README.md) | +| [MySql.EntityFrameworkCore](https://www.nuget.org/packages/MySql.EntityFrameworkCore) | MySQL | [MySQL project](https://dev.mysql.com) (Oracle) | | 8, 9 | [docs](https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework-core.html) | +| [Oracle.EntityFrameworkCore](https://www.nuget.org/packages/Oracle.EntityFrameworkCore/) | Oracle DB 11.2 onwards | [Oracle](https://www.oracle.com/technetwork/topics/dotnet/) | | 8, 9 | [website](https://www.oracle.com/technetwork/topics/dotnet/) | +| [MongoDB.EntityFrameworkCore](https://www.nuget.org/packages/MongoDB.EntityFrameworkCore/) | MongoDB | [MongoDB](https://www.mongodb.com/) | | 8 | [docs](https://www.mongodb.com/docs/entity-framework/current/) | +| [Couchbase.EntityFrameworkCore](https://www.nuget.org/packages/Couchbase.EntityFrameworkCore) | Couchbase | [Couchbase](https://github.com/couchbaselabs/couchbase-efcore-provider) | | 8, 9 | [docs](https://docs.couchbase.com/efcore-provider/current/start-using-efcore-provider.html) | +| [Devart.Data.MySql.EFCore](https://www.nuget.org/packages/Devart.Data.MySql.EFCore/) | MySQL 5 onwards | [DevArt](https://www.devart.com/dotconnect/mysql/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/mysql/GettingStarted.html) | +| [Devart.Data.Oracle.EFCore](https://www.nuget.org/packages/Devart.Data.Oracle.EFCore/) | Oracle DB 9.2.0.4 onwards | [DevArt](https://www.devart.com/dotconnect/oracle/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/oracle/GettingStarted.html) | +| [Devart.Data.PostgreSql.EFCore](https://www.nuget.org/packages/Devart.Data.PostgreSql.EFCore/) | PostgreSQL 8.0 onwards | [DevArt](https://www.devart.com/dotconnect/postgresql/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/postgresql/GettingStarted.html) | +| [Devart.Data.SQLite.EFCore](https://www.nuget.org/packages/Devart.Data.SQLite.EFCore/) | SQLite 3 onwards | [DevArt](https://www.devart.com/dotconnect/sqlite/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/sqlite/GettingStarted.html) | +| [Devart.Data.DB2.EFCore](https://www.nuget.org/packages/Devart.Data.DB2.EFCore) | DB2 | [DevArt](https://www.devart.com/dotconnect/db2/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/db2/GettingStarted.html) | +| [Devart.Data.Bigcommerce.EFCore](https://www.nuget.org/packages/Devart.Data.Bigcommerce.EFCore) | BigCommerce | [DevArt](https://www.devart.com/dotconnect/bigcommerce/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/bigcommerce/GettingStarted.html) | +| [Devart.Data.Dynamics.EFCore](https://www.nuget.org/packages/Devart.Data.Dynamics.EFCore) | Microsoft Dynamics 365 | [DevArt](https://www.devart.com/dotconnect/dynamicscrm/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/dynamics/GettingStarted.html) | +| [Devart.Data.FreshBooks.EFCore](https://www.nuget.org/packages/Devart.Data.FreshBooks.EFCore) | FreshBooks | [DevArt](https://www.devart.com/dotconnect/freshbooks/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/freshbooks/GettingStarted.html) | +| [Devart.Data.Magento.EFCore](https://www.nuget.org/packages/Devart.Data.Magento.EFCore) | Magento | [DevArt](https://www.devart.com/dotconnect/magento/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/magento/GettingStarted.html) | +| [Devart.Data.MailChimp.EFCore](https://www.nuget.org/packages/Devart.Data.MailChimp.EFCore) | Mailchimp | [DevArt](https://www.devart.com/dotconnect/mailchimp/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/mailchimp/GettingStarted.html) | +| [Devart.Data.QuickBooks.EFCore](https://www.nuget.org/packages/Devart.Data.QuickBooks.EFCore) | QuickBooks | [DevArt](https://www.devart.com/dotconnect/quickbooks/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/quickbooks/GettingStarted.html) | +| [Devart.Data.Salesforce.EFCore](https://www.nuget.org/packages/Devart.Data.Salesforce.EFCore) | Salesforce | [DevArt](https://www.devart.com/dotconnect/salesforce/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/salesforce/GettingStarted.html) | +| [Devart.Data.ExactTarget.EFCore](https://www.nuget.org/packages/Devart.Data.ExactTarget.EFCore) | Salesforce MC (ExactTarget) | [DevArt](https://www.devart.com/dotconnect/exacttarget/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/salesforcemc/GettingStarted.html) | +| [Devart.Data.Sugar.EFCore](https://www.nuget.org/packages/Devart.Data.Sugar.EFCore) | SugarCRM | [DevArt](https://www.devart.com/dotconnect/sugarcrm/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/sugarcrm/GettingStarted.html) | +| [Devart.Data.Zoho.EFCore](https://www.nuget.org/packages/Devart.Data.Zoho.EFCore) | Zoho CRM | [DevArt](https://www.devart.com/dotconnect/zohocrm/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/zohocrm/GettingStarted.html) | +| [Devart.Data.ZohoBooks.EFCore](https://www.nuget.org/packages/Devart.Data.ZohoBooks.EFCore) | Zoho Books | [DevArt](https://www.devart.com/dotconnect/zohobooks/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/zohobooks/GettingStarted.html) | +| [Devart.Data.ZohoDesk.EFCore](https://www.nuget.org/packages/Devart.Data.ZohoDesk.EFCore) | Zoho Desk | [DevArt](https://www.devart.com/dotconnect/zohodesk/) | Paid | 8, 9 | [docs](https://docs.devart.com/dotconnect/zohodesk/GettingStarted.html) | +| [MASES.EntityFrameworkCore.KNet](https://www.nuget.org/packages/MASES.EntityFrameworkCore.KNet/) | Apache Kafka | [MASES Group](https://masesgroup.com) | Trial, Subscription | 8 | [docs](https://kefcore.masesgroup.com/) | +| [InterBase](https://www.nuget.org/packages/InterBaseSql.EntityFrameworkCore.InterBase/) | InterBase | [InterBase](https://interbase.com/) | | 8 | [docs](https://docwiki.embarcadero.com/InterBase/2020/en/Entity_Framework) | +| [FirebirdSql.EntityFrameworkCore.Firebird](https://www.nuget.org/packages/FirebirdSql.EntityFrameworkCore.Firebird/) | Firebird 3.0 onwards | [Jiří Činčura](https://github.com/cincuranet) | | 8 | [docs](https://github.com/FirebirdSQL/NETProvider/blob/master/docs/entity-framework-core.md) | +| [IBM.EntityFrameworkCore](https://www.nuget.org/packages/IBM.EntityFrameworkCore) | Db2, Informix | [IBM](https://ibm.com) | Paid, Windows | 8 | [getting started](https://community.ibm.com/community/user/hybriddatamanagement/blogs/michelle-betbadal1/2020/04/29/getting-started-with-ibm-net-provider-for-net-core) | +| [IBM.EntityFrameworkCore-lnx](https://www.nuget.org/packages/IBM.EntityFrameworkCore-lnx) | Db2, Informix | [IBM](https://ibm.com) | Paid, Linux | 8 | [getting started](https://community.ibm.com/community/user/hybriddatamanagement/blogs/michelle-betbadal1/2020/04/29/getting-started-with-ibm-net-provider-for-net-core) | +| [IBM.EntityFrameworkCore-osx](https://www.nuget.org/packages/IBM.EntityFrameworkCore-osx) | Db2, Informix | [IBM](https://ibm.com) | Paid, macOS | 8 | [getting started](https://community.ibm.com/community/user/hybriddatamanagement/blogs/michelle-betbadal1/2020/04/29/getting-started-with-ibm-net-provider-for-net-core) | +| [EntityFrameworkCore.Jet](https://www.nuget.org/packages/EntityFrameworkCore.Jet/) | Microsoft Access files | [CirrusRedOrg](https://github.com/CirrusRedOrg) | Windows | 8, 9 | [readme](https://github.com/CirrusRedOrg/EntityFrameworkCore.Jet/blob/master/docs/README.md) | +| [Google.Cloud.EntityFrameworkCore.Spanner](https://www.nuget.org/packages/Google.Cloud.EntityFrameworkCore.Spanner) | Google Cloud Spanner | [Cloud Spanner Ecosystem](https://github.com/cloudspannerecosystem) | | 8 | [tutorial](https://medium.com/google-cloud/google-cloud-spanner-with-entity-framework-core-2ddd16d2b252) | +| [Teradata.EntityFrameworkCore](https://www.nuget.org/packages/Teradata.EntityFrameworkCore/) | Teradata Database 16.10 onwards | [Teradata](https://downloads.teradata.com/download/connectivity/net-data-provider-for-teradata) | | 3 | [website](https://www.nuget.org/packages/Teradata.EntityFrameworkCore/) | +| [FileContextCore](https://www.nuget.org/packages/FileContextCore/) | Stores data in files | [Morris Janatzek](https://github.com/morrisjdev) | For development purposes | 3 | [readme](https://github.com/morrisjdev/FileContextCore/blob/master/README.md) | +| [FileBaseContext](https://www.nuget.org/packages/FileBaseContext/) | Store tables in files | [k.D.g](https://github.com/dualbios) | For development purposes | 8, 9 | [readme](https://github.com/dualbios/FileBaseContext/blob/main/README.md) | +| [EntityFrameworkCore.SqlServerCompact35](https://www.nuget.org/packages/EntityFrameworkCore.SqlServerCompact35) | SQL Server Compact 3.5 | [Erik Ejlskov Jensen](https://github.com/ErikEJ/) | .NET Framework | 2 | [wiki](https://github.com/ErikEJ/EntityFramework.SqlServerCompact/wiki/Using-EF-Core-with-SQL-Server-Compact-in-Traditional-.NET-Applications) | +| [EntityFrameworkCore.SqlServerCompact40](https://www.nuget.org/packages/EntityFrameworkCore.SqlServerCompact40) | SQL Server Compact 4.0 | [Erik Ejlskov Jensen](https://github.com/ErikEJ/) | .NET Framework | 2 | [wiki](https://github.com/ErikEJ/EntityFramework.SqlServerCompact/wiki/Using-EF-Core-with-SQL-Server-Compact-in-Traditional-.NET-Applications) | +| [EntityFrameworkCore.OpenEdge](https://www.nuget.org/packages/EntityFrameworkCore.OpenEdge/) | Progress OpenEdge | [Alex Wiese](https://github.com/alexwiese) | | 2 | [readme](https://github.com/alexwiese/EntityFrameworkCore.OpenEdge/blob/master/README.md) | +| [EFCore.Snowflake](https://www.nuget.org/packages/EFCore.Snowflake/) | Snowflake | [Krzysztof Sielaff](https://github.com/Sielnix) | | 8 | [readme](https://github.com/Sielnix/EFCore.Snowflake/blob/main/README.md) | ## Adding a database provider to your application Most database providers for EF Core are distributed as NuGet packages, and can be installed as follows: -## [.NET Core CLI](#tab/dotnet-core-cli) +## [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet add package provider_package_name @@ -82,7 +86,7 @@ For example, the following line configures the SQL Server provider with the pass ```csharp optionsBuilder.UseSqlServer( - "Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"); + @"Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"); ``` Database providers can extend EF Core to enable functionality unique to specific databases. Some concepts are common to most databases, and are included in the primary EF Core components. Such concepts include expressing queries in LINQ, transactions, and tracking changes to objects once they are loaded from the database. diff --git a/entity-framework/core/providers/provider-log.md b/entity-framework/core/providers/provider-log.md index c432ed39ef..c81cda4ada 100644 --- a/entity-framework/core/providers/provider-log.md +++ b/entity-framework/core/providers/provider-log.md @@ -1,7 +1,7 @@ --- title: Log of provider-impacting changes - EF Core description: A log of changes in Entity Framework Core which impact providers -author: ajcvickers +author: SamMonoRT ms.date: 08/08/2018 uid: core/providers/provider-log --- diff --git a/entity-framework/core/providers/sql-server/azure-sql-database.md b/entity-framework/core/providers/sql-server/azure-sql-database.md deleted file mode 100644 index ce8e7c2536..0000000000 --- a/entity-framework/core/providers/sql-server/azure-sql-database.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Microsoft SQL Server Database Provider - Azure SQL Database Options - EF Core -description: How to specify the service tier and performance level for Azure SQL Database with the SQL Server Entity Framework Core Database Provider -author: AndriySvyryd -ms.date: 11/05/2019 -uid: core/providers/sql-server/azure-sql-database ---- -# Specifying Azure SQL Database Options - -Azure SQL Database provides [a variety of pricing options](https://azure.microsoft.com/pricing/details/sql-database/single/) that are usually configured through the Azure Portal. However if you are managing the schema using [EF Core migrations](xref:core/managing-schemas/migrations/index) you can specify the desired options in the model itself. - -You can specify the service tier of the database (EDITION) using [HasServiceTier](/dotnet/api/Microsoft.EntityFrameworkCore.SqlServerModelBuilderExtensions.HasServiceTier): - -[!code-csharp[HasServiceTier](../../../../samples/core/SqlServer/AzureDatabase/AzureSqlContext.cs?name=HasServiceTier)] - -You can specify the maximum size of the database using [HasDatabaseMaxSize](/dotnet/api/Microsoft.EntityFrameworkCore.SqlServerModelBuilderExtensions.HasDatabaseMaxSize): - -[!code-csharp[HasDatabaseMaxSize](../../../../samples/core/SqlServer/AzureDatabase/AzureSqlContext.cs?name=HasDatabaseMaxSize)] - -You can specify the performance level of the database (SERVICE_OBJECTIVE) using [HasPerformanceLevel](/dotnet/api/Microsoft.EntityFrameworkCore.SqlServerModelBuilderExtensions.HasPerformanceLevel): - -[!code-csharp[HasPerformanceLevel](../../../../samples/core/SqlServer/AzureDatabase/AzureSqlContext.cs?name=HasPerformanceLevel)] - -Use [HasPerformanceLevelSql](/dotnet/api/Microsoft.EntityFrameworkCore.SqlServerModelBuilderExtensions.HasPerformanceLevelSql) to configure the elastic pool, since the value is not a string literal: - -[!code-csharp[HasPerformanceLevel](../../../../samples/core/SqlServer/AzureDatabase/AzureSqlContext.cs?name=HasPerformanceLevelSql)] - ->[!TIP] -> You can find all the supported values in the [ALTER DATABASE documentation](/sql/t-sql/statements/alter-database-transact-sql?view=azuresqldb-current&preserve-view=true). diff --git a/entity-framework/core/providers/sql-server/columns.md b/entity-framework/core/providers/sql-server/columns.md index 8ecfc28d41..b04949855c 100644 --- a/entity-framework/core/providers/sql-server/columns.md +++ b/entity-framework/core/providers/sql-server/columns.md @@ -11,11 +11,7 @@ This page details column configuration options that are specific to the SQL Serv ## Unicode and UTF-8 -SQL Server 2019 introduced [introduced UTF-8](/sql/relational-databases/collations/collation-and-unicode-support#utf8) support, which allows storing UTF-8 data in `char` and `varchar` columns by configuring them with special UTF-8 collations. EF Core 7.0 introduced full support for mapping to UTF-8 columns, and it's possible to use them in previous EF versions as well, with some extra steps. - -### [EF Core 7.0](#tab/ef-core-7) - -EF Core 7.0 includes first-class support for UTF-8 columns. To configure them, simply configure the column's type to `char` or `varchar`, specify a UTF-8 collation (ending with `_UTF8`), and specify that the column should be Unicode: +SQL Server 2019 introduced [introduced UTF-8](/sql/relational-databases/collations/collation-and-unicode-support#utf8) support, which allows storing UTF-8 data in `char` and `varchar` columns by configuring them with special UTF-8 collations. You can use UTF-8 columns with EF simply by configuring the column's type to `char` or `varchar`, specify a UTF-8 collation (ending with `_UTF8`), and specifying that the column should be Unicode: ```c# protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -28,25 +24,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) } ``` -#### [Older versions](#tab/older-versions) - -In EF Core versions prior to 7.0, UTF-8 columns do not work out-of-the-box with EF Core's SQL Server provider. To map a string property to a `varchar(x)` column, the Fluent or Data Annotation API is typically used to disable Unicode ([see these docs](xref:core/modeling/entity-properties#unicode)). While this causes the correct column type to be created in the database, it also makes EF Core send database parameters in a way which is incompatible with UTF-8 data: `DbType.AnsiString` is used (signifying non-Unicode data), but `DbType.String` is needed to properly send Unicode data. - -As a result, you'll have to configure the EF property as a regular `nvarchar` column, ensuring that parameters are sent with the correct `DbType`: - -```c# -protected override void OnModelCreating(ModelBuilder modelBuilder) -{ - modelBuilder.Entity() - .Property(b => b.Name) - .UseCollation("LATIN1_GENERAL_100_CI_AS_SC_UTF8"); -} -``` - -Once you've created the migration for the column, edit it and manually change the column's type from `nvarchar` to `varchar`. - -*** - ## Sparse columns Sparse columns are ordinary columns that have an optimized storage for null values, reducing the space requirements for null values at the cost of more overhead to retrieve non-null values. diff --git a/entity-framework/core/providers/sql-server/functions.md b/entity-framework/core/providers/sql-server/functions.md index a9d96c564e..0bd0543b58 100644 --- a/entity-framework/core/providers/sql-server/functions.md +++ b/entity-framework/core/providers/sql-server/functions.md @@ -1,7 +1,7 @@ --- title: Function Mappings - Microsoft SQL Server Database Provider - EF Core description: Function Mappings of the Microsoft SQL Server database provider -author: bricelam +author: SamMonoRT ms.date: 7/26/2023 uid: core/providers/sql-server/functions --- @@ -13,25 +13,25 @@ This page shows which .NET members are translated into which SQL functions when .NET | SQL | Added in ----------------------------------------------------------------------- | -------------------------------- | -------- -EF.Functions.StandardDeviationSample(group.Select(x => x.Property)) | STDEV(Property) | EF Core 7.0 -EF.Functions.StandardDeviationPopulation(group.Select(x => x.Property)) | STDEVP(Property) | EF Core 7.0 -EF.Functions.VarianceSample(group.Select(x => x.Property)) | VAR(Property) | EF Core 7.0 -EF.Functions.VariancePopulation(group.Select(x => x.Property)) | VARP(Property) | EF Core 7.0 +EF.Functions.StandardDeviationSample(group.Select(x => x.Property)) | STDEV(Property) +EF.Functions.StandardDeviationPopulation(group.Select(x => x.Property)) | STDEVP(Property) +EF.Functions.VarianceSample(group.Select(x => x.Property)) | VAR(Property) +EF.Functions.VariancePopulation(group.Select(x => x.Property)) | VARP(Property) group.Average(x => x.Property) | AVG(Property) group.Count() | COUNT(*) group.LongCount() | COUNT_BIG(*) group.Max(x => x.Property) | MAX(Property) group.Min(x => x.Property) | MIN(Property) group.Sum(x => x.Property) | SUM(Property) -string.Concat(group.Select(x => x.Property)) | STRING_AGG(Property, N'') | EF Core 7.0 -string.Join(separator, group.Select(x => x.Property)) | STRING_AGG(Property, @separator) | EF Core 7.0 +string.Concat(group.Select(x => x.Property)) | STRING_AGG(Property, N'') +string.Join(separator, group.Select(x => x.Property)) | STRING_AGG(Property, @separator) ## Binary functions .NET | SQL | Added in ---------------------------- | ----------------------------- | -------- bytes.Contains(value) | CHARINDEX(@value, @bytes) > 0 -bytes.ElementAt(i) | SUBSTRING(@bytes, @i + 1, 1) | EF Core 8.0 +bytes.ElementAt(i) | SUBSTRING(@bytes, @i + 1, 1) bytes.First() | SUBSTRING(@bytes, 1, 1) bytes.Length | DATALENGTH(@bytes) bytes.SequenceEqual(second) | @bytes = @second @@ -53,7 +53,7 @@ Convert.ToInt16(value) | CONVERT(smallint, @value) Convert.ToInt32(value) | CONVERT(int, @value) Convert.ToInt64(value) | CONVERT(bigint, @value) Convert.ToString(value) | CONVERT(nvarchar(max), @value) -dateOnly.ToString() | CONVERT(varchar(100), @dateOnly) | EF Core 8.0 +dateOnly.ToString() | CONVERT(varchar(100), @dateOnly) dateTime.ToString() | CONVERT(varchar(100), @dateTime) dateTimeOffset.ToString() | CONVERT(varchar(100), @dateTimeOffset) decimalValue.ToString() | CONVERT(varchar(100), @decimalValue) @@ -64,7 +64,7 @@ intValue.ToString() | CONVERT(varchar(11), @intValue) longValue.ToString() | CONVERT(varchar(20), @longValue) sbyteValue.ToString() | CONVERT(varchar(4), @sbyteValue) shortValue.ToString() | CONVERT(varchar(6), @shortValue) -timeOnly.ToString() | CONVERT(varchar(100), @timeOnly) | EF Core 8.0 +timeOnly.ToString() | CONVERT(varchar(100), @timeOnly) timeSpan.ToString() | CONVERT(varchar(100), @timeSpan) uintValue.ToString() | CONVERT(varchar(10), @uintValue) ulongValue.ToString() | CONVERT(varchar(19), @ulongValue) @@ -88,9 +88,11 @@ dateTime.Date | CONVERT(date, @dat dateTime.Day | DATEPART(day, @dateTime) dateTime.DayOfYear | DATEPART(dayofyear, @dateTime) dateTime.Hour | DATEPART(hour, @dateTime) +dateTime.Microsecond | DATEPART(microsecond, @dateTime) % 1000 | EF Core 10.0 dateTime.Millisecond | DATEPART(millisecond, @dateTime) dateTime.Minute | DATEPART(minute, @dateTime) dateTime.Month | DATEPART(month, @dateTime) +dateTime.Nanosecond | DATEPART(nanosecond, @dateTime) % 1000 | EF Core 10.0 dateTime.Second | DATEPART(second, @dateTime) dateTime.TimeOfDay | CONVERT(time, @dateTime) dateTime.Year | DATEPART(year, @dateTime) @@ -107,23 +109,26 @@ dateTimeOffset.Date | CONVERT(date, @dat dateTimeOffset.Day | DATEPART(day, @dateTimeOffset) dateTimeOffset.DayOfYear | DATEPART(dayofyear, @dateTimeOffset) dateTimeOffset.Hour | DATEPART(hour, @dateTimeOffset) +dateTimeOffset.Microsecond | DATEPART(microsecond, @dateTimeOffset) % 1000 | EF Core 10.0 dateTimeOffset.Millisecond | DATEPART(millisecond, @dateTimeOffset) dateTimeOffset.Minute | DATEPART(minute, @dateTimeOffset) dateTimeOffset.Month | DATEPART(month, @dateTimeOffset) +dateTimeOffset.Nanosecond | DATEPART(nanosecond, @dateTimeOffset) % 1000 | EF Core 10.0 dateTimeOffset.Second | DATEPART(second, @dateTimeOffset) dateTimeOffset.TimeOfDay | CONVERT(time, @dateTimeOffset) -dateTimeOffset.ToUnixTimeSeconds() | DATEDIFF_BIG(second, '1970-01-01T00:00:00.0000000+00:00', @dateTimeOffset) | EF Core 8.0 -dateTimeOffset.ToUnixTimeMilliseconds() | DATEDIFF_BIG(millisecond, '1970-01-01T00:00:00.0000000+00:00', @dateTimeOffset) | EF Core 8.0 +dateTimeOffset.ToUnixTimeSeconds() | DATEDIFF_BIG(second, '1970-01-01T00:00:00.0000000+00:00', @dateTimeOffset) +dateTimeOffset.ToUnixTimeMilliseconds() | DATEDIFF_BIG(millisecond, '1970-01-01T00:00:00.0000000+00:00', @dateTimeOffset) dateTimeOffset.Year | DATEPART(year, @dateTimeOffset) -dateOnly.AddDays(value) | DATEADD(day, @value, @dateOnly) | EF Core 8.0 -dateOnly.AddMonths(months) | DATEADD(month, @months, @dateOnly) | EF Core 8.0 -dateOnly.AddYears(value) | DATEADD(year, @value, @dateOnly) | EF Core 8.0 -dateOnly.Day | DATEPART(day, @dateOnly) | EF Core 8.0 -dateOnly.DayOfYear | DATEPART(dayofyear, @dateOnly) | EF Core 8.0 -DateOnly.FromDateTime(dateTime) | CONVERT(date, @dateTime) | EF Core 8.0 -dateOnly.Month | DATEPART(month, @dateOnly) | EF Core 8.0 -dateOnly.Year | DATEPART(year, @dateOnly) | EF Core 8.0 -EF.Functions.AtTimeZone(dateTime, timeZone) | @dateTime AT TIME ZONE @timeZone | EF Core 7.0 +DateOnly.FromDateTime(dateTime) | CONVERT(date, @dateTime) +dateOnly.AddDays(value) | DATEADD(day, @value, @dateOnly) +dateOnly.AddMonths(months) | DATEADD(month, @months, @dateOnly) +dateOnly.AddYears(value) | DATEADD(year, @value, @dateOnly) +dateOnly.Day | DATEPART(day, @dateOnly) +dateOnly.DayOfYear | DATEPART(dayofyear, @dateOnly) +dateOnly.Month | DATEPART(month, @dateOnly) +dateOnly.Year | DATEPART(year, @dateOnly) +dateOnly.DayNumber | DATEDIFF(day, '0001-01-01', @dateOnly) | EF Core 10.0 +EF.Functions.AtTimeZone(dateTime, timeZone) | @dateTime AT TIME ZONE @timeZone EF.Functions.DateDiffDay(start, end) | DATEDIFF(day, @start, @end) EF.Functions.DateDiffHour(start, end) | DATEDIFF(hour, @start, @end) EF.Functions.DateDiffMicrosecond(start, end) | DATEDIFF(microsecond, @start, @end) @@ -141,24 +146,28 @@ EF.Functions.DateTimeOffsetFromParts(year, month, day, ...) | DATETIMEOFFSETFROM EF.Functions.IsDate(expression) | ISDATE(@expression) EF.Functions.SmallDateTimeFromParts(year, month, day, ...) | SMALLDATETIMEFROMPARTS(@year, @month, @day, ...) EF.Functions.TimeFromParts(hour, minute, second, ...) | TIMEFROMPARTS(@hour, @minute, @second, ...) -timeOnly.AddHours(value) | DATEADD(hour, @value, @timeOnly) | EF Core 8.0 -timeOnly.AddMinutes(value) | DATEADD(minute, @value, @timeOnly) | EF Core 8.0 -timeOnly.Hours | DATEPART(hour, @timeOnly) | EF Core 8.0 -timeOnly.IsBetween(start, end) | @timeOnly >= @start AND @timeOnly < @end | EF Core 8.0 -timeOnly.Milliseconds | DATEPART(millisecond, @timeOnly) | EF Core 8.0 -timeOnly.Minutes | DATEPART(minute, @timeOnly) | EF Core 8.0 -timeOnly.Seconds | DATEPART(second, @timeOnly) | EF Core 8.0 +timeOnly.AddHours(value) | DATEADD(hour, @value, @timeOnly) +timeOnly.AddMinutes(value) | DATEADD(minute, @value, @timeOnly) +timeOnly.Hour | DATEPART(hour, @timeOnly) +timeOnly.IsBetween(start, end) | @timeOnly >= @start AND @timeOnly < @end +timeOnly.Microsecond | DATEPART(microsecond, @timeOnly) % 1000 | EF Core 10.0 +timeOnly.Millisecond | DATEPART(millisecond, @timeOnly) +timeOnly.Minute | DATEPART(minute, @timeOnly) +timeOnly.Nanosecond | DATEPART(nanosecond, @timeOnly) % 1000 | EF Core 10.0 +timeOnly.Second | DATEPART(second, @timeOnly) timeSpan.Hours | DATEPART(hour, @timeSpan) +timeSpan.Microsecond | DATEPART(microsecond, @timeSpan) % 1000 | EF Core 10.0 timeSpan.Milliseconds | DATEPART(millisecond, @timeSpan) timeSpan.Minutes | DATEPART(minute, @timeSpan) +timeSpan.Nanosecond | DATEPART(nanosecond, @timeSpan) % 1000 | EF Core 10.0 timeSpan.Seconds | DATEPART(second, @timeSpan) ## Numeric functions .NET | SQL | Added in -------------------------- | -------------------- | -------- -double.DegreesToRadians(x) | RADIANS(@x) | EF Core 8.0 -double.RadiansToDegrees(x) | DEGREES(@x) | EF Core 8.0 +double.DegreesToRadians(x) | RADIANS(@x) +double.RadiansToDegrees(x) | DEGREES(@x) EF.Functions.Random() | RAND() Math.Abs(value) | ABS(@value) Math.Acos(d) | ACOS(@d) @@ -172,6 +181,8 @@ Math.Floor(d) | FLOOR(@d) Math.Log(d) | LOG(@d) Math.Log(a, newBase) | LOG(@a, @newBase) Math.Log10(d) | LOG10(@d) +Math.Max(x, y) | GREATEST(@x, @y) | EF Core 9.0 +Math.Min(x, y) | LEAST(@x, @y) | EF Core 9.0 Math.Pow(x, y) | POWER(@x, @y) Math.Round(d) | ROUND(@d, 0) Math.Round(d, decimals) | ROUND(@d, @decimals) @@ -202,12 +213,13 @@ string.Compare(strA, strB) | CASE W string.Concat(str0, str1) | @str0 + @str1 string.IsNullOrEmpty(value) | @value IS NULL OR @value LIKE N'' string.IsNullOrWhiteSpace(value) | @value IS NULL OR @value = N'' +string.Join(", ", new [] { x, y, z}) | CONCAT_WS(N', ', @x, @y, @z) | EF Core 9.0 stringValue.CompareTo(strB) | CASE WHEN @stringValue = @strB THEN 0 ... END stringValue.Contains(value) | @stringValue LIKE N'%' + @value + N'%' stringValue.EndsWith(value) | @stringValue LIKE N'%' + @value stringValue.FirstOrDefault() | SUBSTRING(@stringValue, 1, 1) stringValue.IndexOf(value) | CHARINDEX(@value, @stringValue) - 1 -stringValue.IndexOf(value, startIndex) | CHARINDEX(@value, @stringValue, @startIndex) - 1 | EF Core 7.0 +stringValue.IndexOf(value, startIndex) | CHARINDEX(@value, @stringValue, @startIndex) - 1 stringValue.LastOrDefault() | SUBSTRING(@stringValue, LEN(@stringValue), 1) stringValue.Length | LEN(@stringValue) stringValue.Replace(@oldValue, @newValue) | REPLACE(@stringValue, @oldValue, @newValue) @@ -222,18 +234,18 @@ stringValue.TrimStart() | LTRIM( ## Miscellaneous functions -.NET | SQL ----------------------------------------- | --- -collection.Contains(item) | @item IN @collection +.NET | SQL | Added in +---------------------------------------- | ----------------------------------- | -------- enumValue.HasFlag(flag) | @enumValue & @flag = @flag Guid.NewGuid() | NEWID() nullable.GetValueOrDefault() | COALESCE(@nullable, 0) nullable.GetValueOrDefault(defaultValue) | COALESCE(@nullable, @defaultValue) > [!NOTE] -> Some SQL has been simplified for illustration purposes. The actual SQL is more complex to handle a wider range of values. +> Some SQL translations have been simplified for illustration purposes. The actual SQL is more complex to handle a wider range of values. ## See also +* [Vector Search Function Mappings](xref:core/providers/sql-server/vector-search) * [Spatial Function Mappings](xref:core/providers/sql-server/spatial#spatial-function-mappings) * [HierarchyId Function Mappings](xref:core/providers/sql-server/hierarchyid#function-mappings) diff --git a/entity-framework/core/providers/sql-server/hierarchyid.md b/entity-framework/core/providers/sql-server/hierarchyid.md index 3177fc98c8..c17abc43db 100644 --- a/entity-framework/core/providers/sql-server/hierarchyid.md +++ b/entity-framework/core/providers/sql-server/hierarchyid.md @@ -1,7 +1,7 @@ --- title: Microsoft SQL Server Database Provider - Hierarchical Data - EF Core description: Using hierarchical data with the Entity Framework Core Microsoft SQL Server database provider -author: ajcvickers +author: SamMonoRT ms.date: 03/11/2023 uid: core/providers/sql-server/hierarchyid --- @@ -31,7 +31,7 @@ At the next level, a new [Microsoft.EntityFrameworkCore.SqlServer.Abstractions]( Use of `HierarchyId` for EF Core functionality such as queries and updates requires the [Microsoft.EntityFrameworkCore.SqlServer.HierarchyId](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer.HierarchyId) package. This package brings in `Microsoft.EntityFrameworkCore.SqlServer.Abstractions` and `Microsoft.SqlServer.Types` as transitive dependencies, and so is often the only package needed. -### [.NET Core CLI](#tab/netcore-cli) +### [.NET CLI](#tab/netcore-cli) ```dotnetcli dotnet add package Microsoft.EntityFrameworkCore.SqlServer.HierarchyId @@ -86,7 +86,7 @@ The `HierarchyId` type can be used for properties of an entity type. For example > [!TIP] > If desired, `HierarchyId` is suitable for use as a key property type. -In this case, the family tree is rooted with the patriarch of the family. Each halfling can be traced from the patriarch down the tree using its `PathFromPatriarch` property. SQL Server uses a compact binary format for these paths, but it is common to parse to and from a human-readable string representation when when working with code. In this representation, the position at each level is separated by a `/` character. For example, consider the family tree in the diagram below: +In this case, the family tree is rooted with the patriarch of the family. Each halfling can be traced from the patriarch down the tree using its `PathFromPatriarch` property. SQL Server uses a compact binary format for these paths, but it is common to parse to and from a human-readable string representation when working with code. In this representation, the position at each level is separated by a `/` character. For example, consider the family tree in the diagram below: ![Halfling family tree](../../what-is-new/ef-core-8.0/familytree.png) @@ -94,7 +94,7 @@ In this tree: - Balbo is at the root of the tree, represented by `/`. - Balbo has five children, represented by `/1/`, `/2/`, `/3/`, `/4/`, and `/5/`. -- Balbo's first child, Mungo, also has five children, represented by `/1/1/`, `/1/2/`, `/1/3/`, `/1/4/`, and `/1/5/`. Notice that the `HierarchyId` for Balbo (`/1/`) is the prefix for all his children. +- Balbo's first child, Mungo, also has five children, represented by `/1/1/`, `/1/2/`, `/1/3/`, `/1/4/`, and `/1/5/`. Notice that the `HierarchyId` for Mungo (`/1/`) is the prefix for all his children. - Similarly, Balbo's third child, Ponto, has two children, represented by `/3/1/` and `/3/2/`. Again the each of these children is prefixed by the `HierarchyId` for Ponto, which is represented as `/3/`. - And so on down the tree... diff --git a/entity-framework/core/providers/sql-server/index.md b/entity-framework/core/providers/sql-server/index.md index 15eb9ce4af..81121d9544 100644 --- a/entity-framework/core/providers/sql-server/index.md +++ b/entity-framework/core/providers/sql-server/index.md @@ -7,13 +7,13 @@ uid: core/providers/sql-server/index --- # Microsoft SQL Server EF Core Database Provider -This database provider allows Entity Framework Core to be used with Microsoft SQL Server (including Azure SQL Database). The provider is maintained as part of the [Entity Framework Core Project](https://github.com/dotnet/efcore). +This database provider allows Entity Framework Core to be used with Microsoft SQL Server (including Azure SQL and Azure Synapse Analytics). The provider is maintained as part of the [Entity Framework Core Project](https://github.com/dotnet/efcore). ## Install Install the [Microsoft.EntityFrameworkCore.SqlServer NuGet package](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer/). -### [.NET Core CLI](#tab/dotnet-core-cli) +### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet add package Microsoft.EntityFrameworkCore.SqlServer @@ -27,15 +27,103 @@ Install-Package Microsoft.EntityFrameworkCore.SqlServer *** +## Usage and configuration + +Once your project references the nuget package, configure EF for SQL Server as follows: + +### [SQL Server (on-premises)](#tab/sqlserver) + +```c# +public class MyContext : DbContext +{ + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseSqlServer(""); + } +} +``` + +When using EF with dependency injection (e.g. ASP.NET), use the following: + +```c# +var builder = WebApplication.CreateBuilder(args); +builder.Services.AddDbContext(options => + options.UseSqlServer(builder.Configuration.GetConnectionString("MyContext"))); +``` + +### [Azure SQL](#tab/azure-sql) + +```c# +public class MyContext : DbContext +{ + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseAzureSql(""); + } +} +``` + +When using EF with dependency injection (e.g. ASP.NET), use the following: + +```c# +var builder = WebApplication.CreateBuilder(args); +builder.Services.AddDbContext(options => + options.UseSqlServer(builder.Configuration.GetConnectionString("MyContext"))); +``` + > [!NOTE] -> The provider references Microsoft.Data.SqlClient (not System.Data.SqlClient). If your project takes a direct dependency on SqlClient, make sure it references the Microsoft.Data.SqlClient package. +> was introduced in EF Core 9.0. When using an older version, use instead. + +### [Azure Synapse Analytics](#tab/azure-synapse) + +```c# +public class MyContext : DbContext +{ + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseAzureSynapse(""); + } +} +``` + +When using EF with dependency injection (e.g. ASP.NET), use the following: + +```c# +var builder = WebApplication.CreateBuilder(args); +builder.Services.AddDbContext(options => + options.UseSqlServer(builder.Configuration.GetConnectionString("MyContext"))); +``` + +> [!NOTE] +> was introduced in EF Core 9.0. When using an older version, use instead. + +*** + +## Compatibility level + +You can optionally configure EF with the compatibility level of your database; higher compatibility levels allow for newer features, and configuring EF accordingly makes it use those features. If you do not explicitly configure a compatibility level, a reasonable default will be chosen that may not take advantage of the newest features. As a result, it's recommended to explicitly configure the compatibility level you'd like to have. + +Note that this only covers EF's own configuration of the compatibility level - affecting e.g. the SQL it generates - but does not affect the compatibility level configured in your actual database. Databases hosted on newer versions of SQL Server may still be configured with lower compatibility levels, causing them to not support the latest features - so you may need to change the compatibility level in your database as well. For more information on compatibility levels, [see the documentation](/sql/relational-databases/databases/view-or-change-the-compatibility-level-of-a-database). + +To configure EF with a compatibility level, use `UseCompatibilityLevel()` as follows: + +```c# +optionsBuilder.UseSqlServer("", o => o.UseCompatibilityLevel()); +``` + +## Connection resiliency + +EF includes functionality for automatically retrying failed database commands; for more information, [see the documentation](xref:core/miscellaneous/connection-resiliency). When using and , connection resiliency is automatically set up with the appropriate settings specific for those databases. Otherwise, when using , configure the provider with as shown in the connection resiliency documentation. + +In some cases, may be called in code that you cannot control. Starting with EF 9, to enable connection resiliency in such scenarios, call `ConfigureSqlEngine(c => c.EnableRetryOnFailureByDefault())` beforehand (this is not necessary with and ). ->[!TIP] -> The Microsoft.Data.SqlClient package ships more frequently than the EF Core provider. If you would like to take advantage of new features and bug fixes, you can add a direct package reference to the latest version of Microsoft.Data.SqlClient. +## Notes and caveats -> [!WARNING] -> The async implementation of [Microsoft.Data.SqlClient](https://github.com/dotnet/SqlClient) unfortunately has some known issues (e.g. [#593](https://github.com/dotnet/SqlClient/issues/593), [#601](https://github.com/dotnet/SqlClient/issues/601), and others). If you're seeing unexpected performance problems, try using sync command execution instead, especially when dealing with large text or binary values. +* The Microsoft.Data.SqlClient package ships more frequently than the EF Core provider. If you would like to take advantage of new features and bug fixes, you can add a direct package reference to the latest version of Microsoft.Data.SqlClient. +* The EF SQL Server provider uses Microsoft.Data.SqlClient, and not the older System.Data.Client; if your project takes a direct dependency on SqlClient, make sure it references the Microsoft.Data.SqlClient package. For more information on the differences between Microsoft.Data.SqlClient and System.Data.SqlClient, [see this blog post](https://devblogs.microsoft.com/dotnet/introducing-the-new-microsoftdatasqlclient). -## Supported Database Engines +## Supported database engines -* Microsoft SQL Server (2012 onwards) +* Microsoft SQL Server (2019 onwards) +* Azure SQL Database +* Azure Synapse Analytics diff --git a/entity-framework/core/providers/sql-server/misc.md b/entity-framework/core/providers/sql-server/misc.md index dd4ce74700..2206fe39ef 100644 --- a/entity-framework/core/providers/sql-server/misc.md +++ b/entity-framework/core/providers/sql-server/misc.md @@ -7,6 +7,32 @@ uid: core/providers/sql-server/misc --- # Miscellaneous notes for SQL Server +## Azure SQL database options + +> [!NOTE] +> You should [use `UseAzureSql` method](xref:core/providers/sql-server/index#usage) instead of `UseSqlServer` when connecting to Azure SQL. + +Azure SQL Database provides [a variety of pricing options](https://azure.microsoft.com/pricing/details/sql-database/single/) that are usually configured through the Azure Portal. However, if you are managing the schema using [EF Core migrations](xref:core/managing-schemas/migrations/index), you can configure the desired options with EF, and they will get applied when EF creates the database. + +You can specify the service tier of the database (EDITION) using [HasServiceTier](/dotnet/api/Microsoft.EntityFrameworkCore.SqlServerModelBuilderExtensions.HasServiceTier): + +[!code-csharp[HasServiceTier](../../../../samples/core/SqlServer/AzureDatabase/AzureSqlContext.cs?name=HasServiceTier)] + +You can specify the maximum size of the database using [HasDatabaseMaxSize](/dotnet/api/Microsoft.EntityFrameworkCore.SqlServerModelBuilderExtensions.HasDatabaseMaxSize): + +[!code-csharp[HasDatabaseMaxSize](../../../../samples/core/SqlServer/AzureDatabase/AzureSqlContext.cs?name=HasDatabaseMaxSize)] + +You can specify the performance level of the database (SERVICE_OBJECTIVE) using [HasPerformanceLevel](/dotnet/api/Microsoft.EntityFrameworkCore.SqlServerModelBuilderExtensions.HasPerformanceLevel): + +[!code-csharp[HasPerformanceLevel](../../../../samples/core/SqlServer/AzureDatabase/AzureSqlContext.cs?name=HasPerformanceLevel)] + +Use [HasPerformanceLevelSql](/dotnet/api/Microsoft.EntityFrameworkCore.SqlServerModelBuilderExtensions.HasPerformanceLevelSql) to configure the elastic pool, since the value is not a string literal: + +[!code-csharp[HasPerformanceLevel](../../../../samples/core/SqlServer/AzureDatabase/AzureSqlContext.cs?name=HasPerformanceLevelSql)] + +> [!TIP] +> You can find all the supported values in the [ALTER DATABASE documentation](/sql/t-sql/statements/alter-database-transact-sql?view=azuresqldb-current&preserve-view=true). + ## SaveChanges, database triggers and unsupported computed columns Starting with EF Core 7.0, EF Core saves changes to the database with significantly optimized SQL; unfortunately, this technique is not supported on SQL Server if the target table has database triggers, or certain kinds of computed columns. For more information on this SQL Server limitation, see the documentation on the [OUTPUT clause](/sql/t-sql/queries/output-clause-transact-sql#remarks). diff --git a/entity-framework/core/providers/sql-server/spatial.md b/entity-framework/core/providers/sql-server/spatial.md index 9e885bdd18..99a067f5de 100644 --- a/entity-framework/core/providers/sql-server/spatial.md +++ b/entity-framework/core/providers/sql-server/spatial.md @@ -1,7 +1,7 @@ --- title: Microsoft SQL Server Database Provider - Spatial Data - EF Core description: Using spatial data with the Entity Framework Core Microsoft SQL Server database provider -author: bricelam +author: SamMonoRT ms.date: 10/02/2020 uid: core/providers/sql-server/spatial --- diff --git a/entity-framework/core/providers/sql-server/temporal-tables.md b/entity-framework/core/providers/sql-server/temporal-tables.md index e03b325c42..118ccfe778 100644 --- a/entity-framework/core/providers/sql-server/temporal-tables.md +++ b/entity-framework/core/providers/sql-server/temporal-tables.md @@ -1,7 +1,7 @@ --- title: Microsoft SQL Server Database Provider - Temporal Tables - EF Core description: Using SQL Server/Azure SQL temporal tables (aka system-versioned tables) with EF Core -author: ajcvickers +author: SamMonoRT ms.date: 02/11/2023 uid: core/providers/sql-server/temporal-tables --- diff --git a/entity-framework/core/providers/sql-server/value-generation.md b/entity-framework/core/providers/sql-server/value-generation.md index 1d0df4d48e..e564e736d0 100644 --- a/entity-framework/core/providers/sql-server/value-generation.md +++ b/entity-framework/core/providers/sql-server/value-generation.md @@ -21,7 +21,7 @@ By default, IDENTITY columns start off at 1 (the seed), and increment by 1 each ### Inserting explicit values into IDENTITY columns -By default, SQL Server doesn't allow inserting explicit values into IDENTITY columns. To do so, you must manually enable `IDENTITY_INSERT` before calling `SaveChanges()`, as follows: +By default, SQL Server doesn't allow inserting explicit values into IDENTITY columns. To do so, you must manually enable `IDENTITY_INSERT` before calling `SaveChangesAsync()`, as follows: [!code-csharp[Main](../../../../samples/core/SqlServer/ValueGeneration/ExplicitIdentityValues.cs?name=ExplicitIdentityValues)] diff --git a/entity-framework/core/providers/sql-server/vector-search.md b/entity-framework/core/providers/sql-server/vector-search.md new file mode 100644 index 0000000000..2cfae980d1 --- /dev/null +++ b/entity-framework/core/providers/sql-server/vector-search.md @@ -0,0 +1,80 @@ +--- +title: Microsoft SQL Server Database Provider - Vector Search - EF Core +description: Using vectors and embeddings to perform similarity search with the Entity Framework Core Microsoft SQL Server database provider +author: roji +ms.date: 08/17/2025 +uid: core/providers/sql-server/vector-search +--- +# Vector search in the SQL Server EF Core Provider + +## Vector search + +> [!NOTE] +> Vector support was introduced in EF Core 10.0, and is only supported with SQL Server 2025 and above. + +The SQL Server vector data type allows storing *embeddings*, which are representation of meaning that can be efficiently searched over for similarity, powering AI workloads such as semantic search and retrieval-augmented generation (RAG). + +To use the `vector` data type, simply add a .NET property of type `SqlVector` to your entity type, specifying the dimensions as follows: + +### [Data Annotations](#tab/data-annotations) + +```c# +public class Blog +{ + // ... + + [Column(TypeName = "vector(1536)")] + public SqlVector Embedding { get; set; } +} +``` + +### [Fluent API](#tab/fluent-api) + +```c# +public class Blog +{ + // ... + + public SqlVector Embedding { get; set; } +} + +protected override void OnModelCreating(ModelBuilder modelBuilder) +{ + modelBuilder.Entity() + .Property(b => b.Embedding) + .HasColumnType("vector(1536)"); +} +``` + +*** + +Once your property is added and the corresponding column created in the database, you can start inserting embeddings. Embedding generation is done outside of the database, usually via a service, and the details for doing this are out of scope for this documentation. However, [the .NET Microsoft.Extensions.AI libraries](/dotnet/ai/microsoft-extensions-ai) contains [`IEmbeddingGenerator`](/dotnet/ai/microsoft-extensions-ai#create-embeddings), which is an abstraction over embedding generators that has implementations for the major providers. + +Once you've chosen your embedding generator and set it up, use it to generate embeddings and insert them as follows + +```c# +IEmbeddingGenerator> embeddingGenerator = /* Set up your preferred embedding generator */; + +var embedding = await embeddingGenerator.GenerateVectorAsync("Some text to be vectorized"); +context.Blogs.Add(new Blog +{ + Name = "Some blog", + Embedding = new SqlVector(embedding) +}); +await context.SaveChangesAsync(); +``` + +Finally, use the [`EF.Functions.VectorDistance()`](/sql/t-sql/functions/vector-distance-transact-sql) function to perform similarity search for a given user query: + +```c# +var sqlVector = new SqlVector(await embeddingGenerator.GenerateVectorAsync("Some user query to be vectorized")); +var topSimilarBlogs = context.Blogs + .OrderBy(b => EF.Functions.VectorDistance("cosine", b.Embedding, sqlVector)) + .Take(3) + .ToListAsync(); +``` + +> [!NOTE] +> The built-in support in EF 10 replaces the previous [EFCore.SqlServer.VectorSearch](https://github.com/efcore/EFCore.SqlServer.VectorSearch) extension, which allowed performing vector search before the `vector` data type was introduced. As part of upgrading to EF 10, remove the extension from your projects. +> +> The [`VECTOR_SEARCH()`](/sql/t-sql/functions/vector-search-transact-sql) function (in preview) for approximate search with DiskANN is currently unsupported. diff --git a/entity-framework/core/providers/sqlite/functions.md b/entity-framework/core/providers/sqlite/functions.md index b36675e0ab..bcc0c1e3a4 100644 --- a/entity-framework/core/providers/sqlite/functions.md +++ b/entity-framework/core/providers/sqlite/functions.md @@ -1,7 +1,7 @@ --- title: Function Mappings - SQLite Database Provider - EF Core description: Function Mappings of the SQLite EF Core database provider -author: bricelam +author: SamMonoRT ms.date: 7/26/2023 uid: core/providers/sqlite/functions --- @@ -14,13 +14,15 @@ This page shows which .NET members are translated into which SQL functions when .NET | SQL | Added in ----------------------------------------------------- | ---------------------------------- | -------- group.Average(x => x.Property) | AVG(Property) +group.Average(x => x.DecimalProperty) | ef_avg(DecimalProperty) | EF Core 9.0 group.Count() | COUNT(*) group.LongCount() | COUNT(*) group.Max(x => x.Property) | MAX(Property) group.Min(x => x.Property) | MIN(Property) group.Sum(x => x.Property) | SUM(Property) -string.Concat(group.Select(x => x.Property)) | group_concat(Property, '') | EF Core 7.0 -string.Join(separator, group.Select(x => x.Property)) | group_concat(Property, @separator) | EF Core 7.0 +group.Sum(x => x.DecimalProperty) | ef_sum(DecimalProperty) | EF Core 9.0 +string.Concat(group.Select(x => x.Property)) | group_concat(Property, '') +string.Join(separator, group.Select(x => x.Property)) | group_concat(Property, @separator) ## Binary functions @@ -32,8 +34,8 @@ bytes.SequenceEqual(second) | @bytes = @second EF.Functions.Hex(bytes) | hex(@bytes) EF.Functions.Substr(bytes, startIndex) | substr(@bytes, @startIndex) EF.Functions.Substr(bytes, startIndex, length) | substr(@bytes, @startIndex, @length) -EF.Functions.Unhex(value) | unhex(@value) | EF Core 8.0 -EF.Functions.Unhex(value, ignoreChars) | unhex(@value, @ignoreChars) | EF Core 8.0 +EF.Functions.Unhex(value) | unhex(@value) +EF.Functions.Unhex(value, ignoreChars) | unhex(@value, @ignoreChars) ## Conversion functions @@ -67,9 +69,10 @@ dateOnly.AddYears(value) | date(@dateOnly, @value \|\| ' years') dateOnly.Day | strftime('%d', @dateOnly) dateOnly.DayOfWeek | strftime('%w', @dateOnly) dateOnly.DayOfYear | strftime('%j', @dateOnly) -DateOnly.FromDateTime(dateTime) | date(@dateTime) | EF Core 8.0 +DateOnly.FromDateTime(dateTime) | date(@dateTime) dateOnly.Month | strftime('%m', @dateOnly) dateOnly.Year | strftime('%Y', @dateOnly) +dateOnly.DayNumber | CAST(julianday(@dateOnly) - julianday('0001-01-01') AS INTEGER) | EF Core 10.0 DateTime.Now | datetime('now', 'localtime') DateTime.Today | datetime('now', 'localtime', 'start of day') DateTime.UtcNow | datetime('now') @@ -111,23 +114,23 @@ decimalValue < d | ef_compare(@decimalValue, @d) < 0 decimalValue <= d | ef_compare(@decimalValue, @d) <= 0 decimalValue > d | ef_compare(@decimalValue, @d) > 0 decimalValue >= d | ef_compare(@decimalValue, @d) >= 0 -double.DegreesToRadians(degrees) | radians(@degrees) | EF Core 8.0 -double.RadiansToDegrees(radians) | degrees(@dradians) | EF Core 8.0 +double.DegreesToRadians(degrees) | radians(@degrees) +double.RadiansToDegrees(radians) | degrees(@dradians) doubleValue % d | mod(@doubleValue, @d) EF.Functions.Random() | abs(random() / 9223372036854780000.0) Math.Abs(value) | abs(@value) -Math.Acos(value) | acos(@value) | EF Core 8.0 -Math.Acosh(d) | acosh(@d) | EF Core 8.0 -Math.Asin(d) | asin(@d) | EF Core 8.0 -Math.Asinh(d) | asinh(@d) | EF Core 8.0 -Math.Atan(d) | atan(@d) | EF Core 8.0 -Math.Atan2(y, x) | atan2(@y, @x) | EF Core 8.0 -Math.Atanh(d) | atanh(@d) | EF Core 8.0 -Math.Ceiling(d) | ceiling(@d) | EF Core 8.0 -Math.Cos(d) | cos(@d) | EF Core 8.0 -Math.Cosh(value) | cosh(@value) | EF Core 8.0 -Math.Exp(d) | exp(@d) | EF Core 8.0 -Math.Floor(d) | floor(@d) | EF Core 8.0 +Math.Acos(value) | acos(@value) +Math.Acosh(d) | acosh(@d) +Math.Asin(d) | asin(@d) +Math.Asinh(d) | asinh(@d) +Math.Atan(d) | atan(@d) +Math.Atan2(y, x) | atan2(@y, @x) +Math.Atanh(d) | atanh(@d) +Math.Ceiling(d) | ceiling(@d) +Math.Cos(d) | cos(@d) +Math.Cosh(value) | cosh(@value) +Math.Exp(d) | exp(@d) +Math.Floor(d) | floor(@d) Math.Log(d) | ln(@d) | EF Core 8.0 Math.Log(a, newBase) | log(@newBase, @a) | EF Core 8.0 Math.Log2(x) | log2(@x) | EF Core 8.0 @@ -147,11 +150,11 @@ Math.Truncate(d) | trunc(@d) | EF Co > [!TIP] > In addition to the methods listed here, corresponding [generic math](/dotnet/standard/generics/math) implementations -> and [MathF](/dotnet/api/system.mathf) methods are also translated. For example, `Math.Sin`, `MathF.Sin`, `double.Sin`, +> and methods are also translated. For example, `Math.Sin`, `MathF.Sin`, `double.Sin`, > and `float.Sin` all map to the `sin` function in SQL. > [!TIP] -> SQL functions prefixed with *ef* are created by EF Core. +> SQL functions prefixed with `ef_` are created by EF Core. ## String functions diff --git a/entity-framework/core/providers/sqlite/index.md b/entity-framework/core/providers/sqlite/index.md index dc2efac174..756a6e4a0e 100644 --- a/entity-framework/core/providers/sqlite/index.md +++ b/entity-framework/core/providers/sqlite/index.md @@ -1,7 +1,7 @@ --- title: SQLite Database Provider - EF Core description: Information on the Entity Framework Core SQLite database provider -author: bricelam +author: SamMonoRT ms.date: 10/27/2016 uid: core/providers/sqlite/index --- @@ -13,7 +13,7 @@ This database provider allows Entity Framework Core to be used with SQLite. The Install the [Microsoft.EntityFrameworkCore.Sqlite NuGet package](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite/). -### [.NET Core CLI](#tab/dotnet-core-cli) +### [.NET CLI](#tab/dotnet-core-cli) ```dotnetcli dotnet add package Microsoft.EntityFrameworkCore.Sqlite @@ -29,7 +29,7 @@ Install-Package Microsoft.EntityFrameworkCore.Sqlite ## Supported Database Engines -* SQLite (3.7 onwards) +* SQLite (3.46.1 onwards) ## Limitations diff --git a/entity-framework/core/providers/sqlite/limitations.md b/entity-framework/core/providers/sqlite/limitations.md index bc66dfbf0d..6107b6fce7 100644 --- a/entity-framework/core/providers/sqlite/limitations.md +++ b/entity-framework/core/providers/sqlite/limitations.md @@ -1,7 +1,7 @@ --- title: SQLite Database Provider - Limitations - EF Core description: Limitations of the Entity Framework Core SQLite database provider as compared to other providers -author: bricelam +author: SamMonoRT ms.date: 11/15/2021 uid: core/providers/sqlite/limitations --- @@ -11,23 +11,24 @@ The SQLite provider has a number of migrations limitations. Most of these limita ## Modeling limitations -The common relational library (shared by Entity Framework relational database providers) defines APIs for modelling concepts that are common to most relational database engines. A couple of these concepts are not supported by the SQLite provider. +The common relational library (shared by EF Core relational database providers) defines APIs for modelling concepts that are common to most relational database engines. A couple of these concepts are not supported by the SQLite provider. * Schemas * Sequences +* Database-generated concurrency tokens ([see documentation](xref:core/saving/concurrency#native-database-generated-concurrency-tokens)) ## Query limitations SQLite doesn't natively support the following data types. EF Core can read and write values of these types, and querying for equality (`where e.Property == value`) is also supported. Other operations, however, like comparison and ordering will require evaluation on the client. -* DateTimeOffset -* Decimal -* TimeSpan -* UInt64 +* `DateTimeOffset` +* `decimal` +* `TimeSpan` +* `ulong` -Instead of `DateTimeOffset`, we recommend using DateTime values. When handling multiple time zones, we recommend converting the values to UTC before saving and then converting back to the appropriate time zone. +Instead of `DateTimeOffset`, we recommend using `DateTime` values. When handling multiple time zones, we recommend converting the values to UTC before saving and then converting back to the appropriate time zone. -The `Decimal` type provides a high level of precision. If you don't need that level of precision, however, we recommend using double instead. You can use a [value converter](xref:core/modeling/value-conversions) to continue using decimal in your classes. +The `decimal` type provides a high level of precision. If you don't need that level of precision, however, we recommend using `double` instead. You can use a [value converter](xref:core/modeling/value-conversions) to continue using `decimal` in your classes. ```csharp modelBuilder.Entity() @@ -39,7 +40,7 @@ modelBuilder.Entity() The SQLite database engine does not support a number of schema operations that are supported by the majority of other relational databases. If you attempt to apply one of the unsupported operations to a SQLite database then a `NotSupportedException` will be thrown. -A rebuild will be attempted in order to perform certain operations. Rebuilds are only possible for database artifacts that are part of your EF Core model. If a database artifact isn't part of the model--for example, if it was created manually inside a migration--then a `NotSupportedException` is still thrown. +A rebuild will be attempted in order to perform certain operations. Rebuilds are only possible for database artifacts that are part of your EF Core model. If a database artifact isn't part of the model - for example, if it was created manually inside a migration - then a `NotSupportedException` is still thrown. Operation | Supported? ---------------------|:---------- @@ -69,7 +70,7 @@ Delete | ✔ ### Migrations limitations workaround -You can workaround some of these limitations by manually writing code in your migrations to perform a rebuild. Table rebuilds involve creating a new table, copying data to the new table, dropping the old table, renaming the new table. You will need to use the `Sql(string)` method to perform some of these steps. +You can workaround some of these limitations by manually writing code in your migrations to perform a rebuild. Table rebuilds involve creating a new table, copying data to the new table, dropping the old table, renaming the new table. You will need to use the method to perform some of these steps. See [Making Other Kinds Of Table Schema Changes](https://sqlite.org/lang_altertable.html#otheralter) in the SQLite documentation for more details. @@ -89,6 +90,12 @@ Otherwise, we recommend using `dotnet ef database update` to apply migrations. Y dotnet ef database update --connection "Data Source=My.db" ``` +## Concurrent migrations protection + +EF9 introduced a locking mechanism when executing migrations. It aims to protect against multiple migration executions happening simultaneously, as that could leave the database in a corrupted state. This is one of the potential problems resulting from applying migrations at runtime using the method (see [Applying migrations](xref:core/managing-schemas/migrations/applying) for more information). To mitigate this, EF creates an exclusive lock on the database before any migration operations are applied. + +Unfortunately, SQLite does not have built-in locking mechanism, so EF Core creates a separate table (`__EFMigrationsLock`) and uses it for locking. The lock is released when the migration completes and the seeding code finishes execution. However, if for some reason migration fails in a non-recoverable way, the lock may not be released correctly. If this happens, consecutive migrations will be blocked from executing SQL and therefore never complete. You can manually unblock them by deleting the `__EFMigrationsLock` table in the database. + ## See also * [Microsoft.Data.Sqlite Async Limitations](/dotnet/standard/data/sqlite/async) diff --git a/entity-framework/core/providers/sqlite/spatial.md b/entity-framework/core/providers/sqlite/spatial.md index 15ad6e0d77..87d78dc263 100644 --- a/entity-framework/core/providers/sqlite/spatial.md +++ b/entity-framework/core/providers/sqlite/spatial.md @@ -1,7 +1,7 @@ --- title: SQLite Database Provider - Spatial Data - EF Core description: Using spatial data with the Entity Framework Core SQLite database provider -author: bricelam +author: SamMonoRT ms.date: 10/02/2020 uid: core/providers/sqlite/spatial --- @@ -11,7 +11,7 @@ This page includes additional information about using spatial data with the SQLi ## Installing SpatiaLite -On Windows, the native mod_spatialite library is distributed as a NuGet package dependency. Other platforms need to install it separately. This is typically done using a software package manager. For example, you can use APT on Debian and Ubuntu; and Homebrew on MacOS. +On Windows, the native `mod_spatialite` library is distributed as a [NuGet package](https://www.nuget.org/packages/mod_spatialite) dependency. Other platforms need to install it separately. This is typically done using a software package manager. For example, you can use APT on Debian and Ubuntu; and Homebrew on MacOS. ```bash # Debian/Ubuntu @@ -139,4 +139,4 @@ EnvelopeCombiner.CombineAsGeometry(group.Select(x => x.Property)) | Extent(Prope ## Additional resources * [SpatiaLite Homepage](https://www.gaia-gis.it/fossil/libspatialite) -* [NetTopologySuite Docs](https://nettopologysuite.github.io/NetTopologySuite/) +* [NetTopologySuite API Documentation](https://nettopologysuite.github.io/NetTopologySuite/api/NetTopologySuite.html) diff --git a/entity-framework/core/providers/writing-a-provider.md b/entity-framework/core/providers/writing-a-provider.md index 2949773e58..d139d5f80c 100644 --- a/entity-framework/core/providers/writing-a-provider.md +++ b/entity-framework/core/providers/writing-a-provider.md @@ -1,7 +1,7 @@ --- title: Writing a Database Provider - EF Core description: Information on writing a new Entity Framework Core provider -author: ajcvickers +author: SamMonoRT ms.date: 10/27/2016 uid: core/providers/writing-a-provider --- diff --git a/entity-framework/core/querying/database-functions.md b/entity-framework/core/querying/database-functions.md index 11889d42fb..bf8649c223 100644 --- a/entity-framework/core/querying/database-functions.md +++ b/entity-framework/core/querying/database-functions.md @@ -10,7 +10,7 @@ uid: core/querying/database-functions Database functions are the database equivalent of [C# methods](/dotnet/csharp/programming-guide/classes-and-structs/methods). A database function can be invoked with zero or more parameters and it computes the result based on the parameter values. Most databases, which use SQL for querying have support for database functions. So SQL generated by EF Core query translation also allows invoking database functions. C# methods don't have to translate strictly to database functions in EF Core. - A C# method may not have an equivalent database function. - - method translates to a null check and a comparison with an empty string in the database rather than a function. + - method translates to a null check and a comparison with an empty string in the database rather than a function. - method doesn't have database equivalent since string comparison can't be represented or mimicked easily in a database. - A database function may not have an equivalent C# method. The `??` operator in C#, which doesn't have any method, translates to the `COALESCE` function in the database. @@ -52,4 +52,4 @@ Apart from mappings provided by EF Core providers, users can also define custom - [SqlServer built-in function mappings](xref:core/providers/sql-server/functions) - [Sqlite built-in function mappings](xref:core/providers/sqlite/functions) -- [Azure Cosmos DB built-in function mappings](xref:core/providers/cosmos/functions) +- [Azure Cosmos DB built-in function mappings](xref:core/providers/cosmos/querying#function-mappings) diff --git a/entity-framework/core/querying/filters.md b/entity-framework/core/querying/filters.md index 9a84c60d47..f94af0cae6 100644 --- a/entity-framework/core/querying/filters.md +++ b/entity-framework/core/querying/filters.md @@ -7,83 +7,115 @@ uid: core/querying/filters --- # Global Query Filters -Global query filters are LINQ query predicates applied to Entity Types in the metadata model (usually in `OnModelCreating`). A query predicate is a boolean expression typically passed to the LINQ `Where` query operator. EF Core applies such filters automatically to any LINQ queries involving those Entity Types. EF Core also applies them to Entity Types, referenced indirectly through use of Include or navigation property. Some common applications of this feature are: +Global query filters allow attaching a filter to an entity type and having that filter applied whenever a query on that entity type is executed; think of them as an additional LINQ `Where` operator that's added whenever the entity type is queried. Such filters are useful in a variety of cases. -* **Soft delete** - An Entity Type defines an `IsDeleted` property. -* **Multi-tenancy** - An Entity Type defines a `TenantId` property. +> [!TIP] +> You can view this article's [sample](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Querying/QueryFilters) on GitHub. -## Example +## Basic example - soft deletion -The following example shows how to use Global Query Filters to implement multi-tenancy and soft-delete query behaviors in a simple blogging model. +In some scenarios, rather than deleting a row from the database, it's preferable to instead set an `IsDeleted` flag to mark the row as deleted; this pattern is called *soft deletion*. Soft deletion allows rows to be undeleted if needed, or to preserve an audit trail where deleted rows are still accessible. Global query filters can be used to filter out soft-deleted rows by default, while still allowing you to access them in specific places by disabling the filter for a specific query. -> [!TIP] -> You can view this article's [sample](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Querying/QueryFilters) on GitHub. +To enable soft deletion, let's add an `IsDeleted` property to our Blog type: -> [!NOTE] -> Multi-tenancy is used here as a simple example. There is also an article with comprehensive guidance for [multi-tenancy in EF Core applications](xref:core/miscellaneous/multitenancy). +[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/SoftDeletion.cs#Blog)] -First, define the entities: +We now set up a global query filter, using the API in `OnModelCreating`: -[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/Entities.cs#Entities)] +[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/SoftDeletion.cs#FilterConfiguration)] -Note the declaration of a `_tenantId` field on the `Blog` entity. This field will be used to associate each Blog instance with a specific tenant. Also defined is an `IsDeleted` property on the `Post` entity type. This property is used to keep track of whether a post instance has been "soft-deleted". That is, the instance is marked as deleted without physically removing the underlying data. +We can now query our `Blog` entities as usual; the configured filter will ensure that all queries will - by default - filter out all instances where `IsDeleted` is true. -Next, configure the query filters in `OnModelCreating` using the `HasQueryFilter` API. +Note that at this point, you must manually set `IsDeleted` in order to soft-delete an entity. For a more end-to-end solution, you can override your context type's `SaveChangesAsync` method to add logic which goes over all entities which the user deleted, and changes them to be modified instead, setting the `IsDeleted` property to true: -[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/BloggingContext.cs#FilterConfiguration)] +[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/SoftDeletion.cs#SaveChangesAsyncOverride)] -The predicate expressions passed to the `HasQueryFilter` calls will now automatically be applied to any LINQ queries for those types. +This allows you to use EF APIs that delete an entity instance as usual and have them get soft-deleted instead. -> [!TIP] -> Note the use of a DbContext instance level field: `_tenantId` used to set the current tenant. Model-level filters will use the value from the correct context instance (that is, the instance that is executing the query). +## Using context data - multi-tenancy -> [!NOTE] -> It is currently not possible to define multiple query filters on the same entity - only the last one will be applied. However, you can define a single filter with multiple conditions using the logical `AND` operator ([`&&` in C#](/dotnet/csharp/language-reference/operators/boolean-logical-operators#conditional-logical-and-operator-)). +Another mainstream scenario for global query filters is *multi-tenancy*, where your application stores data belonging to different users in the same table. In such cases, there's usually a *tenant ID* column which associates the row to a specific tenant, and global query filters can be used to automatically filter for the rows of the current tenant. This provides strong tenant isolation for your queries by default, removing the need to think of filtering for the tenant in each and every query. -## Use of navigations +Unlike with soft deletion, multi-tenancy requires knowing the *current* tenant ID; this value is usually determined e.g. when the user authenticates over the web. For EF's purposes, the tenant ID must be available on the context instance, so that the global query filter can refer to it and use it when querying. Let's accept a `tenantId` parameter in our context type's constructor, and reference that from our filter: -You can also use navigations in defining global query filters. Using navigations in query filter will cause query filters to be applied recursively. When EF Core expands navigations used in query filters, it will also apply query filters defined on referenced entities. +```c# +public class MultitenancyContext(string tenantId) : DbContext +{ + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().HasQueryFilter(b => b.TenantId == tenantId); + } +} +``` + +This forces anyone constructing a context to specify its associated tenant ID, and ensures that only `Blog` entities with that ID are returned from queries by default. -To illustrate this configure query filters in `OnModelCreating` in the following way: -[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/FilteredBloggingContextRequired.cs#NavigationInFilter)] +> [!NOTE] +> This sample only showed basic multi-tenancy concepts needed in order to demonstrate global query filters. For more information on multi-tenancy and EF, see [multi-tenancy in EF Core applications](xref:core/miscellaneous/multitenancy). -Next, query for all `Blog` entities: -[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/Program.cs#QueriesNavigation)] +## Using multiple query filters -This query produces the following SQL, which applies query filters defined for both `Blog` and `Post` entities: +Calling with a simple filter overwrites any previous filter, so multiple filters **cannot** be defined on the same entity type in this way: -```sql -SELECT [b].[BlogId], [b].[Name], [b].[Url] -FROM [Blogs] AS [b] -WHERE ( - SELECT COUNT(*) - FROM [Posts] AS [p] - WHERE ([p].[Title] LIKE N'%fish%') AND ([b].[BlogId] = [p].[BlogId])) > 0 +```c# +modelBuilder.Entity().HasQueryFilter(b => !b.IsDeleted); +// The following overwrites the previous query filter: +modelBuilder.Entity().HasQueryFilter(b => b.TenantId == tenantId); ``` +### [EF 10+](#tab/ef10) + > [!NOTE] -> Currently EF Core does not detect cycles in global query filter definitions, so you should be careful when defining them. If specified incorrectly, cycles could lead to infinite loops during query translation. +> This feature is being introduced in EF Core 10.0 (in preview). + +In order to define multiple query filters on the same entity type, they must be *named*: + +[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/NamedFilters.cs#FilterConfiguration)] -## Accessing entity with query filter using required navigation +This allows you to manage each filter separately, including selectively disabling one but not the other. + +### [Older versions](#tab/older) + +Prior to EF 10, you can attach multiple filters to an entity type by calling once and combining your filters using the `&&` operator: + +```c# +modelBuilder.Entity().HasQueryFilter(b => !b.IsDeleted && b.TenantId == tenantId); +``` + +This unfortunately does not allow to selectively disable a single filter. + +*** + +## Disabling filters + +Filters may be disabled for individual LINQ queries by using the operator: + +[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/SoftDeletion.cs#DisableFilter)] + +If multiple named filters are configured, this disables all of them. To selectively disable specific filters (starting with EF 10), pass the list of filter names to be disabled: + +[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/NamedFilters.cs#DisableSoftDeletionFilter)] + +## Query filters and required navigations > [!CAUTION] > Using required navigation to access entity which has global query filter defined may lead to unexpected results. -Required navigation expects the related entity to always be present. If necessary related entity is filtered out by the query filter, the parent entity wouldn't be in result either. So you may get fewer elements than expected in result. +Required navigations in EF imply that the related entity is always present. Since inner joins may be used to fetch related entities, if a required related entity is filtered out by the query filter, the parent entity may get filtered out as well. This can result in unexpectedly retrieving fewer elements than expected. -To illustrate the problem, we can use the `Blog` and `Post` entities specified above and the following `OnModelCreating` method: +To illustrate the problem, we can use `Blog` and `Post` entities and configure them as follows: -[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/FilteredBloggingContextRequired.cs#IncorrectFilter)] +[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/QueryFiltersAndRequiredNavigations.cs#IncorrectFilter)] The model can be seeded with the following data: -[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/Program.cs#SeedData)] +[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/QueryFiltersAndRequiredNavigations.cs#SeedData)] -The problem can be observed when executing two queries: +The problem can be observed when executing the following two queries: -[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/Program.cs#Queries)] +[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/QueryFiltersAndRequiredNavigations.cs#Queries)] -With above setup, the first query returns all 6 `Post`s, however the second query only returns 3. This mismatch happens because `Include` method in the second query loads the related `Blog` entities. Since the navigation between `Blog` and `Post` is required, EF Core uses `INNER JOIN` when constructing the query: +With the above setup, the first query returns all 6 `Post` instances, but the second query returns only 3. This mismatch occurs because the `Include` method in the second query loads the related `Blog` entities. Since the navigation between `Blog` and `Post` is required, EF Core uses `INNER JOIN` when constructing the query: ```sql SELECT [p].[PostId], [p].[BlogId], [p].[Content], [p].[IsDeleted], [p].[Title], [t].[BlogId], [t].[Name], [t].[Url] @@ -95,26 +127,33 @@ INNER JOIN ( ) AS [t] ON [p].[BlogId] = [t].[BlogId] ``` -Use of the `INNER JOIN` filters out all `Post`s whose related `Blog`s have been removed by a global query filter. +Use of the `INNER JOIN` filters out all `Post` rows whose related `Blog` rows have been filtered out by a query filter. This problem can be addressed by configuring the navigation as optional navigation instead of required, causing EF to generate a `LEFT JOIN` instead of an `INNER JOIN`: -It can be addressed by using optional navigation instead of required. -This way the first query stays the same as before, however the second query will now generate `LEFT JOIN` and return 6 results. +[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/QueryFiltersAndRequiredNavigations.cs#OptionalNavigation)] -[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/FilteredBloggingContextRequired.cs#OptionalNavigation)] +An alternative approach is to specify consistent filters on both `Blog` and `Post` entity types; once matching filters are applied to both `Blog` and `Post`, `Post` rows that could end up in unexpected state are removed and both queries return 3 results. -Alternative approach is to specify consistent filters on both `Blog` and `Post` entities. -This way matching filters are applied to both `Blog` and `Post`. `Post`s that could end up in unexpected state are removed and both queries return 3 results. +[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/QueryFiltersAndRequiredNavigations.cs#MatchingFilters)] -[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/FilteredBloggingContextRequired.cs#MatchingFilters)] +## Query filters and IEntityTypeConfiguration -## Disabling Filters +If your query filter needs to access a tenant ID or similar contextual information, can pose an additional complication as unlike with `OnModelCreating`, there's no instance of your context type readily available to reference from the query filter. As a workaround, add a dummy context to your configuration type and reference that as follows: -Filters may be disabled for individual LINQ queries by using the operator. +```c# +private sealed class CustomerEntityConfiguration : IEntityTypeConfiguration +{ + private readonly SomeDbContext _context == null!; -[!code-csharp[Main](../../../samples/core/Querying/QueryFilters/Program.cs#IgnoreFilters)] + public void Configure(EntityTypeBuilder builder) + { + builder.HasQueryFilter(d => d.TenantId == _context.TenantId); + } +} +``` ## Limitations Global query filters have the following limitations: -* Filters can only be defined for the root Entity Type of an inheritance hierarchy. +* Filters can only be defined for the root entity type of an inheritance hierarchy. +* Currently EF Core does not detect cycles in global query filter definitions, so you should be careful when defining them. If specified incorrectly, cycles could lead to infinite loops during query translation. diff --git a/entity-framework/core/querying/how-query-works.md b/entity-framework/core/querying/how-query-works.md index 2444c20d5b..f19469a475 100644 --- a/entity-framework/core/querying/how-query-works.md +++ b/entity-framework/core/querying/how-query-works.md @@ -1,7 +1,7 @@ --- title: How Queries Work - EF Core description: General information on how Entity Framework Core internally compiles and executes queries -author: ajcvickers +author: SamMonoRT ms.date: 03/17/2020 uid: core/querying/how-query-works --- diff --git a/entity-framework/core/querying/pagination.md b/entity-framework/core/querying/pagination.md index 13937c48c4..75a3a0821f 100644 --- a/entity-framework/core/querying/pagination.md +++ b/entity-framework/core/querying/pagination.md @@ -12,9 +12,12 @@ Pagination refers to retrieving results in pages, rather than all at once; this > [!WARNING] > Regardless of the pagination method used, always make sure that your ordering is fully unique. For example, if results are ordered only by date, but there can be multiple results with the same date, then results could be skipped when paginating as they're ordered differently across two paginating queries. Ordering by both date and ID (or any other unique property or combination of properties) makes the ordering fully unique and avoids this problem. Note that relational databases do not apply any ordering by default, even on the primary key. +> [!NOTE] +> Azure Cosmos DB has its own mechanism for pagination, [see the dedicated documentation page](xref:core/providers/cosmos/querying#pagination). + ## Offset pagination -A common way to implement pagination with databases is to use the `Skip` and `Take` (`OFFSET` and `LIMIT` in SQL). Given a page size of 10 results, the third page can be fetched with EF Core as follows: +A common way to implement pagination with databases is to use the `Skip` and `Take` LINQ operators (`OFFSET` and `LIMIT` in SQL). Given a page size of 10 results, the third page can be fetched with EF Core as follows: [!code-csharp[Main](../../../samples/core/Querying/Pagination/Program.cs?name=OffsetPagination&highlight=4)] diff --git a/entity-framework/core/querying/related-data/eager.md b/entity-framework/core/querying/related-data/eager.md index 59f6e9552f..49886b9a89 100644 --- a/entity-framework/core/querying/related-data/eager.md +++ b/entity-framework/core/querying/related-data/eager.md @@ -70,10 +70,10 @@ Alternatively, identical operations can be applied for each navigation that is i Example: ```csharp -var orders = context.Orders.Where(o => o.Id > 1000).ToList(); +var orders = await context.Orders.Where(o => o.Id > 1000).ToListAsync(); // customer entities will have references to all orders where Id > 1000, rather than > 5000 -var filtered = context.Customers.Include(c => c.Orders.Where(o => o.Id > 5000)).ToList(); +var filtered = await context.Customers.Include(c => c.Orders.Where(o => o.Id > 5000)).ToListAsync(); ``` > [!NOTE] diff --git a/entity-framework/core/querying/single-split-queries.md b/entity-framework/core/querying/single-split-queries.md index 48616d9434..99ca263204 100644 --- a/entity-framework/core/querying/single-split-queries.md +++ b/entity-framework/core/querying/single-split-queries.md @@ -16,10 +16,10 @@ When working against relational databases, EF loads related entities by introduc Let's examine the following LINQ query and its translated SQL equivalent: ```c# -var blogs = ctx.Blogs +var blogs = await ctx.Blogs .Include(b => b.Posts) .Include(b => b.Contributors) - .ToList(); + .ToListAsync(); ``` ```sql @@ -35,10 +35,10 @@ In this example, since both `Posts` and `Contributors` are collection navigation Note that cartesian explosion does not occur when the two JOINs aren't at the same level: ```c# -var blogs = ctx.Blogs +var blogs = await ctx.Blogs .Include(b => b.Posts) .ThenInclude(p => p.Comments) - .ToList(); + .ToListAsync(); ``` ```sql @@ -56,9 +56,9 @@ In this query, `Comments` is a collection navigation of `Post`, unlike `Contribu JOINs can create another type of performance issue. Let's examine the following query, which only loads a single collection navigation: ```c# -var blogs = ctx.Blogs +var blogs = await ctx.Blogs .Include(b => b.Posts) - .ToList(); + .ToListAsync(); ``` ```sql @@ -73,14 +73,14 @@ Examining at the projected columns, each row returned by this query contains pro If you don't actually need the huge column, it's easy to simply not query for it: ```c# -var blogs = ctx.Blogs +var blogs = await ctx.Blogs .Select(b => new { b.Id, b.Name, b.Posts }) - .ToList(); + .ToListAsync(); ``` By using a projection to explicitly choose which columns you want, you can omit big columns and improve performance; note that this is a good idea regardless of data duplication, so consider doing it even when not loading a collection navigation. However, since this projects the blog to an anonymous type, the blog isn't tracked by EF and changes to it can't be saved back as usual. @@ -107,7 +107,7 @@ ORDER BY [b].[BlogId] ``` > [!WARNING] -> When using split queries with Skip/Take, pay special attention to making your query ordering fully unique; not doing so could cause incorrect data to be returned. For example, if results are ordered only by date, but there can be multiple results with the same date, then each one of the split queries could each get different results from the database. Ordering by both date and ID (or any other unique property or combination of properties) makes the ordering fully unique and avoids this problem. Note that relational databases do not apply any ordering by default, even on the primary key. +> When using split queries with Skip/Take on EF versions prior to 10, pay special attention to making your query ordering fully unique; not doing so could cause incorrect data to be returned. For example, if results are ordered only by date, but there can be multiple results with the same date, then each one of the split queries could each get different results from the database. Ordering by both date and ID (or any other unique property or combination of properties) makes the ordering fully unique and avoids this problem. Note that relational databases do not apply any ordering by default, even on the primary key. > [!NOTE] > One-to-one related entities are always loaded via JOINs in the same query, as it has no performance impact. diff --git a/entity-framework/core/querying/sql-queries.md b/entity-framework/core/querying/sql-queries.md index 2038a7a24c..c30f503e5f 100644 --- a/entity-framework/core/querying/sql-queries.md +++ b/entity-framework/core/querying/sql-queries.md @@ -9,26 +9,31 @@ uid: core/querying/sql-queries Entity Framework Core allows you to drop down to SQL queries when working with a relational database. SQL queries are useful if the query you want can't be expressed using LINQ, or if a LINQ query causes EF to generate inefficient SQL. SQL queries can return regular entity types or [keyless entity types](xref:core/modeling/keyless-entity-types) that are part of your model. -> [!TIP] -> You can view this article's [sample](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Querying/SqlQueries) on GitHub. - ## Basic SQL queries -You can use to begin a LINQ query based on a SQL query: +You can use to begin a LINQ query based on a SQL query: -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#FromSql)] +```csharp +var blogs = await context.Blogs + .FromSql($"SELECT * FROM dbo.Blogs") + .ToListAsync(); +``` > [!NOTE] > -> was introduced in EF Core 7.0. When using older versions, use instead. +> was introduced in EF Core 7.0. When using older versions, use instead. SQL queries can be used to execute a stored procedure which returns entity data: -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#FromSqlStoredProcedure)] +```csharp +var blogs = await context.Blogs + .FromSql($"EXECUTE dbo.GetMostPopularBlogs") + .ToListAsync(); +``` > [!NOTE] > -> can only be used directly on a `DbSet`. It cannot be composed over an arbitrary LINQ query. +> can only be used directly on a `DbSet`. It cannot be composed over an arbitrary LINQ query. ## Passing parameters @@ -37,21 +42,39 @@ SQL queries can be used to execute a stored procedure which returns entity data: > > When introducing any user-provided values into a SQL query, care must be taken to avoid SQL injection attacks. SQL injection occurs when a program integrates a user-provided string value into a SQL query, and the user-provided value is crafted to terminate the string and perform another malicious SQL operation. To learn more about SQL injection, [see this page](/sql/relational-databases/security/sql-injection). > -> The and methods are safe against SQL injection, and always integrate parameter data as a separate SQL parameter. However, the method can be vulnerable to SQL injection attacks, if improperly used. See below for more details. +> The and methods are safe against SQL injection, and always integrate parameter data as a separate SQL parameter. However, the method can be vulnerable to SQL injection attacks, if improperly used. See below for more details. The following example passes a single parameter to a stored procedure by including a parameter placeholder in the SQL query string and providing an additional argument: -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#FromSqlStoredProcedureParameter)] +```csharp +var user = "johndoe"; -While this syntax may look like regular C# [string interpolation](/dotnet/csharp/language-reference/tokens/interpolated), the supplied value is wrapped in a `DbParameter` and the generated parameter name inserted where the `{0}` placeholder was specified. This makes safe from SQL injection attacks, and sends the value efficiently and correctly to the database. +var blogs = await context.Blogs + .FromSql($"EXECUTE dbo.GetMostPopularBlogsForUser {user}") + .ToListAsync(); +``` + +While this syntax may look like regular C# [string interpolation](/dotnet/csharp/language-reference/tokens/interpolated), the supplied value is wrapped in a `DbParameter` and the generated parameter name inserted where the `{0}` placeholder was specified. This makes safe from SQL injection attacks, and sends the value efficiently and correctly to the database. When executing stored procedures, it can be useful to use named parameters in the SQL query string, especially when the stored procedure has optional parameters: -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#FromSqlStoredProcedureNamedSqlParameter)] +```csharp +var user = new SqlParameter("user", "johndoe"); + +var blogs = await context.Blogs + .FromSql($"EXECUTE dbo.GetMostPopularBlogsForUser @filterByUser={user}") + .ToListAsync(); +``` If you need more control over the database parameter being sent, you can also construct a `DbParameter` and supply it as a parameter value. This allows you to set the precise database type of the parameter, or facets such as its size, precision or length: -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#FromSqlStoredProcedureSqlParameter)] +```csharp +var user = new SqlParameter("user", "johndoe"); + +var blogs = await context.Blogs + .FromSql($"EXECUTE dbo.GetMostPopularBlogsForUser {user}") + .ToListAsync(); +``` > [!NOTE] > @@ -59,24 +82,31 @@ If you need more control over the database parameter being sent, you can also co ### Dynamic SQL and parameters - and its parameterization should be used wherever possible. However, there are certain scenarios where SQL needs to be dynamically pieced together, and database parameters cannot be used. For example, let's assume that a C# variable holds the name of the a property to be filtered by. It may be tempting to use a SQL query such as the following: + and its parameterization should be used wherever possible. However, there are certain scenarios where SQL needs to be dynamically pieced together, and database parameters cannot be used. For example, let's assume that a C# variable holds the name of the a property to be filtered by. It may be tempting to use a SQL query such as the following: ```c# var propertyName = "User"; var propertyValue = "johndoe"; -var blogs = context.Blogs +var blogs = await context.Blogs .FromSql($"SELECT * FROM [Blogs] WHERE {propertyName} = {propertyValue}") - .ToList(); + .ToListAsync(); ``` This code doesn't work, since databases do not allow parameterizing column names (or any other part of the schema). First, it's important to consider the implications of dynamically constructing a query - via SQL or otherwise. Accepting a column name from a user may allow them to choose a column that isn't indexed, making the query run extremely slowly and overload your database; or it may allow them to choose a column containing data you don't want exposed. Except for truly dynamic scenarios, it's usually better to have two queries for two column names, rather than using parameterization to collapse them into a single query. -If you've decided you do want to dynamically construct your SQL, you'll have to use , which allows interpolating variable data directly into the SQL string, instead of using a database parameter: +If you've decided you do want to dynamically construct your SQL, you'll have to use , which allows interpolating variable data directly into the SQL string, instead of using a database parameter: -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#FromSqlRawStoredProcedureParameter)] +```csharp +var columnName = "Url"; +var columnValue = new SqlParameter("columnValue", "http://someurl/"); + +var blogs = await context.Blogs + .FromSqlRaw($"SELECT * FROM [Blogs] WHERE {columnName} = @columnValue", columnValue) + .ToListAsync(); +``` In the above code, the column name is inserted directly into the SQL, using C# string interpolation. It is your responsibility to make sure this string value is safe, sanitizing it if it comes from an unsafe origin; this means detecting special characters such as semicolons, comments, and other SQL constructs, and either escaping them properly or rejecting such inputs. @@ -84,13 +114,21 @@ On the other hand, the column value is sent via a `DbParameter`, and is therefor > [!WARNING] > -> Be very careful when using , and always make sure values are either from a safe origin, or are properly sanitized. SQL injection attacks can have disasterous consequences for your application. +> Be very careful when using , and always make sure values are either from a safe origin, or are properly sanitized. SQL injection attacks can have disastrous consequences for your application. ## Composing with LINQ You can compose on top of the initial SQL query using LINQ operators; EF Core will treat your SQL as a subquery and compose over it in the database. The following example uses a SQL query that selects from a Table-Valued Function (TVF). And then composes on it using LINQ to do filtering and sorting. -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#FromSqlComposed)] +```csharp +var searchTerm = "Lorem ipsum"; + +var blogs = await context.Blogs + .FromSql($"SELECT * FROM dbo.SearchBlogs({searchTerm})") + .Where(b => b.Rating > 3) + .OrderByDescending(b => b.Rating) + .ToListAsync(); +``` The above query generates the following SQL: @@ -107,7 +145,14 @@ ORDER BY [b].[Rating] DESC The [`Include`](xref:core/querying/related-data/eager) operator can be used to load related data, just like with any other LINQ query: -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#FromSqlInclude)] +```csharp +var searchTerm = "Lorem ipsum"; + +var blogs = await context.Blogs + .FromSql($"SELECT * FROM dbo.SearchBlogs({searchTerm})") + .Include(b => b.Posts) + .ToListAsync(); +``` Composing with LINQ requires your SQL query to be composable, since EF Core will treat the supplied SQL as a subquery. Composable SQL queries generally begin with the `SELECT` keyword, and cannot contain SQL features that aren't valid in a subquery, such as: @@ -115,44 +160,108 @@ Composing with LINQ requires your SQL query to be composable, since EF Core will - On SQL Server, a trailing query-level hint (for example, `OPTION (HASH JOIN)`) - On SQL Server, an `ORDER BY` clause that isn't used with `OFFSET 0` OR `TOP 100 PERCENT` in the `SELECT` clause -SQL Server doesn't allow composing over stored procedure calls, so any attempt to apply additional query operators to such a call will result in invalid SQL. Use or right after or to make sure that EF Core doesn't try to compose over a stored procedure. +SQL Server doesn't allow composing over stored procedure calls, so any attempt to apply additional query operators to such a call will result in invalid SQL. Use or right after or to make sure that EF Core doesn't try to compose over a stored procedure. ## Change Tracking -Queries that use or follow the exact same change tracking rules as any other LINQ query in EF Core. For example, if the query projects entity types, the results are tracked by default. +Queries that use or follow the exact same change tracking rules as any other LINQ query in EF Core. For example, if the query projects entity types, the results are tracked by default. The following example uses a SQL query that selects from a Table-Valued Function (TVF), then disables change tracking with the call to [`AsNoTracking`](xref:core/querying/tracking#no-tracking-queries): -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#FromSqlAsNoTracking)] +```csharp +var searchTerm = "Lorem ipsum"; + +var blogs = await context.Blogs + .FromSql($"SELECT * FROM dbo.SearchBlogs({searchTerm})") + .AsNoTracking() + .ToListAsync(); +``` ## Querying scalar (non-entity) types -> [!NOTE] -> This feature was introduced in EF Core 7.0. +While is useful for querying entities defined in your model, allows you to easily query for scalar, non-entity types via SQL, without needing to drop down to lower-level data access APIs. For example, the following query fetches all the IDs from the `Blogs` table: -While is useful for querying entities defined in your model, allows you to easily query for scalar, non-entity types via SQL, without needing to drop down to lower-level data access APIs. For example, the following query fetches all the IDs from the `Blogs` table: +### [SQL Server](#tab/sqlserver) -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#SqlQuery)] +```c# +var ids = await context.Database + .SqlQuery($"SELECT [BlogId] FROM [Blogs]") + .ToListAsync(); +``` + +### [SQLite](#tab/sqlite) + +```c# +var ids = await context.Database + .SqlQuery($""" + SELECT "BlogId" FROM "Blogs" + """) + .ToListAsync(); +``` + +### [PostgreSQL](#tab/postgres) + +```c# +var ids = await context.Database + .SqlQuery($""" + SELECT "BlogId" FROM "Blogs" + """) + .ToListAsync(); +``` + +*** You can also compose LINQ operators over your SQL query. However, since your SQL becomes a subquery whose output column needs to be referenced by the SQL EF adds, you must name the output column `Value`. For example, the following query returns the IDs which are above the ID average: -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#SqlQueryComposed)] +### [SQL Server](#tab/sqlserver) - can be used with any scalar type supported by your database provider. If you'd like to use a type not supported by your database provider, you can use [pre-convention configuration](xref:core/modeling/bulk-configuration#pre-convention-configuration) to define a value conversion for it. +```c# +var overAverageIds = await context.Database + .SqlQuery($"SELECT [BlogId] AS [Value] FROM [Blogs]") + .Where(id => id > context.Blogs.Average(b => b.BlogId)) + .ToListAsync(); +``` - allows for dynamic construction of SQL queries, just like does for entity types. +### [SQLite](#tab/sqlite) -## Executing non-querying SQL +```c# +var overAverageIds = await context.Database + .SqlQuery($""" + SELECT "BlogId" AS "Value" FROM "Blogs" + """) + .Where(id => id > context.Blogs.Average(b => b.BlogId)) + .ToListAsync(); +``` -In some scenarios, it may be necessary to execute SQL which does not return any data, typically for modifying data in the database or calling a stored procedure which doesn't return any result sets. This can be done via : +### [PostgreSQL](#tab/postgres) -[!code-csharp[Main](../../../samples/core/Querying/SqlQueries/Program.cs#ExecuteSql)] +```c# +var overAverageIds = await context.Database + .SqlQuery($""" + SELECT "BlogId" AS "Value" FROM "Blogs" + """) + .Where(id => id > context.Blogs.Average(b => b.BlogId)) + .ToListAsync(); +``` -This executes the provided SQL and returns the number of rows modified. protects against SQL injection by using safe parameterization, just like , and allows for dynamic construction of SQL queries, just like does for queries. +*** -> [!NOTE] -> -> Prior to EF Core 7.0, it was sometimes necessary to use the `ExecuteSql` APIs to perform a "bulk update" on the database, as above; this is considerably more efficient than querying for all matching rows and then using `SaveChanges` to modify them. EF Core 7.0 introduced [ExecuteUpdate and ExecuteDelete](xref:core/what-is-new/ef-core-7.0/whatsnew#executeupdate-and-executedelete-bulk-updates), which made it possible to express efficient bulk update operations via LINQ. It's recommended to use those APIs whenever possible, instead of `ExecuteSql`. + can be used with any scalar type supported by your database provider. If you'd like to use a type not supported by your database provider, you can use [pre-convention configuration](xref:core/modeling/bulk-configuration#pre-convention-configuration) to define a value conversion for it. + + allows for dynamic construction of SQL queries, just like does for entity types. + +## Executing non-querying SQL + +In some scenarios, it may be necessary to execute SQL which does not return any data, typically for modifying data in the database or calling a stored procedure which doesn't return any result sets. This can be done via : + +```csharp +using (var context = new BloggingContext()) +{ + var rowsModified = context.Database.ExecuteSql($"UPDATE [Blogs] SET [Url] = NULL"); +} +``` + +This executes the provided SQL and returns the number of rows modified. protects against SQL injection by using safe parameterization, just like , and allows for dynamic construction of SQL queries, just like does for queries. ## Limitations diff --git a/entity-framework/core/querying/tracking.md b/entity-framework/core/querying/tracking.md index 890c0c841e..7d11841cae 100644 --- a/entity-framework/core/querying/tracking.md +++ b/entity-framework/core/querying/tracking.md @@ -42,7 +42,7 @@ Since a tracking query uses the change tracker, EF Core does identity resolution * Don't use the change tracker and don't do identity resolution. * Return a new instance of the entity even when the same entity is contained in the result multiple times. -Tracking and no-tracking can be combined in the same query. That is, you can have a no-tracking query, which does identity resolution in the results. Just like queryable operator, we've added another operator . There's also associated entry added in the enum. When the query to use identity resolution is configured with no tracking, a stand-alone change tracker is used in the background when generating query results so each instance is materialized only once. Since this change tracker is different from the one in the context, the results are not tracked by the context. After the query is enumerated fully, the change tracker goes out of scope and garbage collected as required. +Tracking and no-tracking can be combined in the same query. That is, you can have a no-tracking query, which does identity resolution in the results. Just like queryable operator, we've added another operator . There's also associated entry added in the enum. When the query to use identity resolution is configured with no tracking, a stand-alone change tracker is used in the background when generating query results so each instance is materialized only once. Since this change tracker is different from the one in the context, the results are not tracked by the context. After the query is enumerated fully, the change tracker goes out of scope and garbage collected as required. [!code-csharp[Main](../../../samples/core/Querying/Tracking/Program.cs#NoTrackingWithIdentityResolution)] @@ -52,7 +52,7 @@ If you find yourself changing the tracking behavior for many queries, you may wa [!code-csharp[Main](../../../samples/core/Querying/Tracking/NonTrackingBloggingContext.cs?name=OnConfiguring&highlight=5)] -This makes all your queries no-tracking by default. You can still add to make specific queries tracking. +This makes all your queries no-tracking by default. You can still add to make specific queries tracking. ## Tracking and custom projections diff --git a/entity-framework/core/saving/basic.md b/entity-framework/core/saving/basic.md index 9068f2423a..ec972e066d 100644 --- a/entity-framework/core/saving/basic.md +++ b/entity-framework/core/saving/basic.md @@ -1,20 +1,20 @@ --- title: Basic SaveChanges - EF Core description: Basic information on adding, updating and removing data using SaveChanges with Entity Framework Core -author: ajcvickers +author: SamMonoRT ms.date: 4/30/2023 uid: core/saving/basic --- # Basic SaveChanges - is one of two techniques for saving changes to the database with EF. With this method, you perform one or more *tracked changes* (add, update, delete), and then apply those changes by calling the `SaveChanges` method. As an alternative, and can be used without involving the change tracker. For an introductory comparison of these two techniques, see the [Overview page](xref:core/saving/index) on saving data. + is one of two techniques for saving changes to the database with EF. With this method, you perform one or more *tracked changes* (add, update, delete), and then apply those changes by calling the `SaveChanges` method. As an alternative, and can be used without involving the change tracker. For an introductory comparison of these two techniques, see the [Overview page](xref:core/saving/index) on saving data. > [!TIP] > You can view this article's [sample](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Saving/Basics/) on GitHub. ## Adding Data -Use the method to add new instances of your entity classes. The data will be inserted into the database when you call : +Use the method to add new instances of your entity classes. The data will be inserted into the database when you call : [!code-csharp[Main](../../../samples/core/Saving/Basics/Sample.cs#Add)] @@ -31,7 +31,7 @@ Simply modify the values assigned to properties and then call `SaveChanges`: ## Deleting Data -Use the method to delete instances of your entity classes: +Use the method to delete instances of your entity classes: [!code-csharp[Main](../../../samples/core/Saving/Basics/Sample.cs#Remove)] diff --git a/entity-framework/core/saving/cascade-delete.md b/entity-framework/core/saving/cascade-delete.md index 13eba62719..62df8623f1 100644 --- a/entity-framework/core/saving/cascade-delete.md +++ b/entity-framework/core/saving/cascade-delete.md @@ -1,7 +1,7 @@ --- title: Cascade Delete - EF Core description: Configuring cascading behaviors triggered when an entity is deleted or severed from its principal/parent -author: ajcvickers +author: SamMonoRT ms.date: 08/10/2021 uid: core/saving/cascade-delete --- @@ -162,7 +162,7 @@ EF Core always applies configured cascading behaviors to tracked entities. This ### Cascade delete in the database -Many database systems also offer cascading behaviors that are triggered when an entity is deleted in the database. EF Core configures these behaviors based on the cascade delete behavior in the EF Core model when a database is created using or EF Core migrations. For example, using the model above, the following table is created for posts when using SQL Server: +Many database systems also offer cascading behaviors that are triggered when an entity is deleted in the database. EF Core configures these behaviors based on the cascade delete behavior in the EF Core model when a database is created using or EF Core migrations. For example, using the model above, the following table is created for posts when using SQL Server: ```sql CREATE TABLE [Posts] ( @@ -441,7 +441,7 @@ Databases can also be configured to cascade nulls like this when a principal/par > [!TIP] > Be sure to read sections above before coming here. The configuration options will likely not make sense if the preceding material is not understood. -Cascade behaviors are configured per relationship using the method in . For example: +Cascade behaviors are configured per relationship using the method in . For example: [!code-csharp[BookConfiguration](../../../../samples/core/Miscellaneous/NewInEFCore6/EntityTypeConfigurationAttributeSample.cs?name=BookConfiguration)] -Normally, this configuration class must be instantiated and called into from . For example: +Normally, this configuration class must be instantiated and called into from . For example: ```csharp protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -2728,7 +2728,7 @@ public class Book --> [!code-csharp[BookEntityType](../../../../samples/core/Miscellaneous/NewInEFCore6/EntityTypeConfigurationAttributeSample.cs?name=BookEntityType)] -This attribute means that EF Core will use the specified `IEntityTypeConfiguration` implementation whenever the `Book` entity type is included in a model. The entity type is included in a model using one of the normal mechanisms. For example, by creating a property for the entity type: +This attribute means that EF Core will use the specified `IEntityTypeConfiguration` implementation whenever the `Book` entity type is included in a model. The entity type is included in a model using one of the normal mechanisms. For example, by creating a property for the entity type: [!code-csharp[DbContext](../../../../samples/core/Miscellaneous/NewInEFCore6/EntityTypeConfigurationAttributeSample.cs?name=DbContext)] -Or by registering it in : +Or by registering it in : ```csharp protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -2775,7 +2775,7 @@ SQL Server [sparse columns](/sql/relational-databases/tables/use-sparse-columns) --> [!code-csharp[UserEntityType](../../../../samples/core/Miscellaneous/NewInEFCore6/SparseColumnsSample.cs?name=UserEntityType)] -There may be millions of users, with only a handful of these being moderators. This means mapping the `ForumName` as sparse might make sense here. This can now be configured using `IsSparse` in . For example: +There may be millions of users, with only a handful of these being moderators. This means mapping the `ForumName` as sparse might make sense here. This can now be configured using `IsSparse` in . For example: [!code-csharp[LookupByAnyProperty](../../../../samples/core/Miscellaneous/NewInEFCore8/LookupByKeySample.cs?name=LookupByAnyProperty)] -This lookup requires a scan of all tracked `Post` instances, and so will be less efficient than key lookups. However, it is usually still faster than naive queries using . +This lookup requires a scan of all tracked `Post` instances, and so will be less efficient than key lookups. However, it is usually still faster than naive queries using . Finally, it is also possible to perform lookups against composite keys, other combinations of multiple properties, or when the property type is not known at compile time. For example: @@ -2130,7 +2130,7 @@ Queries using `DateOnly` and `TimeOnly` work in the expected manner. For example --> [!code-csharp[OpenSchools](../../../../samples/core/Miscellaneous/NewInEFCore8/DateOnlyTimeOnlySample.cs?name=OpenSchools)] -This query translates to the following SQL, as shown by : +This query translates to the following SQL, as shown by : ```sql DECLARE @__today_0 date = '2023-02-07'; @@ -2173,7 +2173,7 @@ Combining two features from EF8, we can now query for opening hours by indexing --> [!code-csharp[OpenSchoolsJson](../../../../samples/core/Miscellaneous/NewInEFCore8/DateOnlyTimeOnlySample.cs?name=OpenSchoolsJson)] -This query translates to the following SQL, as shown by : +This query translates to the following SQL, as shown by : ```sql DECLARE @__today_0 date = '2023-02-07'; @@ -2248,7 +2248,7 @@ You can also perform this check programmatically in your application or tests us ## Enhancements to SQLite scaffolding -SQLite only supports four primitive data types--INTEGER, REAL, TEXT, and BLOB. Previously, this meant that when you reverse engineerd a SQLite database to [scaffold an EF Core model](xref:core/managing-schemas/scaffolding), the resulting entity types would only included properties of type `long`, `double`, `string`, and `byte[]`. Additional .NET types are supported by the EF Core SQLite provider by converting between them and one of the four primitive SQLite types. +SQLite only supports four primitive data types--INTEGER, REAL, TEXT, and BLOB. Previously, this meant that when you reverse engineered a SQLite database to [scaffold an EF Core model](xref:core/managing-schemas/scaffolding), the resulting entity types would only included properties of type `long`, `double`, `string`, and `byte[]`. Additional .NET types are supported by the EF Core SQLite provider by converting between them and one of the four primitive SQLite types. In EF Core 8, we now use the data format and column type name in addition to the SQLite type in order to determine a more appropriate .NET type to use in the model. The following tables show some of the cases where the additional information leads to better property types in the model. @@ -2357,7 +2357,7 @@ modelBuilder.Entity() With this configuration, EF will exclude sending the value to the database when it is set to `Level.Beginner`, and instead `Level.Intermediate` is assigned by the database. This isn't what was intended! -The problem would not have occurred if the the enum been defined with the "unknown" or "unspecified" value being the database default: +The problem would not have occurred if the enum been defined with the "unknown" or "unspecified" value being the database default: ```csharp public enum Level @@ -2588,7 +2588,6 @@ SQL Server automatic [optimistic concurrency](xref:core/saving/concurrency) is h ```csharp modelBuilder.Entity() .Property(e => e.RowVersion) - .HasConversion() .IsRowVersion(); ``` diff --git a/entity-framework/core/what-is-new/ef-core-9.0/breaking-changes.md b/entity-framework/core/what-is-new/ef-core-9.0/breaking-changes.md index ccea62062c..459cea6c47 100644 --- a/entity-framework/core/what-is-new/ef-core-9.0/breaking-changes.md +++ b/entity-framework/core/what-is-new/ef-core-9.0/breaking-changes.md @@ -1,8 +1,8 @@ --- title: Breaking changes in EF Core 9 (EF9) - EF Core description: List of breaking changes introduced in Entity Framework Core 9 (EF9) -author: ajcvickers -ms.date: 03/25/2024 +author: SamMonoRT +ms.date: 01/17/2025 uid: core/what-is-new/ef-core-9.0/breaking-changes --- @@ -20,31 +20,452 @@ EF Core 9 targets .NET 8. This means that existing applications that target .NET ## Summary -| **Breaking change** | **Impact** | -|:-----------------------------------------------------------------------------------|------------| -| [Sync I/O via the Azure Cosmos DB provider is no longer supported](#cosmos-nosync) | Medium | +> [!NOTE] +> If you are using Azure Cosmos DB, please see the [separate section below on Azure Cosmos DB breaking changes](#azure-cosmos-db-breaking-changes). + +| **Breaking change** | **Impact** | +|:----------------------------------------------------------------------------------------------------------|------------| +| [Exception is thrown when applying migrations if there are pending model changes](#pending-model-changes) | High | +| [Exception is thrown when applying migrations in an explicit transaction](#migrations-transaction) | High | +| [`Microsoft.EntityFrameworkCore.Design` not found when using EF tools](#tools-design) | Medium | +| [`EF.Functions.Unhex()` now returns `byte[]?`](#unhex) | Low | +| [Compiled models now reference value converter methods directly](#compiled-model-private-methods) | Low | +| [SqlFunctionExpression's nullability arguments' arity validated](#sqlfunctionexpression-nullability) | Low | +| [`ToString()` method now returns empty string for `null` instances](#nullable-tostring) | Low | +| [Shared framework dependencies were updated to 9.0.x](#shared-framework-dependencies) | Low | + +## High-impact changes + + + +### Exception is thrown when applying migrations if there are pending model changes + +[Tracking Issue #33732](https://github.com/dotnet/efcore/issues/33732) + +#### Old behavior + +If the model has pending changes compared to the last migration they are not applied with the rest of the migrations when `Migrate` is called. + +#### New behavior + +Starting with EF Core 9.0, if the model has pending changes compared to the last migration an exception is thrown when `dotnet ef database update`, `Migrate` or `MigrateAsync` is called: +> :::no-loc text="The model for context 'DbContext' has pending changes. Add a new migration before updating the database. This exception can be suppressed or logged by passing event ID 'RelationalEventId.PendingModelChangesWarning' to the 'ConfigureWarnings' method in 'DbContext.OnConfiguring' or 'AddDbContext'."::: + +#### Why + +Forgetting to add a new migration after making model changes is a common mistake that can be hard to diagnose in some cases. The new exception ensures that the app's model matches the database after the migrations are applied. + +#### Mitigations + +There are several common situations when this exception can be thrown: + +- There are no migrations at all. This is common when the database is updated through other means. + - **Mitigation**: If you don't plan to use migrations for managing the database schema then remove the `Migrate` or `MigrateAsync` call, otherwise add a migration. +- There is at least one migration, but the model snapshot is missing. This is common for migrations created manually. + - **Mitigation**: Add a new migration using EF tooling, this will update the model snapshot. +- The model wasn't modified by the developer, but it's built in a non-deterministic way causing EF to detect it as modified. This is common when `new DateTime()`, `DateTime.Now`, `DateTime.UtcNow`, or `Guid.NewGuid()` are used in objects supplied to `HasData()`. + - **Mitigation**: Add a new migration, examine its contents to locate the cause, and replace the dynamic data with a static, hardcoded value in the model. The migration should be recreated after the model is fixed. If dynamic data has to be used for seeding consider using [the new seeding pattern](/ef/core/what-is-new/ef-core-9.0/whatsnew#improved-data-seeding) instead of `HasData()`. +- The last migration was created for a different provider than the one used to apply the migrations. + - **Mitigation**: This is an unsupported scenario. The warning can be suppressed using the code snippet below, but this scenario will likely stop working in a future EF Core release. The recommended solution is [to generate a separate set of migrations for each provider](xref:core/managing-schemas/migrations/providers). +- The migrations are generated, modified or chosen dynamically by replacing some of the EF services. + - **Mitigation**: The warning is a false positive in this case and should be suppressed: + `options.ConfigureWarnings(w => w.Ignore(RelationalEventId.PendingModelChangesWarning))` +- You are using ASP.NET Core Identity and change options that affect the model, such as: + + ```csharp + .AddDefaultIdentity(options => + { + options.Stores.SchemaVersion = IdentitySchemaVersions.Version2; + options.Stores.MaxLengthForKeys = 256; + options.SignIn.RequireConfirmedAccount = false; + }) + ``` + + - **Mitigation**: To make sure that the options are applied consistently the app needs to be specified as the startup project when running the EF tools or, alternatively, `IDesignTimeDbContextFactory` needs to be implemented in the project containing the `DbContext`: + + ```csharp + public class DatabaseContextDesignTimeFactory : IDesignTimeDbContextFactory + { + public DatabaseContext CreateDbContext(string[] args) + { + var services = new ServiceCollection(); + AddIdentity(services); + var serviceProvider = services.BuildServiceProvider(); + var optionsBuilder = new DbContextOptionsBuilder(); + optionsBuilder.UseApplicationServiceProvider(serviceProvider); + optionsBuilder.UseSqlServer(); + return new DatabaseContext(optionsBuilder.Options); + } + + public static IServiceCollection AddIdentity(IServiceCollection services) + { + services.AddDefaultIdentity(options => + { + options.Stores.SchemaVersion = IdentitySchemaVersions.Version2; + options.Stores.MaxLengthForKeys = 256; + options.SignIn.RequireConfirmedAccount = false; + }) + .AddRoles() + .AddEntityFrameworkStores(); + + return services; + } + } + ``` + +If your scenario doesn't fall under any of the above cases and adding a new migration creates the same migration each time or an empty migration and the exception is still thrown then create a small repro project and [share it with the EF team in a new issue](https://github.com/dotnet/efcore/issues/new/choose). + + + +### Exception is thrown when applying migrations in an explicit transaction + +[Tracking Issue #17578](https://github.com/dotnet/efcore/issues/17578) + +#### Old behavior + +To apply migrations resiliently the following pattern was commonly used: + +```csharp +await dbContext.Database.CreateExecutionStrategy().ExecuteAsync(async () => +{ + await using var transaction = await dbContext.Database.BeginTransactionAsync(cancellationToken); + await dbContext.Database.MigrateAsync(cancellationToken); + await transaction.CommitAsync(cancellationToken); +}); +``` + +#### New behavior + +Starting with EF Core 9.0, `Migrate` and `MigrateAsync` calls will start a transaction and execute the commands using an `ExecutionStrategy` and if your app uses the above pattern an exception is thrown: +> :::no-loc text="An error was generated for warning 'Microsoft.EntityFrameworkCore.Migrations.MigrationsUserTransactionWarning': A transaction was started before applying migrations. This prevents a database lock to be acquired and hence the database will not be protected from concurrent migration applications. The transactions and execution strategy are already managed by EF as needed. Remove the external transaction. This exception can be suppressed or logged by passing event ID 'RelationalEventId.MigrationsUserTransactionWarning' to the 'ConfigureWarnings' method in 'DbContext.OnConfiguring' or 'AddDbContext'."::: + +#### Why + +Using an explicit transaction prevents a database lock to be acquired and hence the database will not be protected from concurrent migration applications, it also limits EF on how it can manage the transactions internally. + +#### Mitigations + +If there is only one database call inside the transaction then remove the external transaction and `ExecutionStrategy`: + +```csharp +await dbContext.Database.MigrateAsync(cancellationToken); +``` + +Otherwise, if your scenario requires an explicit transaction and you have other mechanism in place to prevent concurrent migration application, then ignore the warning: + +```csharp +options.ConfigureWarnings(w => w.Ignore(RelationalEventId.MigrationsUserTransactionWarning)) +``` ## Medium-impact changes + + +### `Microsoft.EntityFrameworkCore.Design` not found when using EF tools + +[Tracking Issue #35265](https://github.com/dotnet/efcore/issues/35265) + +#### Old behavior + +Previusly, the EF tools required `Microsoft.EntityFrameworkCore.Design` to be referenced in the following way. + +```XML + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + +``` + +#### New behavior + +Starting with .NET SDK 9.0.200 an exception is thrown when an EF tool is invoked: +> :::no-loc text="Could not load file or assembly 'Microsoft.EntityFrameworkCore.Design, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified."::: + +#### Why + +EF tools were relying on an undocumented behavior of .NET SDK that caused private assets to be included in the generated `.deps.json` file. This was fixed in [sdk#45259](https://github.com/dotnet/sdk/pull/45259). Unfortunately, the EF change to account for this doesn't meet the servicing bar for EF 9.0.x, so it will be fixed in EF 10. + +#### Mitigations + +As a workaround before EF 10 is released you can mark the `Design` assembly reference as publishable: + +```XML + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + true + +``` + +This will include it in the generated `.deps.json` file, but has a side effect of copying `Microsoft.EntityFrameworkCore.Design.dll` to the output and publish folders. + +## Low-impact changes + + + +### `EF.Functions.Unhex()` now returns `byte[]?` + +[Tracking Issue #33864](https://github.com/dotnet/efcore/issues/33864) + +#### Old behavior + +The `EF.Functions.Unhex()` function was previously annotated to return `byte[]`. + +#### New behavior + +Starting with EF Core 9.0, Unhex() is now annotated to return `byte[]?`. + +#### Why + +`Unhex()` is translated to the SQLite `unhex` function, which returns NULL for invalid inputs. As a result, `Unhex()` returned `null` for those cases, in violation of the annotation. + +#### Mitigations + +If you are sure that the text content passed to `Unhex()` represents a valid, hexadecimal string, you can simply add the null-forgiving operator as an assertion that the invocation will never return null: + +```csharp +var binaryData = await context.Blogs.Select(b => EF.Functions.Unhex(b.HexString)!).ToListAsync(); +``` + +Otherwise, add runtime checks for null on the return value of Unhex(). + + + +### Compiled models now reference value converter methods directly + +[Tracking Issue #35033](https://github.com/dotnet/efcore/issues/35033) + +#### Old behavior + +Previously, when using value converters with compiled models (using `dotnet ef dbcontext optimize`), EF would reference the converter type and everything worked correctly. + +```c# +public sealed class BooleanToCharConverter() : ValueConverter(v => ConvertToChar(v), v => ConvertToBoolean(v)) +{ + public static readonly BooleanToCharConverter Default = new(); + + private static char ConvertToChar(bool value) // Private method + => value ? 'Y' : 'N'; + + private static bool ConvertToBoolean(char value) // Private method + => value == 'Y'; +} +``` + +#### New behavior + +Starting with EF Core 9.0, EF generates code that directly references the conversion methods themselves. If these methods are private, compilation will fail. + +#### Why + +This change was necessary to support NativeAOT. + +#### Mitigations + +Make the methods referenced by value converters public or internal instead of private. + + + +### SqlFunctionExpression's nullability arguments' arity validated + +[Tracking Issue #33852](https://github.com/dotnet/efcore/issues/33852) + +#### Old behavior + +Previously it was possible to create a `SqlFunctionExpression` with a different number of arguments and nullability propagation arguments. + +#### New behavior + +Starting with EF Core 9.0, EF now throws if the number of arguments and nullability propagation arguments do not match. + +#### Why + +Not having matching number of arguments and nullability propagation arguments can lead to unexpected behavior. + +#### Mitigations + +Make sure the `argumentsPropagateNullability` has same number of elements as the `arguments`. When in doubt use `false` for nullability argument. + + + +### `ToString()` method now returns empty string for `null` instances + +[Tracking Issue #33941](https://github.com/dotnet/efcore/issues/33941) + +#### Old behavior + +Previously EF returned inconsistent results for the `ToString()` method when the argument value was `null`. E.g. `ToString()` on `bool?` property with `null` value returned `null`, but for non-property `bool?` expressions whose value was `null` it returned `True`. The behavior was also inconsistent for other data types, e.g. `ToString()` on `null` value enum returned empty string. + +#### New behavior + +Starting with EF Core 9.0, the `ToString()` method now consistently returns empty string in all cases when the argument value is `null`. + +#### Why + +The old behavior was inconsistent across different data types and situations, as well as not aligned with the [C# behavior](/dotnet/api/system.nullable-1.tostring#returns). + +#### Mitigations + +To revert to the old behavior, rewrite the query accordingly: + +```csharp +var newBehavior = context.Entity.Select(x => x.NullableBool.ToString()); +var oldBehavior = context.Entity.Select(x => x.NullableBool == null ? null : x.NullableBool.ToString()); +``` + + + +### Shared framework dependencies were updated to 9.0.x + +#### Old behavior + +Apps using the `Microsoft.NET.Sdk.Web` SDK and targetting net8.0 would resolve packages like `System.Text.Json`, `Microsoft.Extensions.Caching.Memory`, `Microsoft.Extensions.Configuration.Abstractions`, `Microsoft.Extensions.Logging` and `Microsoft.Extensions.DependencyModel` from the shared framework, so these assemblies wouldn't normally be deployed with the app. + +#### New behavior + +While EF Core 9.0 still supports net8.0 it now references the 9.0.x versions of `System.Text.Json`, `Microsoft.Extensions.Caching.Memory`, `Microsoft.Extensions.Configuration.Abstractions`, `Microsoft.Extensions.Logging` and `Microsoft.Extensions.DependencyModel`. Apps targetting net8.0 will not be able to leverage the shared framework to avoid deploying these assemblies. + +#### Why + +The matching dependency versions contain the latest security fixes and using them simplifies the servicing model for EF Core. + +#### Mitigations + +Change your app to target net9.0 to get the previous behavior. + +## Azure Cosmos DB breaking changes + +Extensive work has gone into making the Azure Cosmos DB provider better in 9.0. The changes include a number of high-impact breaking changes; if you are upgrading an existing application, please read the following carefully. + +| **Breaking change** | **Impact** | +|:---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | +| [The discriminator property is now named `$type` instead of `Discriminator`](#cosmos-discriminator-name-change) | High | +| [The `id` property no longer contains the discriminator by default](#cosmos-id-property-changes) | High | +| [The JSON `id` property is mapped to the key](#cosmos-key-changes) | High | +| [Sync I/O via the Azure Cosmos DB provider is no longer supported](#cosmos-nosync) | Medium | +| [SQL queries must now project JSON values directly](#cosmos-sql-queries-with-value) | Medium | +| [Undefined results are now automatically filtered from query results](#cosmos-undefined-filtering) | Medium | +| [Incorrectly translated queries are no longer translated](#cosmos-incorrect-translations) | Medium | +| [`HasIndex` now throws instead of being ignored](#cosmos-hasindex-throws) | Low | +| [`IncludeRootDiscriminatorInJsonId` was renamed to `HasRootDiscriminatorInJsonId` after 9.0.0-rc.2](#cosmos-IncludeRootDiscriminatorInJsonId-rename) | Low | + +### High-impact changes + + + +#### The discriminator property is now named `$type` instead of `Discriminator` + +[Tracking Issue #34269](https://github.com/dotnet/efcore/issues/34269) + +##### Old behavior + +EF automatically adds a discriminator property to JSON documents to identify the entity type that the document represents. In previous versions of EF, this JSON property used to be named `Discriminator` by default. + +##### New behavior + +Starting with EF Core 9.0, the discriminator property is now called `$type` by default. If you have existing documents in Azure Cosmos DB from previous versions of EF, these use the old `Discriminator` naming, and after upgrading to EF 9.0, queries against those documents will fail. + +##### Why + +An emerging JSON practice uses a `$type` property in scenarios where a document's type needs to be identified. For example, .NET's System.Text.Json also supports polymorphism, using `$type` as its default discriminator property name ([docs](/dotnet/standard/serialization/system-text-json/polymorphism#customize-the-type-discriminator-name)). To align with the rest of the ecosystem and make it easier to interoperate with external tools, the default was changed. + +##### Mitigations + +The easiest mitigation is to simply configure the name of the discriminator property to be `Discriminator`, just as before: + +```csharp +modelBuilder.Entity().HasDiscriminator("Discriminator"); +``` + +Doing this for all your top-level entity types will make EF behave just like before. + +At this point, if you wish, you can also update all your documents to use the new `$type` naming. + + + +#### The `id` property now contains only the EF key property by default + +[Tracking Issue #34179](https://github.com/dotnet/efcore/issues/34179) + +##### Old behavior + +Previously, EF inserted the discriminator value of your entity type into the `id` property of the document. For example, if you saved a `Blog` entity type with an `Id` property containing 8, the JSON `id` property would contain `Blog|8`. + +##### New behavior + +Starting with EF Core 9.0, the JSON `id` property no longer contains the discriminator value, and only contains the value of your key property. For the above example, the JSON `id` property would simply be `8`. If you have existing documents in Azure Cosmos DB from previous versions of EF, these have the discriminator value in the JSON `id` property, and after upgrading to EF 9.0, queries against those documents will fail. + +##### Why + +Since the JSON `id` property must be unique, the discriminator was previously added to it to allow different entities with the same key value to exist. For example, this allowed having both a `Blog` and a `Post` with an `Id` property containing the value 8 within the same container and partition. This aligned better with relational database data modeling patterns, where each entity type is mapped to its own table, and therefore has its own key-space. + +EF 9.0 generally changed the mapping to be more aligned with common Azure Cosmos DB NoSQL practices and expectations, rather than to correspond to the expectations of users coming from relational databases. In addition, having the discriminator value in the `id` property made it more difficult for external tools and systems to interact with EF-generated JSON documents; such external systems aren't generally aware of the EF discriminator values, which are by default derived from .NET types. + +##### Mitigations + +The easiest mitigation is to simply configure EF to include the discriminator in the JSON `id` property, as before. A new configuration option has been introduced for this purpose: + +```csharp +modelBuilder.Entity().HasDiscriminatorInJsonId(); +``` + +Doing this for all your top-level entity types will make EF behave just like before. + +At this point, if you wish, you can also update all your documents to rewrite their JSON `id` property. Note that this is only possible if entities of different types don't share the same id value within the same container. + + + +#### The JSON `id` property is mapped to the key + +[Tracking Issue #34179](https://github.com/dotnet/efcore/issues/34179) + +##### Old behavior + +Previously, EF created a shadow property mapped to the JSON `id` property, unless one of the properties was mapped to `id` explicitly. + +##### New behavior + +Starting with EF Core 9, the key property will be mapped to the JSON `id` property by convention if possible. This means that the key property will no longer be persisted in the document under a different name with the same value, so non-EF code consuming the documents and relying on this property being present would no longer function correctly. + +##### Why + +EF 9.0 generally changed the mapping to be more aligned with common Azure Cosmos DB NoSQL practices and expectations. And it is not common to store the key value twice in the document. + +##### Mitigations + +If you would like to preserve EF Core 8 behavior the easiest mitigation is to use a new configuration option that has been introduced for this purpose: + +```csharp +modelBuilder.Entity().HasShadowId(); +``` + +Doing this for all your top-level entity types will make EF behave just like before. Or you could apply it to all entity types in the model with one call: + +```csharp +modelBuilder.HasShadowIds(); +``` + +### Medium-impact changes + -### Sync I/O via the Azure Cosmos DB provider is no longer supported +#### Sync I/O via the Azure Cosmos DB provider is no longer supported [Tracking Issue #32563](https://github.com/dotnet/efcore/issues/32563) -#### Old behavior +##### Old behavior Previously, calling synchronous methods like `ToList` or `SaveChanges` would cause EF Core to block synchronously using `.GetAwaiter().GetResult()` when executing async calls against the Azure Cosmos DB SDK. This can result in deadlock. -#### New behavior +##### New behavior Starting with EF Core 9.0, EF now throws by default when attempting to use synchronous I/O. The exception message is "Azure Cosmos DB does not support synchronous I/O. Make sure to use and correctly await only async methods when using Entity Framework Core to access Azure Cosmos DB. See [https://aka.ms/ef-cosmos-nosync](https://aka.ms/ef-cosmos-nosync) for more information." -#### Why +##### Why Synchronous blocking on asynchronous methods can result in deadlock, and the Azure Cosmos DB SDK only supports async methods. -#### Mitigations +##### Mitigations In EF Core 9.0, the error can be suppressed with: @@ -56,3 +477,214 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) ``` That being said, applications should stop using sync APIs with Azure Cosmos DB since this is not supported by the Azure Cosmos DB SDK. The ability to suppress the exception will be removed in a future release of EF Core, after which the only option will be to use async APIs. + + + +#### SQL queries must now project JSON values directly + +[Tracking Issue #25527](https://github.com/dotnet/efcore/issues/25527) + +##### Old behavior + +Previously, EF generated queries such as the following: + +```sql +SELECT c["City"] FROM root c +``` + +Such queries cause Azure Cosmos DB to wrap each result in a JSON object, as follows: + +```json +[ + { + "City": "Berlin" + }, + { + "City": "México D.F." + } +] +``` + +##### New behavior + +Starting with EF Core 9.0, EF now adds the `VALUE` modifier to queries as follows: + +```sql +SELECT VALUE c["City"] FROM root c +``` + +Such queries cause Azure Cosmos DB to return the values directly, without being wrapped: + +```json +[ + "Berlin", + "México D.F." +] +``` + +If your application makes use of [SQL queries](xref:core/providers/cosmos/querying#sql-queries), such queries are likely broken after upgrading to EF 9.0, as they don't include the `VALUE` modifier. + +##### Why + +Wrapping each result in an additional JSON object can cause performance degradation in some scenarios, bloats the JSON result payload, and isn't the natural way to work with Azure Cosmos DB. + +##### Mitigations + +To mitigate, simply add the `VALUE` modifier to the projections of your SQL queries, as shown above. + + + +#### Undefined results are now automatically filtered from query results + +[Tracking Issue #25527](https://github.com/dotnet/efcore/issues/25527) + +##### Old behavior + +Previously, EF generated queries such as the following: + +```sql +SELECT c["City"] FROM root c +``` + +Such queries cause Azure Cosmos DB to wrap each result in a JSON object, as follows: + +```json +[ + { + "City": "Berlin" + }, + { + "City": "México D.F." + } +] +``` + +If any of the results were undefined (e.g. the `City` property was absent from the document), an empty document was returned, and EF would return `null` for that result. + +##### New behavior + +Starting with EF Core 9.0, EF now adds the `VALUE` modifier to queries as follows: + +```sql +SELECT VALUE c["City"] FROM root c +``` + +Such queries cause Azure Cosmos DB to return the values directly, without being wrapped: + +```json +[ + "Berlin", + "México D.F." +] +``` + +The Azure Cosmos DB behavior is to automatically filter `undefined` values out of results; this means that if one of the `City` properties is absent from the document, the query would return just a single result, rather than two results, with one being `null`. + +##### Why + +Wrapping each result in an additional JSON object can cause performance degradation in some scenarios, bloats the JSON result payload, and isn't the natural way to work with Azure Cosmos DB. + +##### Mitigations + +If getting `null` values for undefined results is important for your application, coalesce the `undefined` values to `null` using the new `EF.Functions.Coalesce` operator: + +```csharp +var users = await context.Customer + .Select(c => EF.Functions.CoalesceUndefined(c.City, null)) + .ToListAsync(); +``` + + + +#### Incorrectly translated queries are no longer translated + +[Tracking Issue #34123](https://github.com/dotnet/efcore/issues/34123) + +##### Old behavior + +Previously, EF translated queries such as the following: + +```csharp +var sessions = await context.Sessions + .Take(5) + .Where(s => s.Name.StartsWith("f")) + .ToListAsync(); +``` + +However, the SQL translation for this query was incorrect: + +```sql +SELECT c +FROM root c +WHERE ((c["Discriminator"] = "Session") AND STARTSWITH(c["Name"], "f")) +OFFSET 0 LIMIT @__p_0 +``` + +In SQL, the `WHERE` clause is evaluated _before_ the `OFFSET` and `LIMIT` clauses; but in the LINQ query above, the `Take` operator appears before the `Where` operator. As a result, such queries could return incorrect results. + +##### New behavior + +Starting with EF Core 9.0, such queries are no longer translated, and an exception is thrown. + +##### Why + +Incorrect translations can cause silent data corruption, which can introduce hard-to-discover bugs in your application. EF always prefer to fail-fast by throwing up-front rather than to possibly cause data corruption. + +##### Mitigations + +If you were happy with the previous behavior and would like to execute the same SQL, simply swap around the order of LINQ operators: + +```csharp +var sessions = await context.Sessions + .Where(s => s.Name.StartsWith("f")) + .Take(5) + .ToListAsync(); +``` + +Unfortunately, Azure Cosmos DB does not currently support the `OFFSET` and `LIMIT` clauses in SQL subqueries, which is what the proper translation of the original LINQ query requires. + +### Low-impact changes + + + +#### `HasIndex` now throws instead of being ignored + +[Tracking Issue #34023](https://github.com/dotnet/efcore/issues/34023) + +##### Old behavior + +Previously, calls to were ignored by the EF Cosmos DB provider. + +##### New behavior + +The provider now throws if is specified. + +##### Why + +In Azure Cosmos DB, all properties are indexed by default, and no indexing needs to be specified. While it's possible to define a custom indexing policy, this isn't currently supported by EF, and can be done via the Azure Portal without EF support. Since calls weren't doing anything, they are no longer allowed. + +##### Mitigations + +Remove any calls to . + + + +#### `IncludeRootDiscriminatorInJsonId` was renamed to `HasRootDiscriminatorInJsonId` after 9.0.0-rc.2 + +[Tracking Issue #34717](https://github.com/dotnet/efcore/pull/34717) + +##### Old behavior + +The `IncludeRootDiscriminatorInJsonId` API was introduced in 9.0.0 rc.1. + +##### New behavior + +For the final release of EF Core 9.0, the API was renamed to `HasRootDiscriminatorInJsonId` + +##### Why + +Another related API was renamed to start with `Has` instead of `Include`, and so this one was renamed for consistency as well. + +##### Mitigations + +If your code is using the `IncludeRootDiscriminatorInJsonId` API, simply change it to reference `HasRootDiscriminatorInJsonId` instead. diff --git a/entity-framework/core/what-is-new/ef-core-9.0/plan.md b/entity-framework/core/what-is-new/ef-core-9.0/plan.md deleted file mode 100644 index 4da73b27cf..0000000000 --- a/entity-framework/core/what-is-new/ef-core-9.0/plan.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Plan for Entity Framework Core 9 -description: The themes and features planned for EF Core 9 -author: ajcvickers -ms.date: 12/01/2023 -uid: core/what-is-new/ef-core-9.0/plan ---- - -# Plan for Entity Framework Core 9 - -Coming soon... diff --git a/entity-framework/core/what-is-new/ef-core-9.0/whatsnew.md b/entity-framework/core/what-is-new/ef-core-9.0/whatsnew.md index 0091fd8bc6..dd6003db2b 100644 --- a/entity-framework/core/what-is-new/ef-core-9.0/whatsnew.md +++ b/entity-framework/core/what-is-new/ef-core-9.0/whatsnew.md @@ -1,104 +1,506 @@ --- title: What's New in EF Core 9 description: Overview of new features in EF Core 9 -author: ajcvickers -ms.date: 03/07/2024 +author: SamMonoRT +ms.date: 10/21/2024 uid: core/what-is-new/ef-core-9.0/whatsnew --- # What's New in EF Core 9 -EF Core 9 (EF9) is the next release after EF Core 8 and is scheduled for release in November 2024. See [_Plan for Entity Framework Core 9_](xref:core/what-is-new/ef-core-9.0/plan) for details. +EF Core 9.0 (EF9) was released in November 2024 and is a Short Term Support (STS) release. EF9 will be supported until November 10, 2026. EF9 is available as [daily builds](https://github.com/dotnet/efcore/blob/main/docs/DailyBuilds.md) which contain all the latest EF9 features and API tweaks. The samples here make use of these daily builds. > [!TIP] > You can run and debug into the samples by [downloading the sample code from GitHub](https://github.com/dotnet/EntityFramework.Docs). Each section below links to the source code specific to that section. -EF9 targets .NET 8, and can therefore be used with either [.NET 8 (LTS)](https://dotnet.microsoft.com/download/dotnet/8.0) or a .NET 9 preview. +EF9 targets .NET 8, and can therefore be used with either [.NET 8 (LTS)](https://dotnet.microsoft.com/download/dotnet/8.0) or [.NET 9](https://dotnet.microsoft.com/download/dotnet/9.0). > [!TIP] > The _What's New_ docs are updated for each preview. All the samples are set up to use the [EF9 daily builds](https://github.com/dotnet/efcore/blob/main/docs/DailyBuilds.md), which usually have several additional weeks of completed work compared to the latest preview. We strongly encourage use of the daily builds when testing new features so that you're not doing your testing against stale bits. + + +## Azure Cosmos DB for NoSQL + +EF 9.0 brings substantial improvements to the EF Core provider for Azure Cosmos DB; significant parts of the provider have been rewritten to provide new functionality, allow new forms of queries, and better align the provider with Azure Cosmos DB best practices. The main high-level improvements are listed below; for a full list, [see this epic issue](https://github.com/dotnet/efcore/issues/33033). + +> [!WARNING] +> As part of the improvements going into the provider, a number of high-impact breaking changes had to be made; if you are upgrading an existing application, please read the [breaking changes section](xref:core/what-is-new/ef-core-9.0/breaking-changes#cosmos-breaking-changes) carefully. + +### Improvements querying with partition keys and document IDs + +Each document stored in an Azure Cosmos DB database has a unique resource ID. In addition, each document can contain a "partition key" which determines the logical partitioning of data such that the database can be effectively scaled. More information on choosing partition keys can be found in [_Partitioning and horizontal scaling in Azure Cosmos DB_](/azure/cosmos-db/partitioning-overview). + +In EF 9.0, the Azure Cosmos DB provider is significantly better at identifying partition key comparisons in your LINQ queries, and extracting them out to ensure your queries are only sent to the relevant partition; this can greatly improve the performance of your queries and reduce RU charges. For example: + +```csharp +var sessions = await context.Sessions + .Where(b => b.PartitionKey == "someValue" && b.Username.StartsWith("x")) + .ToListAsync(); +``` + +In this query, the provider automatically recognizes the comparison on `PartitionKey`; if we examine the logs, we'll see the following: + +```console +Executed ReadNext (189.8434 ms, 2.8 RU) ActivityId='8cd669ed-2ca5-4f2b-8923-338899071361', Container='test', Partition='["someValue"]', Parameters=[] +SELECT VALUE c +FROM root c +WHERE STARTSWITH(c["Username"], "x") +``` + +Note that the `WHERE` clause does not contain `PartitionKey`: that comparison has been "lifted" out and is used to execute the query only against the relevant partition. In previous versions, the comparison was left in the `WHERE` clause in many situations, causing the query to be executed against all partitions and resulting in increased costs and reduced performance. + +In addition, if your query also provides a value for the document's ID property, and doesn't include any other query operations, the provider can apply an additional optimization: + +```csharp +var somePartitionKey = "someValue"; +var someId = 8; +var sessions = await context.Sessions + .Where(b => b.PartitionKey == somePartitionKey && b.Id == someId) + .SingleAsync(); +``` + +The logs show the following for this query: + +```console +Executed ReadItem (73 ms, 1 RU) ActivityId='13f0f8b8-d481-47f0-bf41-67f7deb008b2', Container='test', Id='8', Partition='["someValue"]' +``` + +Here, no SQL query is sent at all. Instead, the provider performs an an extremely efficient _point read_ (`ReadItem` API), which directly fetches the document given the partition key and ID. This is the most efficient and cost-effective kind of read you can perform in Azure Cosmos DB; [see the Azure Cosmos DB documentation](/azure/cosmos-db/nosql/how-to-dotnet-read-item) for more information about point reads. + +To learn more about querying with partition keys and point reads, [see the querying documentation page](xref:core/providers/cosmos/querying). + +### Hierarchical partition keys + +> [!TIP] +> The code shown here comes from [HierarchicalPartitionKeysSample.cs](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Miscellaneous/NewInEFCore9.Cosmos/HierarchicalPartitionKeysSample.cs). + +Azure Cosmos DB originally supported a single partition key, but has since expanded partitioning capabilities to also support [subpartitioning through the specification of up to three levels of hierarchy in the partition key](/azure/cosmos-db/hierarchical-partition-keys). EF Core 9 brings full support for hierarchical partition keys, allowing you take advantage of the better performance and cost savings associated with this feature. + +Partition keys are specified using the model building API, typically in . There must be a mapped property in the entity type for each level of the partition key. For example, consider a `UserSession` entity type: + + +[!code-csharp[UserSession](../../../../samples/core/Miscellaneous/NewInEFCore9.Cosmos/HierarchicalPartitionKeysSample.cs?name=UserSession)] + +The following code specifies a three-level partition key using the `TenantId`, `UserId`, and `SessionId` properties: + + +[!code-csharp[HasPartitionKey](../../../../samples/core/Miscellaneous/NewInEFCore9.Cosmos/HierarchicalPartitionKeysSample.cs?name=HasPartitionKey)] + +> [!TIP] +> This partition key definition follows the example given in [_Choose your hierarchical partition keys_](/azure/cosmos-db/hierarchical-partition-keys#choose-your-hierarchical-partition-keys) from the Azure Cosmos DB documentation. + +Notice how, starting with EF Core 9, properties of any mapped type can be used in the partition key. For `bool` and numeric types, like the `int SessionId` property, the value is used directly in the partition key. Other types, like the `Guid UserId` property, are automatically converted to strings. + +When querying, EF automatically extracts the partition key values from queries and applies them to the Azure Cosmos DB query API to ensure the queries are constrained appropriately to the fewest number of partitions possible. For example, consider the following LINQ query that supplies all three partition key values in the hierarchy: + + +[!code-csharp[FullPartitionKey](../../../../samples/core/Miscellaneous/NewInEFCore9.Cosmos/HierarchicalPartitionKeysSample.cs?name=FullPartitionKey)] + +When executing this query, EF Core will extract the values of the `tenantId`, `userId`, and `sessionId` parameters, and pass them to the Azure Cosmos DB query API as the partition key value. For example, see the logs from executing the query above: + +```output +info: 6/10/2024 19:06:00.017 CosmosEventId.ExecutingSqlQuery[30100] (Microsoft.EntityFrameworkCore.Database.Command) + Executing SQL query for container 'UserSessionContext' in partition '["Microsoft","99a410d7-e467-4cc5-92de-148f3fc53f4c",7.0]' [Parameters=[]] + SELECT c + FROM root c + WHERE ((c["Discriminator"] = "UserSession") AND CONTAINS(c["Username"], "a")) +``` + +Notice that the partition key comparisons have been removed from the `WHERE` clause, and are instead used as the partition key for efficient execution: `["Microsoft","99a410d7-e467-4cc5-92de-148f3fc53f4c",7.0]`. + +For more information, see the documentation on [querying with partition keys](xref:core/providers/cosmos/querying#partition-keys). + +### Significantly improved LINQ querying capabilities + +In EF 9.0, the LINQ translation capabilities of the the Azure Cosmos DB provider have been greatly expanded, and the provider can now execute significantly more query types. The full list of query improvements is too long to list, but here are the main highlights: + +* Full support for EF's primitive collections, allowing you to perform LINQ querying on collections of e.g. ints or strings. See [What's new in EF8: primitive collections](xref:core/what-is-new/ef-core-8.0/whatsnew#primitive-collections) for more information. +* Support for arbitrary querying over non-primitive collections. +* Lots of additional LINQ operators are now supported: indexing into collections, `Length`/`Count`, `ElementAt`, `Contains`, and many others. +* Support for aggregate operators such as `Count` and `Sum`. +* Additional function translations (see the [function mappings documentation](xref:core/providers/cosmos/querying#function-mappings) for the full list of supported translations): + * Translations for `DateTime` and `DateTimeOffset` component members (`DateTime.Year`, `DateTimeOffset.Month`...). + * `EF.Functions.IsDefined` and `EF.Functions.CoalesceUndefined` now allow dealing with `undefined` values. + * `string.Contains`, `StartsWith` and `EndsWith` now support `StringComparison.OrdinalIgnoreCase`. + +For the full list of querying improvements, see [this issue](https://github.com/dotnet/efcore/issues/33033): + +### Improved modeling aligned to Azure Cosmos DB and JSON standards + +EF 9.0 maps to Azure Cosmos DB documents in more natural ways for a JSON-based document database, and helps interoperate with other systems accessing your documents. Although this entails breaking changes, APIs exist which allow reverting back to the pre-9.0 behavior in all cases. + +#### Simplified `id` properties without discriminators + +First, previous versions of EF inserted the discriminator value into the JSON `id` property, producing documents such as the following: + +```json +{ + "id": "Blog|1099", + ... +} +``` + +This was done in order to allow for documents of different types (e.g. Blog and Post) and the same key value (1099) to exist within the same container partition. Starting with EF 9.0, the `id` property contains contains only the key value: + +```json +{ + "id": 1099, + ... +} +``` + +This is a more natural way to map to JSON, and makes it easier for external tools and systems to interact with EF-generated JSON documents; such external systems aren't generally aware of the EF discriminator values, which are by default derived from .NET types. + +Note this is a breaking change, since EF will no longer be able to query existing documents with the old `id` format. An API has been introduced to revert to the previous behavior, see the [breaking change note](xref:core/what-is-new/ef-core-9.0/breaking-changes#cosmos-id-property-changes) and the [the documentation](xref:core/providers/cosmos/modeling#Discriminators) for more details. + +#### Discriminator property renamed to `$type` + +The default discriminator property was previously named `Discriminator`. EF 9.0 changes the default to `$type`: + +```json +{ + "id": 1099, + "$type": "Blog", + ... +} +``` + +This follows the emerging standard for JSON polymorphism, allowing better interoperability with other tools. For example, .NET's System.Text.Json also supports polymorphism, using `$type` as its default discriminator property name ([docs](/dotnet/standard/serialization/system-text-json/polymorphism#customize-the-type-discriminator-name)). + +Note this is a breaking change, since EF will no longer be able to query existing documents with the old discriminator property name. See the [breaking change note](xref:core/what-is-new/ef-core-9.0/breaking-changes#cosmos-discriminator-name-change) for details on how to revert to the previous naming. + +### Vector similarity search (preview) + +Azure Cosmos DB now offers preview support for vector similarity search. Vector search is a fundamental part of some application types, including AI, semantic search and others. Azure Cosmos DB allows you to store vectors directly in your documents alongside the rest of your data, meaning you can perform all of your queries against a single database. This can considerably simplify your architecture and remove the need for an additional, dedicated vector database solution in your stack. To learn more about Azure Cosmos DB vector search, [see the documentation](/azure/cosmos-db/nosql/vector-search). + +Once your Azure Cosmos DB container is properly set up, using vector search via EF is a simple matter of adding a vector property and configuring it: + +```c# +public class Blog +{ + ... + + public float[] Vector { get; set; } +} + +public class BloggingContext +{ + ... + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity() + .Property(b => b.Embeddings) + .IsVector(DistanceFunction.Cosine, dimensions: 1536); + } +} +``` + +Once that's done, use the `EF.Functions.VectorDistance()` function in LINQ queries to perform vector similarity search: + +```c# +var blogs = await context.Blogs + .OrderBy(s => EF.Functions.VectorDistance(s.Vector, vector)) + .Take(5) + .ToListAsync(); +``` + +For more information, see the [documentation on vector search](xref:core/providers/cosmos/vector-search). + +### Pagination support + +The Azure Cosmos DB provider now allows for paginating through query results via _continuation tokens_, which is far more efficient and cost-effective than the traditional use of `Skip` and `Take`: + +```c# +var firstPage = await context.Posts + .OrderBy(p => p.Id) + .ToPageAsync(pageSize: 10, continuationToken: null); + +var continuationToken = firstPage.ContinuationToken; +foreach (var post in page.Values) +{ + // Display/send the posts to the user +} +``` + +The new `ToPageAsync` operator returns a `CosmosPage`, which exposes a continuation token that can be used to efficiently resume the query at a later point, fetching the next 10 items: + +```c# +var nextPage = await context.Sessions.OrderBy(s => s.Id).ToPageAsync(10, continuationToken); +``` + +For more information, [see the documentation section on pagination](xref:core/providers/cosmos/querying#pagination). + +### FromSql for safer SQL querying + +The Azure Cosmos DB provider has allowed SQL querying via . However, that API can be susceptible to SQL injection attacks when user-provided data is interpolated or concatenated into the SQL. In EF 9.0, you can now use the new `FromSql` method, which always integrates parameterized data as a parameter outside the SQL: + +```c# +var maxAngle = 8; +_ = await context.Blogs + .FromSql($"SELECT VALUE c FROM root c WHERE c.Angle1 <= {maxAngle}") + .ToListAsync(); +``` + +For more information, [see the documentation section on pagination](xref:core/providers/cosmos/querying#pagination). + +### Role-based access + +Azure Cosmos DB for NoSQL includes a [built-in role-based access control (RBAC) system](/azure/cosmos-db/role-based-access-control). This is now supported by EF9 for all data plane operations. However, Azure Cosmos DB SDK does not support RBAC for management plane operations in Azure Cosmos DB. Use Azure Management API instead of `EnsureCreatedAsync` with RBAC. + +### Synchronous I/O is now blocked by default + +Azure Cosmos DB for NoSQL does not support synchronous (blocking) APIs from application code. Previously, EF masked this by blocking for you on async calls. However, this both encourages synchronous I/O use, which is bad practice, and [may cause deadlocks](https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html). Therefore, starting with EF 9, an exception is thrown when synchronous access is attempted. For example: + +Synchronous I/O can still be used for now by configuring the warning level appropriately. For example, in `OnConfiguring` on your `DbContext` type: + +```csharp +protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder.ConfigureWarnings(b => b.Ignore(CosmosEventId.SyncNotSupported)); +``` + +Note, however, that we plan to fully remove sync support in EF 11, so start updating to use async methods like `ToListAsync` and `SaveChangesAsync` as soon as possible! + +## AOT and pre-compiled queries + +> [!WARNING] +> NativeAOT and query precompilation are highly experimental features, and are not yet suited for production use. The support described below should be viewed as infrastructure towards the final feature, which will be released in a future version. We encourage you to experiment with the current support and report on your experiences, but recommend against deploying EF NativeAOT applications in production. + +EF 9.0 brings initial, experimental support for [.NET NativeAOT](/dotnet/core/deploying/native-aot), allowing the publishing of ahead-of-time compiled applications which make use of EF to access databases. To support LINQ queries in NativeAOT mode, EF relies on _query precompilation_: this mechanism statically identifies EF LINQ queries and generates C# [_interceptors_](/dotnet/csharp/whats-new/csharp-12#interceptors), which contain code to execute each specific query. This can significantly cut down on your application's startup time, as the heavy lifting of processing and compiling your LINQ queries into SQL no longer happens every time your application starts up. Instead, each query's interceptor contains the finalized SQL for that query, as well as optimized code to materialize database results as .NET objects. + +For example, given a program with the following EF query: + +```c# +var blogs = await context.Blogs.Where(b => b.Name == "foo").ToListAsync(); +``` + +EF will generate a C# interceptor into your project, which will take over the query execution. Instead of processing the query and translating it to SQL every time the program starts, the interceptor has the SQL embedded right into it (for SQL Server in this case), allowing your program to start up much faster: + +```c# +var relationalCommandTemplate = ((IRelationalCommandTemplate)(new RelationalCommand(materializerLiftableConstantContext.CommandBuilderDependencies, "SELECT [b].[Id], [b].[Name]\nFROM [Blogs] AS [b]\nWHERE [b].[Name] = N'foo'", new IRelationalParameter[] { }))); +``` + +In addition, the same interceptor contains code to materialize your .NET object from database results: + +```c# +var instance = new Blog(); +UnsafeAccessor_Blog_Id_Set(instance) = dataReader.GetInt32(0); +UnsafeAccessor_Blog_Name_Set(instance) = dataReader.GetString(1); +``` + +This uses another new .NET feature - [unsafe accessors](/dotnet/api/system.runtime.compilerservices.unsafeaccessorattribute), to inject data from the database into your object's private fields. + +If you're interested in NativeAOT and like to experiment with cutting-edge features, give this a try! Just be aware that the feature should be considered unstable, and currently has many limitations; we expect to stabilize it and make it more suitable for production usage in EF 10. + +See the [NativeAOT documentation page](xref:core/performance/nativeaot-and-precompiled-queries) for more details. + ## LINQ and SQL translation -The team is working on some significant architecture changes to the query pipeline in EF Core 9 as part of our continued improvements to JSON mapping and document databases. This means we need to get **people like you** to run your code on these new internals. (If you're reading a "What's New" doc at this point in the release, then you're a really engaged part of the community; thank you!) We have over 120,000 tests, but it's not enough! We need you, people running real code on our bits, in order to find issues and ship a solid release! +Like with every release, EF9 includes a large number of improvements to the LINQ querying capabilities. New queries can be translated, and many SQL translations for supported scenarios have been improved, for both better performance and readability. - +The number of improvements is too great to list them all here. Below, some of the more important improvements are highlighted; see [this issue](https://github.com/dotnet/efcore/issues/34151) for a more complete listing of the work done in 9.0. + +We'd like to call out Andrea Canciani ([@ranma42](https://github.com/ranma42)) for his numerous, high-quality contributions to optimizing the SQL that gets generated by EF Core! -### Prune columns passed to OPENJSON's WITH clause + + +### Complex types: GroupBy and ExecuteUpdate support + +#### GroupBy > [!TIP] -> The code shown here comes from [JsonColumnsSample.cs](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Miscellaneous/NewInEFCore9/JsonColumnsSample.cs). +> The code shown here comes from [ComplexTypesSample.cs](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Miscellaneous/NewInEFCore9/ComplexTypesSample.cs). -EF9 removes unnecessary columns when calling `OPENJSON WITH`. For example, consider a query that obtains a count from a JSON collection using a predicate: +EF9 supports grouping by a complex type instance. For example: -[!code-csharp[PruneJSON](../../../../samples/core/Miscellaneous/NewInEFCore9/JsonColumnsSample.cs?name=PruneJSON)] +[!code-csharp[GroupByComplexType](../../../../samples/core/Miscellaneous/NewInEFCore9/ComplexTypesSample.cs?name=GroupByComplexType)] -In EF8, this query generates the following SQL when using the Azure SQL database provider: +EF translates this as grouping by each member of the complex type, which aligns with the semantics of complex types as value objects. For example, on Azure SQL: ```sql -SELECT [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Title], [p].[PromoText], [p].[Metadata] -FROM [Posts] AS [p] -WHERE ( - SELECT COUNT(*) - FROM OPENJSON([p].[Metadata], '$.Updates') WITH ( - [PostedFrom] nvarchar(45) '$.PostedFrom', - [UpdatedBy] nvarchar(max) '$.UpdatedBy', - [UpdatedOn] date '$.UpdatedOn', - [Commits] nvarchar(max) '$.Commits' AS JSON - ) AS [u] - WHERE [u].[UpdatedOn] >= @__date_0) = 1 +SELECT [s].[StoreAddress_City], [s].[StoreAddress_Country], [s].[StoreAddress_Line1], [s].[StoreAddress_Line2], [s].[StoreAddress_PostCode], COUNT(*) AS [Count] +FROM [Stores] AS [s] +GROUP BY [s].[StoreAddress_City], [s].[StoreAddress_Country], [s].[StoreAddress_Line1], [s].[StoreAddress_Line2], [s].[StoreAddress_PostCode] ``` -Notice that the `UpdatedBy`, and `Commits` are not needed in this query. Starting with EF9, these columns are now pruned away: +#### ExecuteUpdate -```sql -SELECT [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Title], [p].[PromoText], [p].[Metadata] -FROM [Posts] AS [p] -WHERE ( - SELECT COUNT(*) - FROM OPENJSON([p].[Metadata], '$.Updates') WITH ( - [PostedFrom] nvarchar(45) '$.PostedFrom', - [UpdatedOn] date '$.UpdatedOn' - ) AS [u] - WHERE [u].[UpdatedOn] >= @__date_0) = 1 -``` +> [!TIP] +> The code shown here comes from [ExecuteUpdateSample.cs](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Miscellaneous/NewInEFCore9/ExecuteUpdateSample.cs). -In some scenarios, this results in complete removal of the `WITH` clause. For example: +Similarly, in EF9 `ExecuteUpdate` has also been improved to accept complex type properties. However, each member of the complex type must be specified explicitly. For example: -[!code-csharp[PruneJSONPrimitive](../../../../samples/core/Miscellaneous/NewInEFCore9/JsonColumnsSample.cs?name=PruneJSONPrimitive)] +[!code-csharp[UpdateComplexType](../../../../samples/core/Miscellaneous/NewInEFCore9/ExecuteUpdateSample.cs?name=UpdateComplexType)] -In EF8, this query translates to the following SQL: +This generates SQL that updates each column mapped to the complex type: ```sql -SELECT [t].[Id], [t].[Text] -FROM [Tags] AS [t] -WHERE ( - SELECT COUNT(*) - FROM OPENJSON([t].[Text]) WITH ([value] nvarchar(max) '$') AS [t0]) = 1 +UPDATE [s] +SET [s].[StoreAddress_City] = @__complex_type_newAddress_0_City, + [s].[StoreAddress_Country] = @__complex_type_newAddress_0_Country, + [s].[StoreAddress_Line1] = @__complex_type_newAddress_0_Line1, + [s].[StoreAddress_Line2] = NULL, + [s].[StoreAddress_PostCode] = @__complex_type_newAddress_0_PostCode +FROM [Stores] AS [s] +WHERE [s].[Region] = N'Germany' ``` -In EF9, this has been improved to: +Previously, you had to manually list out the different properties of the complex type in your `ExecuteUpdate` call. + + + +### Prune unneeded elements from SQL + +Previously, EF sometimes produced SQL which contained elements that weren't actually needed; in most cases, these were possibly needed at an earlier stage of SQL processing, and were left behind. EF9 now prunes most such elements, resulting in more compact and, in some cases, more efficient SQL. + +#### Table pruning + +As a first example, the SQL generated by EF sometimes contained JOINs to tables which weren't actually needed in the query. Consider the following model, which uses [table-per-type (TPT) inheritance mapping](xref:core/modeling/inheritance#table-per-type-configuration): + +```csharp +public class Order +{ + public int Id { get; set; } + ... + + public Customer Customer { get; set; } +} + +public class DiscountedOrder : Order +{ + public double Discount { get; set; } +} + +public class Customer +{ + public int Id { get; set; } + ... + + public List Orders { get; set; } +} + +public class BlogContext : DbContext +{ + ... + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().UseTptMappingStrategy(); + } +} +``` + +If we then execute the following query to get all Customers with at least one Order: + +```csharp +var customers = await context.Customers.Where(o => o.Orders.Any()).ToListAsync(); +``` + +EF8 generated the following SQL: ```sql -SELECT [t].[Id], [t].[Text] -FROM [Tags] AS [t] -WHERE ( - SELECT COUNT(*) - FROM OPENJSON([t].[Text]) AS [t0]) = 1 +SELECT [c].[Id], [c].[Name] +FROM [Customers] AS [c] +WHERE EXISTS ( + SELECT 1 + FROM [Orders] AS [o] + LEFT JOIN [DiscountedOrders] AS [d] ON [o].[Id] = [d].[Id] + WHERE [c].[Id] = [o].[CustomerId]) ``` +Note that the query contained a join to the `DiscountedOrders` table even though no columns were referenced on it. EF9 generates a pruned SQL without the join: + +```c# +SELECT [c].[Id], [c].[Name] +FROM [Customers] AS [c] +WHERE EXISTS ( + SELECT 1 + FROM [Orders] AS [o] + WHERE [c].[Id] = [o].[CustomerId]) +``` + +#### Projection pruning + +Similarly, let's examine the following query: + +```csharp +var orders = await context.Orders + .Where(o => o.Amount > 10) + .Take(5) + .CountAsync(); +``` + +On EF8, this query generated the following SQL: + +```sql +SELECT COUNT(*) +FROM ( + SELECT TOP(@__p_0) [o].[Id] + FROM [Orders] AS [o] + WHERE [o].[Amount] > 10 +) AS [t] +``` + +Note that the `[o].[Id]` projection isn't needed in the subquery, since the outer SELECT expression simply counts the rows. EF9 generates the following instead: + +```sql +SELECT COUNT(*) +FROM ( + SELECT TOP(@__p_0) 1 AS empty + FROM [Orders] AS [o] + WHERE [o].[Amount] > 10 +) AS [s] +``` + +... and the projection is empty. This may not seem like much, but it can significantly simplify the SQL in some cases; you're welcome to scroll through some of the [SQL changes in the tests](https://github.com/dotnet/efcore/pull/32672/files#diff-95664269d9a59fe9627612bf1d3e1704e76f6065e329edeecd14a8bf436db058L4011) to see the effect. + ### Translations involving GREATEST/LEAST @@ -109,7 +511,7 @@ WHERE ( Several new translations have been introduced that use the `GREATEST` and `LEAST` SQL functions. > [!IMPORTANT] -> The `GREATEST` and `LEAST` functions wre [introduced to SQL Server/Azure SQL databases in the 2022 version](https://techcommunity.microsoft.com/t5/azure-sql-blog/introducing-the-greatest-and-least-t-sql-functions/ba-p/2281726). Visual Studio 2022 installs SQL Server 2019 by default. We recommend installing [SQL Server Developer Edition 2022](https://www.microsoft.com/sql-server/sql-server-downloads) to try out these new translations in EF9. +> The `GREATEST` and `LEAST` functions were [introduced to SQL Server/Azure SQL databases in the 2022 version](https://techcommunity.microsoft.com/t5/azure-sql-blog/introducing-the-greatest-and-least-t-sql-functions/ba-p/2281726). Visual Studio 2022 installs SQL Server 2019 by default. We recommend installing [SQL Server Developer Edition 2022](https://www.microsoft.com/sql-server/sql-server-downloads) to try out these new translations in EF9. For example, queries using `Math.Max` or `Math.Min` are now translated for Azure SQL using `GREATEST` and `LEAST` respectively. For example: @@ -190,8 +592,7 @@ Except in some special cases, EF Core parameterizes variables used in a LINQ que #region DefaultParameterization async Task> GetPosts(int id) => await context.Posts - .Where( - e => e.Title == ".NET Blog" && e.Id == id) + .Where(e => e.Title == ".NET Blog" && e.Id == id) .ToListAsync(); --> [!code-csharp[DefaultParameterization](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=DefaultParameterization)] @@ -199,16 +600,15 @@ Except in some special cases, EF Core parameterizes variables used in a LINQ que This translates to the following SQL and parameters when using Azure SQL: ```output -info: 2/5/2024 15:43:13.789 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command) - Executed DbCommand (1ms) [Parameters=[@__id_0='1'], CommandType='Text', CommandTimeout='30'] - SELECT [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Title], [p].[PromoText], [p].[Metadata] - FROM [Posts] AS [p] - WHERE [p].[Title] = N'.NET Blog' AND [p].[Id] = @__id_0 +Executed DbCommand (1ms) [Parameters=[@__id_0='1'], CommandType='Text', CommandTimeout='30'] +SELECT [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Title], [p].[PromoText], [p].[Metadata] +FROM [Posts] AS [p] +WHERE [p].[Title] = N'.NET Blog' AND [p].[Id] = @__id_0 ``` Notice that EF created a constant in the SQL for ".NET Blog" because this value will not change from query to query. Using a constant allows this value to be examined by the database engine when creating a query plan, potentially resulting in a more efficient query. -On the other hand, the value of `id` is parameterized, since the same query may be executed with many different values for `id`. Creating a constant in this case results in pollution of the query cache with lots of queries that differ only in parameter values. This is very bad for overall performance of the database. +On the other hand, the value of `id` is parameterized, since the same query may be executed with many different values for `id`. Creating a constant in this case would result in pollution of the query cache with lots of queries that differ only in `id` values. This is very bad for overall performance of the database. Generally speaking, these defaults should not be changed. However, EF Core 8.0.2 introduces an `EF.Constant` method which forces EF to use a constant even if a parameter would be used by default. For example: @@ -216,8 +616,7 @@ Generally speaking, these defaults should not be changed. However, EF Core 8.0.2 #region ForceConstant async Task> GetPostsForceConstant(int id) => await context.Posts - .Where( - e => e.Title == ".NET Blog" && e.Id == EF.Constant(id)) + .Where(e => e.Title == ".NET Blog" && e.Id == EF.Constant(id)) .ToListAsync(); --> [!code-csharp[ForceConstant](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=ForceConstant)] @@ -225,21 +624,21 @@ Generally speaking, these defaults should not be changed. However, EF Core 8.0.2 The translation now contains a constant for the `id` value: ```output -info: 2/5/2024 15:43:13.812 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command) - Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] - SELECT [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Title], [p].[PromoText], [p].[Metadata] - FROM [Posts] AS [p] - WHERE [p].[Title] = N'.NET Blog' AND [p].[Id] = 1 +Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] +SELECT [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Title], [p].[PromoText], [p].[Metadata] +FROM [Posts] AS [p] +WHERE [p].[Title] = N'.NET Blog' AND [p].[Id] = 1 ``` +#### The `EF.Parameter` method + EF9 introduces the `EF.Parameter` method to do the opposite. That is, force EF to use a parameter even if the value is a constant in code. For example: [!code-csharp[ForceParameter](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=ForceParameter)] @@ -247,13 +646,65 @@ EF9 introduces the `EF.Parameter` method to do the opposite. That is, force EF t The translation now contains a parameter for the ".NET Blog" string: ```output -info: 2/5/2024 15:43:13.803 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command) - Executed DbCommand (1ms) [Parameters=[@__p_0='.NET Blog' (Size = 4000), @__id_1='1'], CommandType='Text', CommandTimeout='30'] - SELECT [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Title], [p].[PromoText], [p].[Metadata] - FROM [Posts] AS [p] - WHERE [p].[Title] = @__p_0 AND [p].[Id] = @__id_1 +Executed DbCommand (1ms) [Parameters=[@__p_0='.NET Blog' (Size = 4000), @__id_1='1'], CommandType='Text', CommandTimeout='30'] +SELECT [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Title], [p].[PromoText], [p].[Metadata] +FROM [Posts] AS [p] +WHERE [p].[Title] = @__p_0 AND [p].[Id] = @__id_1 +``` + + + +#### Parameterized primitive collections + +EF8 changed the way [some queries that use primitive collections are translated](xref:core/what-is-new/ef-core-8.0/whatsnew#queries-with-primitive-collections). When a LINQ query contains a parameterized primitive collection, EF converts its contents to JSON and pass it as a single parameter value the query: + + +[!code-csharp[ForceParameter](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=DefaultParameterizationPrimitiveCollection)] + +This will result in the following translation on SQL Server: + +```output +Executed DbCommand (5ms) [Parameters=[@__ids_0='[1,2,3]' (Size = 4000)], CommandType='Text', CommandTimeout='30'] +SELECT [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Rating], [p].[Title], [p].[PromoText], [p].[Metadata] +FROM [Posts] AS [p] +WHERE [p].[Title] = N'.NET Blog' AND [p].[Id] IN ( + SELECT [i].[value] + FROM OPENJSON(@__ids_0) WITH ([value] int '$') AS [i] +) ``` +This allows having the same SQL query for different parameterized collections (only the parameter value changes), but in some situations it can lead to performance issues as the database isn't able to optimally plan for the query. The `EF.Constant` method can be used to revert to the previous translation. + +The following query uses `EF.Constant` to that effect: + + +[!code-csharp[ForceParameter](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=ForceConstantPrimitiveCollection)] + +The resulting SQL is as follows: + +```sql +SELECT [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Rating], [p].[Title], [p].[PromoText], [p].[Metadata] +FROM [Posts] AS [p] +WHERE [p].[Title] = N'.NET Blog' AND [p].[Id] IN (1, 2, 3) +``` + +Moreover, EF9 introduces `TranslateParameterizedCollectionsToConstants` [context option](/ef/core/dbcontext-configuration/#dbcontextoptions) that can be used to prevent primitive collection parameterization for all queries. We also added a complementing `TranslateParameterizedCollectionsToParameters` which forces parameterization of primitive collections explicitly (this is the default behavior). + +> [!TIP] +> The `EF.Parameter` method overrides the context option. If you want to prevent parameterization of primitive collections for most of your queries (but not all), you can set the context option `TranslateParameterizedCollectionsToConstants` and use `EF.Parameter` for the queries or individual variables that you want to parameterize. + ### Inlined uncorrelated subqueries @@ -291,7 +742,7 @@ ORDER BY (SELECT 1) OFFSET @__p_1 ROWS FETCH NEXT @__p_2 ROWS ONLY ``` -In EF9, the `IQueryable` in the `dotnetPosts` is inlined, resulting in a single round trip: +In EF9, the `IQueryable` in the `dotnetPosts` is inlined, resulting in a single database round trip: ```sql SELECT [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Title], [p].[PromoText], [p].[Metadata], ( @@ -304,262 +755,365 @@ ORDER BY (SELECT 1) OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY ``` - + + +### Aggregate functions over subqueries and aggregates on SQL Server + +EF9 improves the translation of some complex queries using aggregate functions composed over subqueries or other aggregate functions. +Below is an example of such query: + + +[!code-csharp[AggregateOverSubquery](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=AggregateOverSubquery)] + +First, `Select` computes `LatestPostRating` for each `Post` which requires a subquery when translating to SQL. Later in the query these results are aggregated using `Average` operation. The resulting SQL looks as follows when run on SQL Server: + +```sql +SELECT AVG([s].[Rating]) +FROM [Blogs] AS [b] +OUTER APPLY ( + SELECT TOP(1) [p].[Rating] + FROM [Posts] AS [p] + WHERE [b].[Id] = [p].[BlogId] + ORDER BY [p].[PublishedOn] DESC +) AS [s] +GROUP BY [b].[Language] +``` + +In previous versions EF Core would generate invalid SQL for similar queries, trying to apply the aggregate operation directly over the subquery. This is not allowed on SQL Server and results in an exception. +Same principle applies to queries using aggregate over another aggregate: + + +[!code-csharp[AggregateOverAggregate](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=AggregateOverAggregate)] -### New `ToHashSetAsync` methods +> [!NOTE] +> This change doesn't affect Sqlite, which supports aggregates over subqueries (or other aggregates) and it does not support `LATERAL JOIN` (`APPLY`). Below is the SQL for the first query running on Sqlite: +> +> ```sql +> SELECT ef_avg(( +> SELECT "p"."Rating" +> FROM "Posts" AS "p" +> WHERE "b"."Id" = "p"."BlogId" +> ORDER BY "p"."PublishedOn" DESC +> LIMIT 1)) +> FROM "Blogs" AS "b" +> GROUP BY "b"."Language" +> ``` + + + +### Queries using Count != 0 are optimized > [!TIP] > The code shown here comes from [QuerySample.cs](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs). -The methods have existed since .NET Core 2.0. In EF9, the equivalent async methods have been added. For example: +In EF8, the following LINQ query was translated to use the SQL `COUNT` function: -[!code-csharp[ToHashSetAsync](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=ToHashSetAsync)] +[!code-csharp[NormalizeCount](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=NormalizeCount)] -This enhancement was contributed by [@wertzui](https://github.com/wertzui). Many thanks! +EF9 now generates a more efficient translation using `EXISTS`: -## ExecuteUpdate and ExecuteDelete +```sql +SELECT "b"."Id", "b"."Name", "b"."SiteUri" +FROM "Blogs" AS "b" +WHERE EXISTS ( + SELECT 1 + FROM "Posts" AS "p" + WHERE "b"."Id" = "p"."BlogId") +``` - + -### Allow passing complex type instances to ExecuteUpdate +### C# semantics for comparison operations on nullable values -> [!TIP] -> The code shown here comes from [ExecuteUpdateSample.cs](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Miscellaneous/NewInEFCore9/ExecuteUpdateSample.cs). +In EF8 comparisons between nullable elements were not performed correctly for some scenarios. In C#, if one or both operands are null, the result of a comparison operation is false; otherwise, the contained values of operands are compared. In EF8 we used to translate comparisons using database null semantics. This would produce results different than similar query using LINQ to Objects. +Moreover, we would produce different results when comparison was done in filter vs projection. Some queries would also produce different results between Sql Server and Sqlite/Postgres. -The `ExecuteUpdate` API was introduced in EF7 to perform immediate, direct updates to the database without tracking or `SaveChanges`. For example: +For example, the query: -[!code-csharp[NormalExecuteUpdate](../../../../samples/core/Miscellaneous/NewInEFCore9/ExecuteUpdateSample.cs?name=NormalExecuteUpdate)] +[!code-csharp[NegatedNullableComparisonFilter](../../../../samples/core/Miscellaneous/NewInEFCore9/NullSemanticsSample.cs?name=NegatedNullableComparisonFilter)] -Running this code executes the following query to update the `Region` to "Deutschland": +would generate the following SQL: ```sql -UPDATE [s] -SET [s].[Region] = N'Deutschland' -FROM [Stores] AS [s] -WHERE [s].[Region] = N'Germany' +SELECT [e].[NullableIntOne], [e].[NullableIntTwo] +FROM [Entities] AS [e] +WHERE NOT ([e].[NullableIntOne] > [e].[NullableIntTwo]) ``` -In EF8 `ExecuteUpdate` can also be used to update values of complex type properties. However, each member of the complex type must be specified explicitly. For example: +which filters out entities whose `NullableIntOne` or `NullableIntTwo` are set to null. - -[!code-csharp[UpdateComplexTypeByMember](../../../../samples/core/Miscellaneous/NewInEFCore9/ExecuteUpdateSample.cs?name=UpdateComplexTypeByMember)] +[!code-csharp[NegatedNullableComparisonProjection](../../../../samples/core/Miscellaneous/NewInEFCore9/NullSemanticsSample.cs?name=NegatedNullableComparisonProjection)] -Running this code results in the following query execution: +resulted in the following SQL: ```sql -UPDATE [s] -SET [s].[StoreAddress_PostCode] = @__newAddress_PostCode_4, - [s].[StoreAddress_Country] = @__newAddress_Country_3, - [s].[StoreAddress_City] = @__newAddress_City_2, - [s].[StoreAddress_Line2] = NULL, - [s].[StoreAddress_Line1] = @__newAddress_Line1_0 -FROM [Stores] AS [s] -WHERE [s].[Region] = N'Deutschland' +SELECT [e].[NullableIntOne], [e].[NullableIntTwo], CASE + WHEN NOT ([e].[NullableIntOne] > [e].[NullableIntTwo]) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END AS [Operation] +FROM [Entities] AS [e] ``` -In EF9, the same update can be performed by passing the complex type instance itself. That is, each member does not need to be explicitly specified. For example: +which returns `false` for entities whose `NullableIntOne` or `NullableIntTwo` are set to null (rather than `true` expected in C#). Running the same scenario on Sqlite generated: + +```sql +SELECT "e"."NullableIntOne", "e"."NullableIntTwo", NOT ("e"."NullableIntOne" > "e"."NullableIntTwo") AS "Operation" +FROM "Entities" AS "e" +``` + +which results in `Nullable object must have a value` exception, as translation produces `null` value for cases where `NullableIntOne` or `NullableIntTwo` are null. + +EF9 now properly handles these scenarios, producing results consistent with LINQ to Objects and across different providers. + +This enhancement was contributed by [@ranma42](https://github.com/ranma42). Many thanks! + + + +### Translation of `Order` and `OrderDescending` LINQ operators + +EF9 enables the translation of LINQ simplified ordering operations (`Order` and `OrderDescending`). These work similar to `OrderBy`/`OrderByDescending` but don't require an argument. Instead, they apply default ordering - for entities this means ordering based on primary key values and for other types, ordering based on the values themselves. + +Below is an example query which takes advantage of the simplified ordering operators: +[!code-csharp[OrderOrderDescending](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=OrderOrderDescending)] - await context.Stores - .Where(e => e.Region == "Germany") - .ExecuteUpdateAsync(s => s.SetProperty(b => b.StoreAddress, newAddress)); +This query is equivalent to the following: + + -[!code-csharp[UpdateComplexType](../../../../samples/core/Miscellaneous/NewInEFCore9/ExecuteUpdateSample.cs?name=UpdateComplexType)] +[!code-csharp[OrderByEquivalent](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=OrderByEquivalent)] -Running this code results in the same query execution as the previous example: +and produces the following SQL: ```sql -UPDATE [s] -SET [s].[StoreAddress_City] = @__complex_type_newAddress_0_City, - [s].[StoreAddress_Country] = @__complex_type_newAddress_0_Country, - [s].[StoreAddress_Line1] = @__complex_type_newAddress_0_Line1, - [s].[StoreAddress_Line2] = NULL, - [s].[StoreAddress_PostCode] = @__complex_type_newAddress_0_PostCode -FROM [Stores] AS [s] -WHERE [s].[Region] = N'Germany' +SELECT [b].[Name], [b].[Id], [p].[Id], [p].[Archived], [p].[AuthorId], [p].[BlogId], [p].[Content], [p].[Discriminator], [p].[PublishedOn], [p].[Rating], [p].[Title], [p].[PromoText], [p].[Metadata], [p0].[Title], [p0].[Id] +FROM [Blogs] AS [b] +LEFT JOIN [Posts] AS [p] ON [b].[Id] = [p].[BlogId] +LEFT JOIN [Posts] AS [p0] ON [b].[Id] = [p0].[BlogId] +ORDER BY [b].[Id], [p].[Id] DESC, [p0].[Title] ``` -Multiple updates to both complex type properties and simple properties can be combined in a single call to `ExecuteUpdate`. For example: +> [!NOTE] +> `Order` and `OrderDescending` methods are only supported for collections of entities, complex types or scalars - they will not work on more complex projections, e.g. collections of anonymous types containing multiple properties. + +This enhancement was contributed by the EF Team alumnus [@bricelam](https://github.com/bricelam). Many thanks! + + + +### Improved translation of logical negation operator (!) + +EF9 brings many optimizations around SQL `CASE/WHEN`, `COALESCE`, negation, and various other constructs; most of these were contributed by Andrea Canciani ([@ranma42](https://github.com/ranma42)) - many thanks for all of these! Below, we'll detail just a few of these optimizations around logical negation. + +Let's examine the following query: -[!code-csharp[UpdateMultipleComplexType](../../../../samples/core/Miscellaneous/NewInEFCore9/ExecuteUpdateSample.cs?name=UpdateMultipleComplexType)] +[!code-csharp[NegatedContainsImprovements](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=NegatedContainsImprovements)] -Running this code results in the same query execution as the previous example: +In EF8 we would produce the following SQL: ```sql -UPDATE [c] -SET [c].[CustomerInfo_Tag] = N'Tog', - [c].[CustomerInfo_HomeAddress_City] = N'Beetley', - [c].[CustomerInfo_HomeAddress_Country] = N'Norfolk', - [c].[CustomerInfo_HomeAddress_Line1] = N'Gressenhall Farm', - [c].[CustomerInfo_HomeAddress_Line2] = NULL, - [c].[CustomerInfo_HomeAddress_PostCode] = N'NR20 4DR', - [c].[CustomerInfo_WorkAddress_City] = N'Beetley', - [c].[CustomerInfo_WorkAddress_Country] = N'Norfolk', - [c].[CustomerInfo_WorkAddress_Line1] = N'Gressenhall Workhouse', - [c].[CustomerInfo_WorkAddress_Line2] = NULL, - [c].[CustomerInfo_WorkAddress_PostCode] = N'NR20 4DR' -FROM [Customers] AS [c] -WHERE [c].[Name] = @__name_0 +SELECT "p"."Content" +FROM "Posts" AS "p" +WHERE NOT (instr("p"."Content", 'Announcing') > 0) ``` -## Migrations +In EF9 we "push" `NOT` operation into the comparison: - +```sql +SELECT "p"."Content" +FROM "Posts" AS "p" +WHERE instr("p"."Content", 'Announcing') <= 0 +``` -### Improved temporal table migrations +Another example, applicable to SQL Server, is a negated conditional operation. -The migration created when changing an existing table into a temporal table has been reduced in size for EF9. For example, in EF8 making a single existing table a temporal table results in the following migration: + +[!code-csharp[CaseTranslationImprovements](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=CaseTranslationImprovements)] -```csharp -protected override void Up(MigrationBuilder migrationBuilder) -{ - migrationBuilder.AlterTable( - name: "Blogs") - .Annotation("SqlServer:IsTemporal", true) - .Annotation("SqlServer:TemporalHistoryTableName", "BlogsHistory") - .Annotation("SqlServer:TemporalHistoryTableSchema", null) - .Annotation("SqlServer:TemporalPeriodEndColumnName", "PeriodEnd") - .Annotation("SqlServer:TemporalPeriodStartColumnName", "PeriodStart"); - - migrationBuilder.AlterColumn( - name: "SiteUri", - table: "Blogs", - type: "nvarchar(max)", - nullable: false, - oldClrType: typeof(string), - oldType: "nvarchar(max)") - .Annotation("SqlServer:IsTemporal", true) - .Annotation("SqlServer:TemporalHistoryTableName", "BlogsHistory") - .Annotation("SqlServer:TemporalHistoryTableSchema", null) - .Annotation("SqlServer:TemporalPeriodEndColumnName", "PeriodEnd") - .Annotation("SqlServer:TemporalPeriodStartColumnName", "PeriodStart"); - - migrationBuilder.AlterColumn( - name: "Name", - table: "Blogs", - type: "nvarchar(max)", - nullable: false, - oldClrType: typeof(string), - oldType: "nvarchar(max)") - .Annotation("SqlServer:IsTemporal", true) - .Annotation("SqlServer:TemporalHistoryTableName", "BlogsHistory") - .Annotation("SqlServer:TemporalHistoryTableSchema", null) - .Annotation("SqlServer:TemporalPeriodEndColumnName", "PeriodEnd") - .Annotation("SqlServer:TemporalPeriodStartColumnName", "PeriodStart"); - - migrationBuilder.AlterColumn( - name: "Id", - table: "Blogs", - type: "int", - nullable: false, - oldClrType: typeof(int), - oldType: "int") - .Annotation("SqlServer:Identity", "1, 1") - .Annotation("SqlServer:IsTemporal", true) - .Annotation("SqlServer:TemporalHistoryTableName", "BlogsHistory") - .Annotation("SqlServer:TemporalHistoryTableSchema", null) - .Annotation("SqlServer:TemporalPeriodEndColumnName", "PeriodEnd") - .Annotation("SqlServer:TemporalPeriodStartColumnName", "PeriodStart") - .OldAnnotation("SqlServer:Identity", "1, 1"); - - migrationBuilder.AddColumn( - name: "PeriodEnd", - table: "Blogs", - type: "datetime2", - nullable: false, - defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)) - .Annotation("SqlServer:IsTemporal", true) - .Annotation("SqlServer:TemporalHistoryTableName", "BlogsHistory") - .Annotation("SqlServer:TemporalHistoryTableSchema", null) - .Annotation("SqlServer:TemporalPeriodEndColumnName", "PeriodEnd") - .Annotation("SqlServer:TemporalPeriodStartColumnName", "PeriodStart"); - - migrationBuilder.AddColumn( - name: "PeriodStart", - table: "Blogs", - type: "datetime2", - nullable: false, - defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)) - .Annotation("SqlServer:IsTemporal", true) - .Annotation("SqlServer:TemporalHistoryTableName", "BlogsHistory") - .Annotation("SqlServer:TemporalHistoryTableSchema", null) - .Annotation("SqlServer:TemporalPeriodEndColumnName", "PeriodEnd") - .Annotation("SqlServer:TemporalPeriodStartColumnName", "PeriodStart"); -} +In EF8 used to result in nested `CASE` blocks: + +```sql +SELECT CASE + WHEN CASE + WHEN [b].[Id] > 5 THEN CAST(0 AS bit) + ELSE CAST(1 AS bit) + END = CAST(0 AS bit) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END +FROM [Blogs] AS [b] ``` -In EF9, the same operation now results in a much smaller migration: +In EF9 we removed the nesting: -```csharp -protected override void Up(MigrationBuilder migrationBuilder) -{ - migrationBuilder.AlterTable( - name: "Blogs") - .Annotation("SqlServer:IsTemporal", true) - .Annotation("SqlServer:TemporalHistoryTableName", "BlogsHistory") - .Annotation("SqlServer:TemporalHistoryTableSchema", null) - .Annotation("SqlServer:TemporalPeriodEndColumnName", "PeriodEnd") - .Annotation("SqlServer:TemporalPeriodStartColumnName", "PeriodStart"); - - migrationBuilder.AddColumn( - name: "PeriodEnd", - table: "Blogs", - type: "datetime2", - nullable: false, - defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)) - .Annotation("SqlServer:TemporalIsPeriodEndColumn", true); - - migrationBuilder.AddColumn( - name: "PeriodStart", - table: "Blogs", - type: "datetime2", - nullable: false, - defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)) - .Annotation("SqlServer:TemporalIsPeriodStartColumn", true); -} +```sql +SELECT CASE + WHEN [b].[Id] > 5 THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END +FROM [Blogs] AS [b] ``` +On SQL Server, when projecting a negated bool property: + + +[!code-csharp[NegatedBoolProjection](../../../../samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs?name=NegatedBoolProjection)] + + EF8 would generate a `CASE` block because comparisons can't appear in the projection directly in SQL Server queries: + + ```sql +SELECT [p].[Title], CASE + WHEN [p].[Archived] = CAST(0 AS bit) THEN CAST(1 AS bit) + ELSE CAST(0 AS bit) +END AS [Active] +FROM [Posts] AS [p] + ``` + +In EF9, this translation has been simplified and now uses bitwise NOT (`~`): + +```sql +SELECT [p].[Title], ~[p].[Archived] AS [Active] +FROM [Posts] AS [p] +``` + + + +### Better support for Azure SQL and Azure Synapse + +EF9 allows for more flexibility when specifying the type of SQL Server which is being targeted. Instead of configuring EF with `UseSqlServer`, you can now specify `UseAzureSql` or `UseAzureSynapse`. +This allows EF to produce better SQL when using Azure SQL or Azure Synapse. EF can take advantage of the database specific features (e.g. [dedicated type for JSON on Azure SQL](/sql/t-sql/data-types/json-data-type)), or work around its limitations (e.g. [`ESCAPE` clause is not available when using `LIKE` on Azure Synapse](/sql/t-sql/language-elements/like-transact-sql#syntax)). + +### Other query improvements + +* The primitive collections querying support [introduced in EF8](xref:core/what-is-new/ef-core-8.0/whatsnew#queries-with-primitive-collections) has been extended to support all `ICollection` types. Note that this applies only to parameter and inline collections - primitive collections that are part of entities are still limited to arrays, lists and [in EF9 also read-only arrays/lists](#read-only-primitive-collections). +* New `ToHashSetAsync` functions to return the results of a query as a `HashSet` ([#30033](https://github.com/dotnet/efcore/issues/30033), contributed by [@wertzui](https://github.com/wertzui)). +* `TimeOnly.FromDateTime` and `FromTimeSpan` are now translated on SQL Server ([#33678](https://github.com/dotnet/efcore/issues/33678)). +* `ToString` over enums is now translated ([#33706](https://github.com/dotnet/efcore/pull/33706), contributed by [@Danevandy99](https://github.com/Danevandy99)). +* `string.Join` now translates to [CONCAT_WS](/sql/t-sql/functions/concat-ws-transact-sql) in non-aggregate context on SQL Server ([#28899](https://github.com/dotnet/efcore/issues/28899)). +* `EF.Functions.PatIndex` now translates to the SQL Server [`PATINDEX`](/sql/t-sql/functions/patindex-transact-sql) function, which returns the starting position of the first occurrence of a pattern ([#33702](https://github.com/dotnet/efcore/issues/33702), [@smnsht](https://github.com/smnsht)). +* `Sum` and `Average` now work for decimals on SQLite ([#33721](https://github.com/dotnet/efcore/pull/33721), contributed by [@ranma42](https://github.com/ranma42)). +* Fixes and optimizations to `string.StartsWith` and `EndsWith` ([#31482](https://github.com/dotnet/efcore/pull/31482)). +* `Convert.To*` methods can now accept argument of type `object` ([#33891](https://github.com/dotnet/efcore/pull/33891), contributed by [@imangd](https://github.com/imangd)). +* Exclusive-Or (XOR) operation is now translated on SQL Server ([#34071](https://github.com/dotnet/efcore/pull/34071), contributed by [@ranma42](https://github.com/ranma42)). +* Optimizations around nullability for `COLLATE` and `AT TIME ZONE` operations ([#34263](https://github.com/dotnet/efcore/pull/34263), contributed by [@ranma42](https://github.com/ranma42)). +* Optimizations for `DISTINCT` over `IN`, `EXISTS` and set operations ([#34381](https://github.com/dotnet/efcore/pull/34381), contributed by [@ranma42](https://github.com/ranma42)). + +The above were only some of the more important query improvements in EF9; see [this issue](https://github.com/dotnet/efcore/issues/34151) for a more complete listing. + +## Migrations + + + +### Protection against concurrent migrations + +EF9 introduces a locking mechanism to protect against multiple migration executions happening simultaneously, as that could leave the database in a corrupted state. This doesn't happen when migrations are deployed to the production environment using [recommended methods](/ef/core/managing-schemas/migrations/applying#sql-scripts), but can happen if migrations are applied at runtime using the [`DbContext.Database.MigrateAsync()`](/dotnet/api/microsoft.entityframeworkcore.relationaldatabasefacadeextensions.migrate) method. We recommend applying migrations at deployment, rather than as part of application startup, but that can result in more complicated application architectures (e.g. [when using .NET Aspire projects](/dotnet/aspire/database/ef-core-migrations)). + +> [!NOTE] +> If you are using Sqlite database, see [potential issues associated with this feature](/ef/core/providers/sqlite/limitations#concurrent-migrations-protection). + + + +### Warn when multiple migration operations can't be run inside a transaction + +The majority of operations performed during migrations are protected by a transaction. This ensures that if for some reason migration fails, the database does not end up in a corrupted state. However, some operations are not wrapped in a transaction (e.g. [operations on SQL Server memory-optimized tables](/sql/relational-databases/in-memory-oltp/unsupported-sql-server-features-for-in-memory-oltp#scenarios-not-supported), or database altering operations like modifying the database collation). To avoid corrupting the database in case of migration failure, it is recommended that these operations are performed in isolation using a separate migration. EF9 now detects a scenario when a migration contains multiple operations, one of which can't be wrapped in a transaction, and issues a warning. + +### Improved data seeding + +EF9 introduced a convenient way to perform data seeding, that is populating the database with initial data. `DbContextOptionsBuilder` now contains `UseSeeding` and `UseAsyncSeeding` methods which get executed when the DbContext is initialized (as part of `EnsureCreatedAsync`). + +> [!NOTE] +> If the application had ran previously, the database may already contain the sample data (which would have been added on the first initialization of the context). As such, `UseSeeding` `UseAsyncSeeding` should check if data exists before attempting to populate the database. This can be achieved by issuing a simple EF query. + +Here is an example of how these methods can be used: + +[!code-csharp[ContextOptionSeeding](../../../../samples/core/Modeling/DataSeeding/DataSeedingContext.cs?name=ContextOptionSeeding)] + +More information can be found [here](/ef/core/modeling/data-seeding#use-seeding-method). + +### Other migration improvements + +* When changing an existing table into a SQL Server temporal table, the migration code size has been significantly reduced. + ## Model building @@ -612,38 +1166,21 @@ Notice that the model was not built when starting the application because the co ### MSBuild integration -With the above approach, the compiled model still needs to be regenerated manually when the entity types or `DbContext` configuration is changed. However, EF9 ships with MSBuild and targets package that can automatically update the compiled model when the model project is built! To get started, install the [Microsoft.EntityFrameworkCore.Tasks](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Tasks/) NuGet package. For example: +With the above approach, the compiled model still needs to be regenerated manually when the entity types or `DbContext` configuration is changed. However, EF9 ships with an MSBuild task package that can automatically update the compiled model when the model project is built! To get started, install the [Microsoft.EntityFrameworkCore.Tasks](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Tasks/) NuGet package. For example: ```dotnetcli -dotnet add package Microsoft.EntityFrameworkCore.Tasks --version 9.0.0-preview.4.24205.3 +dotnet add package Microsoft.EntityFrameworkCore.Tasks --version 9.0.0 ``` > [!TIP] > Use the package version in the command above that matches the version of EF Core that you are using. -Then enable the integration by setting the `EFOptimizeContext` property to your `.csproj` file. For example: +Then enable the integration by setting the `EFOptimizeContext` and `EFScaffoldModelStage` properties in your `.csproj` file. For example: ```xml true - -``` - -There are additional, optional, MSBuild properties for controlling how the model is built, equivalent to the options passed on the command line to `dotnet ef dbcontext optimize`. These include: - -| MSBuild property | Description | -|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| EFOptimizeContext | Set to `true` to enable auto-compiled models. | -| DbContextName | The DbContext class to use. Class name only or fully qualified with namespaces. If this option is omitted, EF Core will find the context class. If there are multiple context classes, this option is required. | -| EFStartupProject | Relative path to the startup project. Default value is the current folder. | -| EFTargetNamespace | The namespace to use for all generated classes. Defaults to generated from the root namespace and the output directory plus CompiledModels. | - -In our example, we need to specify the startup project: - -```xml - - true - ..\App\App.csproj + build ``` @@ -657,7 +1194,7 @@ dotnet exec --depsfile D:\code\EntityFramework.Docs\samples\core\Miscellaneous\N --runtimeconfig D:\code\EntityFramework.Docs\samples\core\Miscellaneous\NewInEFCore9.CompiledModels\App\bin\Release\net8.0\App.runtimeconfig.json G:\packages\microsoft.entityframeworkcore.tasks\9.0.0-preview.4.24205.3\tasks\net8.0\..\..\tools\netcoreapp2.0\ef.dll dbcontext optimize --output-dir D:\code\EntityFramework.Docs\samples\core\Miscellaneous\NewInEFCore9.CompiledModels\Model\obj\Release\net8.0\ --namespace NewInEfCore9 --suffix .g - --assembly D:\code\EntityFramework.Docs\samples\core\Miscellaneous\NewInEFCore9.CompiledModels\Model\bin\Release\net8.0\Model.dll --startup-assembly D:\code\EntityFramework.Docs\samples\core\Miscellaneous\NewInEFCore9.CompiledModels\App\bin\Release\net8.0\App.dll + --assembly D:\code\EntityFramework.Docs\samples\core\Miscellaneous\NewInEFCore9.CompiledModels\Model\bin\Release\net8.0\Model.dll --project-dir D:\code\EntityFramework.Docs\samples\core\Miscellaneous\NewInEFCore9.CompiledModels\Model --root-namespace NewInEfCore9 --language C# @@ -677,55 +1214,69 @@ Model loaded with 2 entity types. Now, whenever the model changes, the compiled model will be automatically rebuilt as soon as the project is built. -> [NOTE!] -> We are working through some performance issues with changes made to the compiled model in EF8 and EF9. See [Issue 33483#](https://github.com/dotnet/efcore/issues/33483) for more information. +For more information see [MSBuild integration](xref:core/cli/msbuild). - + -### Specify caching for sequences +### Read-only primitive collections > [!TIP] -> The code shown here comes from [ModelBuildingSample.cs](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Miscellaneous/NewInEFCore9/ModelBuildingSample.cs). +> The code shown here comes from [PrimitiveCollectionsSample.cs](https://github.com/dotnet/EntityFramework.Docs/tree/main/samples/core/Miscellaneous/NewInEFCore9/PrimitiveCollectionsSample.cs). -EF9 allows setting the [caching options for database sequences](/sql/t-sql/statements/create-sequence-transact-sql) for any relational database provider that supports this. For example, `UseCache` can be used to explicitly turn on caching and set the cache size: +EF8 introduced support for [mapping arrays and mutable lists of primitive types](xref:core/what-is-new/ef-core-8.0/whatsnew#primitive-collections). This has been expanded in EF9 to include read-only collections/lists. Specifically, EF9 supports collections typed as `IReadOnlyList`, `IReadOnlyCollection`, or `ReadOnlyCollection`. For example, in the following code, `DaysVisited` will be mapped by convention as a primitive collection of dates: - -[!code-csharp[UseCache](../../../../samples/core/Miscellaneous/NewInEFCore9/ModelBuildingSample.cs?name=UseCache)] +```csharp +public class DogWalk +{ + public int Id { get; set; } + public string Name { get; set; } + public ReadOnlyCollection DaysVisited { get; set; } +} +``` -This results in the following sequence definition when using SQL Server: +The read-only collection can be backed by a normal, mutable collection if desired. For example, in the following code, `DaysVisited` can be mapped as a primitive collection of dates, while still allowing code in the class to manipulate the underlying list. -```sql -CREATE SEQUENCE [MyCachedSequence] AS int START WITH 11 INCREMENT BY 2 MINVALUE 10 MAXVALUE 255000 CYCLE CACHE 3; +```csharp + public class Pub + { + public int Id { get; set; } + public string Name { get; set; } + public IReadOnlyCollection Beers { get; set; } + + private List _daysVisited = new(); + public IReadOnlyList DaysVisited => _daysVisited; + } ``` -Similarly, `UseNoCache` explicitly turns off caching: +These collections can then be used in queries in the normal way. For example, this LINQ query: -[!code-csharp[UseNoCache](../../../../samples/core/Miscellaneous/NewInEFCore9/ModelBuildingSample.cs?name=UseNoCache)] +[!code-csharp[WalksWithADrink](../../../../samples/core/Miscellaneous/NewInEFCore9/PrimitiveCollectionsSample.cs?name=WalksWithADrink)] + +Which translates to the following SQL on SQLite: ```sql -CREATE SEQUENCE [MyUncachedSequence] AS int START WITH 11 INCREMENT BY 2 MINVALUE 10 MAXVALUE 255000 CYCLE NO CACHE; +SELECT "w"."Name" AS "WalkName", "p"."Name" AS "PubName", ( + SELECT COUNT(*) + FROM json_each("w"."DaysVisited") AS "d" + WHERE "d"."value" IN ( + SELECT "d0"."value" + FROM json_each("p"."DaysVisited") AS "d0" + )) AS "Count", json_array_length("w"."DaysVisited") AS "TotalCount" +FROM "Walks" AS "w" +INNER JOIN "Pubs" AS "p" ON "w"."ClosestPubId" = "p"."Id" ``` -If neither `UseCache` or `UseNoCache` are called, then caching is not specified and the database will use whatever its default is. This may be a different default for different databases. - -This enhancement was contributed by [@bikbov](https://github.com/bikbov). Many thanks! - - + ### Specify fill-factor for keys and indexes @@ -770,9 +1321,6 @@ CREATE INDEX [IX_User_Name] ON [User] ([Name]) WITH (FILLFACTOR = 80); CREATE INDEX [IX_User_Region_Tag] ON [User] ([Region], [Tag]) WITH (FILLFACTOR = 80); ``` -> [!NOTE] -> There is currently a bug in preview 2 where the fill-factors are not included when the table is created for the first time. This is tracked by [Issue #33269](https://github.com/dotnet/efcore/issues/33269) - This enhancement was contributed by [@deano-hunter](https://github.com/deano-hunter). Many thanks! @@ -936,7 +1484,7 @@ To create a node between these two children, an additional sub-level can be used --> [!code-csharp[HierarchyIdParse2](../../../../samples/core/Miscellaneous/NewInEFCore9/HierarchyIdSample.cs?name=HierarchyIdParse2)] -This creates a node with a `HierarchyId` of `/4/1/3/1/1.5/`, putting it bteween `child1` and `child2`. +This creates a node with a `HierarchyId` of `/4/1/3/1/1.5/`, putting it between `child1` and `child2`. This enhancement was contributed by [@Rezakazemi890](https://github.com/Rezakazemi890). Many thanks! diff --git a/entity-framework/core/what-is-new/index.md b/entity-framework/core/what-is-new/index.md index cfda4bddf7..cb0ac447bf 100644 --- a/entity-framework/core/what-is-new/index.md +++ b/entity-framework/core/what-is-new/index.md @@ -1,8 +1,8 @@ --- title: EF Core releases and planning description: Current EF Core releases and schedule/planning details for future releases -author: ajcvickers -ms.date: 11/9/2022 +author: SamMonoRT +ms.date: 11/13/2024 uid: core/what-is-new/index --- @@ -12,9 +12,10 @@ uid: core/what-is-new/index | Release | Target framework | Supported until | Links | |----------------------------------------------------------------------------------------|-------------------|---------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| [EF Core 9.0](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore) | .NET 8 | November 10, 2026 | [What's new](xref:core/what-is-new/ef-core-9.0/whatsnew) / [Breaking changes](xref:core/what-is-new/ef-core-9.0/breaking-changes) | | [EF Core 8.0](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore) | .NET 8 | November 10, 2026 | [What's new](xref:core/what-is-new/ef-core-8.0/whatsnew) / [Breaking changes](xref:core/what-is-new/ef-core-8.0/breaking-changes) | -| [EF Core 7.0](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/7.0.0) | .NET 6 | May 14, 2024 | [What's new](xref:core/what-is-new/ef-core-7.0/whatsnew) / [Breaking changes](xref:core/what-is-new/ef-core-7.0/breaking-changes) | -| [EF Core 6.0](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/6.0.0) | .NET 6 | November 12, 2024 (LTS) | [What's new](xref:core/what-is-new/ef-core-6.0/whatsnew) / [Breaking changes](xref:core/what-is-new/ef-core-6.0/breaking-changes) | +| ~~[EF Core 7.0](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/7.0.0)~~ | .NET 6 | Expired May 14, 2024 | [What's new](xref:core/what-is-new/ef-core-7.0/whatsnew) / [Breaking changes](xref:core/what-is-new/ef-core-7.0/breaking-changes) | +| ~~[EF Core 6.0](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/6.0.0)~~ | .NET 6 | Expired November 12, 2024 | [What's new](xref:core/what-is-new/ef-core-6.0/whatsnew) / [Breaking changes](xref:core/what-is-new/ef-core-6.0/breaking-changes) | | ~~[EF Core 5.0](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/5.0.17)~~ | .NET Standard 2.1 | Expired May 10, 2022 | [Announcement](https://devblogs.microsoft.com/dotnet/announcing-the-release-of-ef-core-5-0/) / [Breaking changes](xref:core/what-is-new/ef-core-5.0/breaking-changes) | | ~~[EF Core 3.1](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/3.1.31)~~ | .NET Standard 2.0 | Expired December 13, 2022 | [Announcement](https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-3-1-and-entity-framework-6-4/) | | ~~[EF Core 3.0](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/3.0.3)~~ | .NET Standard 2.1 | Expired March 3, 2020 | [Announcement](https://devblogs.microsoft.com/dotnet/announcing-ef-core-3-0-and-ef-6-3-general-availability/) / [Breaking changes](xref:core/what-is-new/ef-core-3.x/breaking-changes) | @@ -32,20 +33,18 @@ Entity Framework Core releases and support are aligned with .NET releases and su ## Guidance on updating to new releases -* Supported releases are patched for security and other critical bugs. Always use the latest patch of a given release. For example, for EF Core 2.1, use 2.1.x for the highest 'x' available. -* Major version updates (for example, from EF Core 2 to EF Core 3) often have breaking changes. Thorough testing is advised when updating across major versions. Use the breaking changes links above for guidance on dealing with breaking changes. +* Supported releases are patched for security and other critical bugs. Always use the latest patch of a given release. For example, for EF Core 9.0, use 9.0.x for the highest 'x' available. +* Major version updates (for example, from EF Core 8 to EF Core 9) often have breaking changes. Thorough testing is advised when updating across major versions. Use the breaking changes links above for guidance on dealing with breaking changes. * Minor version updates do not typically contain breaking changes. However, thorough testing is still advised since new features can introduce regressions. ## Release planning and schedules -EF Core releases align with the [.NET Core shipping schedule](https://github.com/dotnet/core/blob/main/roadmap.md). +EF Core releases align with the [.NET shipping schedule](https://github.com/dotnet/core/blob/main/roadmap.md). Patch releases usually ship monthly, but have a long lead time. See the [release planning process](xref:core/what-is-new/release-planning) for more information on how we decide what to ship in each release. We typically don't do detailed planning for further out than the next major or minor release. -## EF Core 9.0 +## EF Core 10.0 -The next planned stable release is **EF Core 9.0**, or just **EF9**, scheduled for **November 2024**. - -See the [high-level plan for EF9](xref:core/what-is-new/ef-core-9.0/plan) for more information. +The next planned stable release is **EF Core 10.0**, or just **EF10**, scheduled for **November 2025**. diff --git a/entity-framework/core/what-is-new/nuget-packages.md b/entity-framework/core/what-is-new/nuget-packages.md index a0b6e36de1..a97dd66ce3 100644 --- a/entity-framework/core/what-is-new/nuget-packages.md +++ b/entity-framework/core/what-is-new/nuget-packages.md @@ -1,14 +1,14 @@ --- title: EF Core NuGet Packages description: Overview of the different Entity Framework Core NuGet packages -author: ajcvickers -ms.date: 01/21/2021 +author: SamMonoRT +ms.date: 10/21/2024 uid: core/what-is-new/nuget-packages --- # EF Core NuGet Packages -Entity Framework Core (EF Core) is shipped as [NuGet](https://www.nuget.org/) packages. The packages needed by an application depends on: +Entity Framework Core (EF Core) is shipped as [NuGet](https://www.nuget.org/profiles/EntityFramework) packages. The packages needed by an application depends on: - The type of database system being used (SQL Server, SQLite, etc.) - The EF Core features needed @@ -53,8 +53,9 @@ Common database providers are listed in the table below. See [database providers Use of tooling for [EF Core migrations](xref:core/managing-schemas/migrations/index) and [reverse engineering (scaffolding) from an existing database](xref:core/managing-schemas/scaffolding) requires installation of the appropriate tooling package: +- [dotnet-ef](https://www.nuget.org/packages/dotnet-ef/) for cross-platform command line tooling +- [Microsoft.EntityFrameworkCore.Tasks](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Tasks/) for MSBuild tasks allowing build-time integration. - [Microsoft.EntityFrameworkCore.Tools](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Tools/) for PowerShell tooling that works in the Visual Studio [Package Manager Console](/nuget/consume-packages/install-use-packages-powershell) -- [dotnet-ef](https://www.nuget.org/packages/dotnet-ef/) and [Microsoft.EntityFrameworkCore.Design](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Design/) for cross-platform command line tooling See [Entity Framework Core Tools Reference](xref:core/cli/index) for more information on using EF Core tooling, including how to correctly install the `dotnet-ef` tool in a project or globally. @@ -84,6 +85,7 @@ Other EF Core packages are pulled in as dependencies of the database provider pa | Lightweight package for EF Core attributes, etc. | [Microsoft.EntityFrameworkCore.Abstractions](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Abstractions/) | Roslyn code analyzers for EF Core usage | [Microsoft.EntityFrameworkCore.Analyzers](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Analyzers/) | EF Core SQLite provider without a native SQLite dependency | [Microsoft.EntityFrameworkCore.Sqlite.Core](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite.Core/) +| Design-time functionality implementation shared by EF tools| [Microsoft.EntityFrameworkCore.Design](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Design/) ## Packages for database provider testing diff --git a/entity-framework/core/what-is-new/release-planning.md b/entity-framework/core/what-is-new/release-planning.md index 5daa394da9..8934b9ed83 100644 --- a/entity-framework/core/what-is-new/release-planning.md +++ b/entity-framework/core/what-is-new/release-planning.md @@ -1,7 +1,7 @@ --- title: EF Core release planning description: Information on how Entity Framework Core planning and releasing is done -author: ajcvickers +author: SamMonoRT ms.date: 01/28/2020 uid: core/what-is-new/release-planning --- diff --git a/entity-framework/docfx.json b/entity-framework/docfx.json index b281877659..510e3bf55a 100644 --- a/entity-framework/docfx.json +++ b/entity-framework/docfx.json @@ -33,6 +33,7 @@ "exclude": [ "**/bin/**", "**/obj/**", + "**/includes/**", "_site/**" ] } @@ -72,7 +73,7 @@ "audience": "developer", "ms.tgt_pltfrm": "dotnet", "ms.devlang": "dotnet", - "ms.author": "avickers", + "ms.author": "sampatel", "feedback_system": "OpenSource", "feedback_github_repo": "dotnet/EntityFramework.Docs", "feedback_product_url": "https://github.com/dotnet/efcore/issues/new/choose", @@ -94,7 +95,10 @@ "ef6/**/**.md": "https://github.com/dotnet/ef6/issues/new" }, "ms.technology": { - } + }, + "ms.update-cycle": { + "**/**.{md,yml}": "3650-days" + } }, "dest": "_site", "template": [ diff --git a/entity-framework/dotnet-data/index.yml b/entity-framework/dotnet-data/index.yml index 3bb44b8fc5..fa791286b6 100644 --- a/entity-framework/dotnet-data/index.yml +++ b/entity-framework/dotnet-data/index.yml @@ -10,7 +10,6 @@ metadata: ms.product: entity-framework ms.topic: hub-page author: jcjiang - ms.author: jiacjian ms.date: 03/08/2023 # highlightedContent section (optional) diff --git a/entity-framework/ef6/fundamentals/async.md b/entity-framework/ef6/fundamentals/async.md index 09e1c2c897..e6860e1fd7 100644 --- a/entity-framework/ef6/fundamentals/async.md +++ b/entity-framework/ef6/fundamentals/async.md @@ -1,7 +1,7 @@ --- title: Async query and save - EF6 description: Async query and save in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/async --- diff --git a/entity-framework/ef6/fundamentals/configuring/code-based.md b/entity-framework/ef6/fundamentals/configuring/code-based.md index ae2475757c..116c56e06b 100644 --- a/entity-framework/ef6/fundamentals/configuring/code-based.md +++ b/entity-framework/ef6/fundamentals/configuring/code-based.md @@ -1,7 +1,7 @@ --- title: Code-based configuration - EF6 description: Code-based configuration in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/configuring/code-based --- diff --git a/entity-framework/ef6/fundamentals/configuring/config-file.md b/entity-framework/ef6/fundamentals/configuring/config-file.md index 68020abc09..9e1ea2dd65 100644 --- a/entity-framework/ef6/fundamentals/configuring/config-file.md +++ b/entity-framework/ef6/fundamentals/configuring/config-file.md @@ -1,12 +1,21 @@ --- title: Configuration File Settings - EF6 description: Configuration file settings in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/configuring/config-file --- # Configuration File Settings -Entity Framework allows a number of settings to be specified from the configuration file. In general EF follows a ‘convention over configuration’ principle: all the settings discussed in this post have a default behavior, you only need to worry about changing the setting when the default no longer satisfies your requirements. +Entity Framework allows a number of settings to be specified from the configuration file. In general EF follows a ‘convention over configuration’ principle: all the settings discussed in this post have a default behavior, you only need to worry about changing the setting when the default no longer satisfies your requirements. + +## Configuration data guidelines + +* Never store passwords or other sensitive data in configuration provider code or in plain text configuration files. +* Don't use production secrets in development or test environments. +* Specify secrets outside of the project so that they can't be accidentally committed to a source code repository. +* Consider protecting the contents of the configuration file using [Protected Configuration](/dotnet/framework/data/adonet/connection-strings-and-configuration-files#encrypt-configuration-file-sections-using-protected-configuration). + +[!INCLUDE [managed-identities-test-non-production](~/core/includes/managed-identities-test-non-production.md)] ## A Code-Based Alternative diff --git a/entity-framework/ef6/fundamentals/configuring/connection-strings.md b/entity-framework/ef6/fundamentals/configuring/connection-strings.md index 20d8b71ba5..2e6c8e552b 100644 --- a/entity-framework/ef6/fundamentals/configuring/connection-strings.md +++ b/entity-framework/ef6/fundamentals/configuring/connection-strings.md @@ -1,17 +1,20 @@ --- title: Connection strings and models - EF6 description: Connection strings and models in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/configuring/connection-strings --- # Connection strings and models -This topic covers how Entity Framework discovers which database connection to use, and how you can change it. Models created with Code First and the EF Designer are both covered in this topic. +This article covers how Entity Framework discovers which database connection to use, and how to change it. Models created with Code First and the EF Designer are covered. -Typically an Entity Framework application uses a class derived from DbContext. This derived class will call one of the constructors on the base DbContext class to control: +[!INCLUDE [managed-identities-test-non-production](~/core/includes/managed-identities-test-non-production.md)] -- How the context will connect to a database — that is, how a connection string is found/used -- Whether the context will use calculate a model using Code First or load a model created with the EF Designer + +Typically an Entity Framework application uses a class derived from DbContext. This derived class calls one of the constructors on the base DbContext class to control: + +- How the context connects to a database, that is, how a connection string is found and used. +- Whether the context calculates a model using Code First or loads a model created with the EF Designer. - Additional advanced options The following fragments show some of the ways the DbContext constructors can be used. diff --git a/entity-framework/ef6/fundamentals/configuring/dependency-resolution.md b/entity-framework/ef6/fundamentals/configuring/dependency-resolution.md index f2aabe2f1a..ba8bc306ac 100644 --- a/entity-framework/ef6/fundamentals/configuring/dependency-resolution.md +++ b/entity-framework/ef6/fundamentals/configuring/dependency-resolution.md @@ -1,7 +1,7 @@ --- title: Dependency resolution - EF6 description: Dependency resolution in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/configuring/dependency-resolution --- @@ -58,7 +58,7 @@ This article does not contain full details on how to implement IDbDependencyReso **Version introduced**: EF6.0.0 -**Object returned**: The connection factory that will be used when EF creates a database connection by convention. That is, when no connection or connection string is given to EF, and no connection string can be found in the app.config or web.config, then this service is used to create a connection by convention. Changing the connection factory can allow EF to use a different type of database (for example, SQL Server Compact Edition) by default. +**Object returned**: The connection factory that will be used when EF creates a database connection by convention. That is, when no connection or connection string is given to EF, and no connection string can be found in the `app.config` or `web.config`, then this service is used to create a connection by convention. Changing the connection factory can allow EF to use a different type of database (for example, SQL Server Compact Edition) by default. Never store passwords or other sensitive data in configuration provider code or in plain text configuration files. Specify secrets outside of the project so that they can't be accidentally committed to a source code repository. Consider protecting the contents of the configuration file using [Protected Configuration](/dotnet/framework/data/adonet/connection-strings-and-configuration-files#encrypt-configuration-file-sections-using-protected-configuration). **Key**: Not used; will be null @@ -97,7 +97,7 @@ This article does not contain full details on how to implement IDbDependencyReso **Object returned**: An EF spatial provider that adds support to the basic EF provider for geography and geometry spatial types. -**Key**: DbSptialServices is asked for in two ways. First, provider-specific spatial services are requested using a DbProviderInfo object (which contains invariant name and manifest token) as the key. Second, DbSpatialServices can be asked for with no key. This is used to resolve the "global spatial provider" which is used when creating stand-alone DbGeography or DbGeometry types. +**Key**: DbSpatialServices is asked for in two ways. First, provider-specific spatial services are requested using a DbProviderInfo object (which contains invariant name and manifest token) as the key. Second, DbSpatialServices can be asked for with no key. This is used to resolve the "global spatial provider" which is used when creating stand-alone DbGeography or DbGeometry types. >[!NOTE] > For more details on provider-related services in EF6 see the [EF6 provider model](xref:ef6/fundamentals/providers/provider-model) section. @@ -190,7 +190,7 @@ This article does not contain full details on how to implement IDbDependencyReso **Version introduced**: EF6.1.0 -**Object returned**: A factory that will be used to create serializers for serialization of strongly-typed custom annotations such that they can be serialized and desterilized into XML for use in Code First Migrations. +**Object returned**: A factory that will be used to create serializers for serialization of strongly-typed custom annotations such that they can be serialized and deserialized into XML for use in Code First Migrations. **Key**: The name of the annotation that is being serialized or deserialized. diff --git a/entity-framework/ef6/fundamentals/connection-management.md b/entity-framework/ef6/fundamentals/connection-management.md index 752905646e..35686cd069 100644 --- a/entity-framework/ef6/fundamentals/connection-management.md +++ b/entity-framework/ef6/fundamentals/connection-management.md @@ -1,7 +1,7 @@ --- title: Connection management - EF6 description: Connection management in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/connection-management --- diff --git a/entity-framework/ef6/fundamentals/connection-resiliency/commit-failures.md b/entity-framework/ef6/fundamentals/connection-resiliency/commit-failures.md index 83af964a8d..bc68501905 100644 --- a/entity-framework/ef6/fundamentals/connection-resiliency/commit-failures.md +++ b/entity-framework/ef6/fundamentals/connection-resiliency/commit-failures.md @@ -1,7 +1,7 @@ --- title: Handling transaction commit failures - EF6 description: Handling transaction commit failures in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/connection-resiliency/commit-failures --- diff --git a/entity-framework/ef6/fundamentals/databinding/winforms.md b/entity-framework/ef6/fundamentals/databinding/winforms.md index 61565df460..e7daf1f603 100644 --- a/entity-framework/ef6/fundamentals/databinding/winforms.md +++ b/entity-framework/ef6/fundamentals/databinding/winforms.md @@ -1,7 +1,7 @@ --- title: Databinding with WinForms - EF6 description: Databinding with WinForms in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/databinding/winforms --- diff --git a/entity-framework/ef6/fundamentals/databinding/wpf.md b/entity-framework/ef6/fundamentals/databinding/wpf.md index dd567a75d8..755c2025e2 100644 --- a/entity-framework/ef6/fundamentals/databinding/wpf.md +++ b/entity-framework/ef6/fundamentals/databinding/wpf.md @@ -1,7 +1,7 @@ --- title: Databinding with WPF - EF6 description: Databinding with WPF in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 05/19/2020 uid: ef6/fundamentals/databinding/wpf --- @@ -10,7 +10,7 @@ uid: ef6/fundamentals/databinding/wpf > [!IMPORTANT] > **This document is valid for WPF on the .NET Framework only** > -> This document describes databinding for WPF on the .NET Framework. For new .NET Core projects, we recommend you use [EF Core](xref:core/index) instead of Entity Framework 6. The documentation for databinding in EF Core is here: [Getting Started with WPF](xref:core/get-started/wpf). +> This document describes databinding for WPF on the .NET Framework. For new .NET projects, we recommend you use [EF Core](xref:core/index) instead of Entity Framework 6. The documentation for databinding in EF Core is here: [Getting Started with WPF](xref:core/get-started/wpf). This step-by-step walkthrough shows how to bind POCO types to WPF controls in a “master-detail" form. The application uses the Entity Framework APIs to populate objects with data from the database, track changes, and persist data to the database. diff --git a/entity-framework/ef6/fundamentals/disconnected-entities/index.md b/entity-framework/ef6/fundamentals/disconnected-entities/index.md index 67a898f25b..5ff7b2e0ee 100644 --- a/entity-framework/ef6/fundamentals/disconnected-entities/index.md +++ b/entity-framework/ef6/fundamentals/disconnected-entities/index.md @@ -1,7 +1,7 @@ --- title: Working with disconnected entities - EF6 description: Working with disconnected entities in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/disconnected-entities/index --- diff --git a/entity-framework/ef6/fundamentals/disconnected-entities/self-tracking-entities/index.md b/entity-framework/ef6/fundamentals/disconnected-entities/self-tracking-entities/index.md index 925e3eea30..417a85c22d 100644 --- a/entity-framework/ef6/fundamentals/disconnected-entities/self-tracking-entities/index.md +++ b/entity-framework/ef6/fundamentals/disconnected-entities/self-tracking-entities/index.md @@ -1,7 +1,7 @@ --- title: Self-tracking entities - EF6 description: Self-tracking entities in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/disconnected-entities/self-tracking-entities/index --- diff --git a/entity-framework/ef6/fundamentals/disconnected-entities/self-tracking-entities/walkthrough.md b/entity-framework/ef6/fundamentals/disconnected-entities/self-tracking-entities/walkthrough.md index e66f47122e..e12bf57cdd 100644 --- a/entity-framework/ef6/fundamentals/disconnected-entities/self-tracking-entities/walkthrough.md +++ b/entity-framework/ef6/fundamentals/disconnected-entities/self-tracking-entities/walkthrough.md @@ -1,7 +1,7 @@ --- title: Self-Tracking Entities Walkthrough - EF6 description: Self-tracking entities walkthrough for Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/disconnected-entities/self-tracking-entities/walkthrough --- diff --git a/entity-framework/ef6/fundamentals/install.md b/entity-framework/ef6/fundamentals/install.md index 65d040c96a..da382359ac 100644 --- a/entity-framework/ef6/fundamentals/install.md +++ b/entity-framework/ef6/fundamentals/install.md @@ -1,7 +1,7 @@ --- title: Get Entity Framework - EF6 description: Get Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/install --- diff --git a/entity-framework/ef6/fundamentals/logging-and-interception.md b/entity-framework/ef6/fundamentals/logging-and-interception.md index 9df2fe4bc2..e6bba2c799 100644 --- a/entity-framework/ef6/fundamentals/logging-and-interception.md +++ b/entity-framework/ef6/fundamentals/logging-and-interception.md @@ -1,7 +1,7 @@ --- title: Logging and intercepting database operations - EF6 description: Logging and intercepting database operations in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/logging-and-interception --- diff --git a/entity-framework/ef6/fundamentals/performance/ngen.md b/entity-framework/ef6/fundamentals/performance/ngen.md index e5163b012c..77cd6cef2e 100644 --- a/entity-framework/ef6/fundamentals/performance/ngen.md +++ b/entity-framework/ef6/fundamentals/performance/ngen.md @@ -1,7 +1,7 @@ --- title: Improving startup performance with NGen - EF6 description: Improving startup performance with NGen in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/performance/ngen --- diff --git a/entity-framework/ef6/fundamentals/performance/perf-whitepaper.md b/entity-framework/ef6/fundamentals/performance/perf-whitepaper.md index e8167d0ef8..11f578b2f2 100644 --- a/entity-framework/ef6/fundamentals/performance/perf-whitepaper.md +++ b/entity-framework/ef6/fundamentals/performance/perf-whitepaper.md @@ -1,7 +1,7 @@ --- title: Performance considerations for EF4, EF5, and EF6 - EF6 description: Performance considerations for Entity Framework 4, 5, and 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/performance/perf-whitepaper --- diff --git a/entity-framework/ef6/fundamentals/performance/pre-generated-views.md b/entity-framework/ef6/fundamentals/performance/pre-generated-views.md index 94a15618ff..cf9dc1c598 100644 --- a/entity-framework/ef6/fundamentals/performance/pre-generated-views.md +++ b/entity-framework/ef6/fundamentals/performance/pre-generated-views.md @@ -1,7 +1,7 @@ --- title: Pre-generated mapping views - EF6 description: Pre-generated mapping views in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/performance/pre-generated-views --- diff --git a/entity-framework/ef6/fundamentals/providers/index.md b/entity-framework/ef6/fundamentals/providers/index.md index 7883adfe62..aadfafc560 100644 --- a/entity-framework/ef6/fundamentals/providers/index.md +++ b/entity-framework/ef6/fundamentals/providers/index.md @@ -1,7 +1,7 @@ --- title: Entity Framework Providers - EF6 description: Entity Framework Providers in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 06/27/2018 uid: ef6/fundamentals/providers/index --- diff --git a/entity-framework/ef6/fundamentals/providers/provider-model.md b/entity-framework/ef6/fundamentals/providers/provider-model.md index 426f272598..f295cffd2f 100644 --- a/entity-framework/ef6/fundamentals/providers/provider-model.md +++ b/entity-framework/ef6/fundamentals/providers/provider-model.md @@ -1,7 +1,7 @@ --- title: The Entity Framework 6 provider model - EF6 description: The Entity Framework 6 provider model in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 06/27/2018 uid: ef6/fundamentals/providers/provider-model --- @@ -49,7 +49,7 @@ This is an optional service that allows a provider to create DbConnection object ### DbSpatialServices -This is an optional services that allows a provider to add support for geography and geometry spatial types. An implementation of this service must be supplied in order for an application to use EF with spatial types. DbSptialServices is asked for in two ways. First, provider-specific spatial services are requested using a DbProviderInfo object (which contains invariant name and manifest token) as key. Second, DbSpatialServices can be asked for with no key. This is used to resolve the “global spatial provider” that is used when creating stand-alone DbGeography or DbGeometry types. +This is an optional services that allows a provider to add support for geography and geometry spatial types. An implementation of this service must be supplied in order for an application to use EF with spatial types. DbSpatialServices is asked for in two ways. First, provider-specific spatial services are requested using a DbProviderInfo object (which contains invariant name and manifest token) as key. Second, DbSpatialServices can be asked for with no key. This is used to resolve the “global spatial provider” that is used when creating stand-alone DbGeography or DbGeometry types. ### MigrationSqlGenerator @@ -97,7 +97,7 @@ public class MyConfiguration : DbConfiguration ## Resolving additional services -As mentioned above in the _Provider types overview_ section, a DbProviderServices class can also be used to resolve additional services. This is possible because DbProviderServices implements IDbDependencyResolver and each registered DbProviderServices type is added as a “default resolver”. The IDbDpendencyResolver mechanism is described in more detail in [Dependency Resolution](xref:ef6/fundamentals/configuring/dependency-resolution). However, it is not necessary to understand all the concepts in this specification to resolve additional services in a provider. +As mentioned above in the _Provider types overview_ section, a DbProviderServices class can also be used to resolve additional services. This is possible because DbProviderServices implements IDbDependencyResolver and each registered DbProviderServices type is added as a “default resolver”. The IDbDependencyResolver mechanism is described in more detail in [Dependency Resolution](xref:ef6/fundamentals/configuring/dependency-resolution). However, it is not necessary to understand all the concepts in this specification to resolve additional services in a provider. The most common way for a provider to resolve additional services is to call DbProviderServices.AddDependencyResolver for each service in the constructor of the DbProviderServices class. For example, SqlProviderServices (the EF provider for SQL Server) has code similar to this for initialization: diff --git a/entity-framework/ef6/fundamentals/providers/spatial-support.md b/entity-framework/ef6/fundamentals/providers/spatial-support.md index cb188a67c4..934f014e19 100644 --- a/entity-framework/ef6/fundamentals/providers/spatial-support.md +++ b/entity-framework/ef6/fundamentals/providers/spatial-support.md @@ -1,7 +1,7 @@ --- title: Provider Support for Spatial Types - EF6 description: Provider support for spatial types in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/providers/spatial-support --- @@ -51,4 +51,4 @@ SQL Server spatial support depends on the low-level, SQL Server-specific types S When Visual Studio is installed it will often also install a version of SQL Server, and this will include installation of the Microsoft.SqlServer.Types.dll. -If SQL Server is not installed on the machine where you want to use spatial types, or if spatial types were excluded from the SQL Server installation, then you will need to install them manually. The types can be installed using `SQLSysClrTypes.msi`, which is part of Microsoft SQL Server Feature Pack. Spatial types are SQL Server version-specific, so we recommend [search for "SQL Server Feature Pack"](https://www.microsoft.com/search/result.aspx?q=sql+server+feature+pack) in the Microsoft Download Center, then select and download the option that corresponds to the version of SQL Server you will use. +If SQL Server is not installed on the machine where you want to use spatial types, or if spatial types were excluded from the SQL Server installation, then you will need to install them manually. The types can be installed using `SQLSysClrTypes.msi`, which is part of Microsoft SQL Server Feature Pack. Spatial types are SQL Server version-specific, so we recommend [search for "SQL Server Feature Pack"](https://www.microsoft.com/search/explore?q=SQL+Server+Feature+Pack) in the Microsoft Download Center, then select and download the option that corresponds to the version of SQL Server you will use. diff --git a/entity-framework/ef6/fundamentals/proxies.md b/entity-framework/ef6/fundamentals/proxies.md index a4ab05e2e3..7572a524a1 100644 --- a/entity-framework/ef6/fundamentals/proxies.md +++ b/entity-framework/ef6/fundamentals/proxies.md @@ -1,7 +1,7 @@ --- title: Working with proxies - EF6 description: Working with proxies in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/proxies --- diff --git a/entity-framework/ef6/fundamentals/relationships.md b/entity-framework/ef6/fundamentals/relationships.md index 8d62daef5c..f52c9cb1dc 100644 --- a/entity-framework/ef6/fundamentals/relationships.md +++ b/entity-framework/ef6/fundamentals/relationships.md @@ -1,7 +1,7 @@ --- title: Relationships, navigation properties, and foreign keys - EF6 description: Relationships, navigation properties, and foreign keys in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/relationships --- diff --git a/entity-framework/ef6/fundamentals/testing/mocking.md b/entity-framework/ef6/fundamentals/testing/mocking.md index 7ccff0c140..77aa55389d 100644 --- a/entity-framework/ef6/fundamentals/testing/mocking.md +++ b/entity-framework/ef6/fundamentals/testing/mocking.md @@ -1,7 +1,7 @@ --- title: Testing with a mocking framework - EF6 description: Testing with a mocking framework in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/testing/mocking --- diff --git a/entity-framework/ef6/fundamentals/testing/testability-article.md b/entity-framework/ef6/fundamentals/testing/testability-article.md index dde4f8b2bb..822d692822 100644 --- a/entity-framework/ef6/fundamentals/testing/testability-article.md +++ b/entity-framework/ef6/fundamentals/testing/testability-article.md @@ -1,7 +1,7 @@ --- title: Testability and Entity Framework 4.0 - EF6 description: Testability and Entity Framework 4.0 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Testability and Entity Framework 4.0 diff --git a/entity-framework/ef6/fundamentals/testing/writing-test-doubles.md b/entity-framework/ef6/fundamentals/testing/writing-test-doubles.md index 859281ed5f..88887d302a 100644 --- a/entity-framework/ef6/fundamentals/testing/writing-test-doubles.md +++ b/entity-framework/ef6/fundamentals/testing/writing-test-doubles.md @@ -1,7 +1,7 @@ --- title: Testing with your own test doubles - EF6 description: Testing with your own test doubles in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/testing/writing-test-doubles --- @@ -158,7 +158,7 @@ namespace TestingDemo Now that we have the real EF model and the service that can use it, it's time to create the in-memory test double that we can use for testing. We've created a TestContext test double for our context. In test doubles we get to choose the behavior we want in order to support the tests we are going to run. In this example we're just capturing the number of times SaveChanges is called, but you can include whatever logic is needed to verify the scenario you are testing. -We've also created a TestDbSet that provides an in-memory implementation of DbSet. We've provided a complete implemention for all the methods on DbSet (except for Find), but you only need to implement the members that your test scenario will use. +We've also created a TestDbSet that provides an in-memory implementation of DbSet. We've provided a complete implementation for all the methods on DbSet (except for Find), but you only need to implement the members that your test scenario will use. TestDbSet makes use of some other infrastructure classes that we've included to ensure that async queries can be processed. diff --git a/entity-framework/ef6/fundamentals/working-with-dbcontext.md b/entity-framework/ef6/fundamentals/working-with-dbcontext.md index d8c884e1ea..bd5e8195ff 100644 --- a/entity-framework/ef6/fundamentals/working-with-dbcontext.md +++ b/entity-framework/ef6/fundamentals/working-with-dbcontext.md @@ -1,7 +1,7 @@ --- title: Working with DbContext - EF6 description: Working with DbContext in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/fundamentals/working-with-dbcontext --- diff --git a/entity-framework/ef6/get-started.md b/entity-framework/ef6/get-started.md index 594296d672..c73f79335c 100644 --- a/entity-framework/ef6/get-started.md +++ b/entity-framework/ef6/get-started.md @@ -1,7 +1,7 @@ --- title: Get started with Entity Framework 6 - EF6 description: Get started with Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/get-started --- diff --git a/entity-framework/ef6/index.md b/entity-framework/ef6/index.md index 2967931b1b..b9c481b6ae 100644 --- a/entity-framework/ef6/index.md +++ b/entity-framework/ef6/index.md @@ -1,7 +1,7 @@ --- title: Overview of Entity Framework 6 - EF6 description: Overview of Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/index --- diff --git a/entity-framework/ef6/media/schemawithdisplaynamerenamed.png b/entity-framework/ef6/media/schemawithdisplaynamerenamed.png index bcdec94436..117a6e9c41 100644 Binary files a/entity-framework/ef6/media/schemawithdisplaynamerenamed.png and b/entity-framework/ef6/media/schemawithdisplaynamerenamed.png differ diff --git a/entity-framework/ef6/modeling/code-first/conventions/built-in.md b/entity-framework/ef6/modeling/code-first/conventions/built-in.md index 6767663488..23f1a048ad 100644 --- a/entity-framework/ef6/modeling/code-first/conventions/built-in.md +++ b/entity-framework/ef6/modeling/code-first/conventions/built-in.md @@ -1,7 +1,7 @@ --- title: Code First Conventions - EF6 description: Code First Conventions in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/conventions/built-in --- diff --git a/entity-framework/ef6/modeling/code-first/conventions/custom.md b/entity-framework/ef6/modeling/code-first/conventions/custom.md index f52873971b..e87491ded0 100644 --- a/entity-framework/ef6/modeling/code-first/conventions/custom.md +++ b/entity-framework/ef6/modeling/code-first/conventions/custom.md @@ -1,7 +1,7 @@ --- title: Custom Code First Conventions - EF6 description: Custom Code First Conventions in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/conventions/custom --- diff --git a/entity-framework/ef6/modeling/code-first/conventions/model.md b/entity-framework/ef6/modeling/code-first/conventions/model.md index 15aeaf5110..7ce942bf4c 100644 --- a/entity-framework/ef6/modeling/code-first/conventions/model.md +++ b/entity-framework/ef6/modeling/code-first/conventions/model.md @@ -1,7 +1,7 @@ --- title: Model-Based Conventions - EF6 description: Model-Based Conventions in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/conventions/model --- diff --git a/entity-framework/ef6/modeling/code-first/data-annotations.md b/entity-framework/ef6/modeling/code-first/data-annotations.md index 9ffeb2eefb..cef0504cb0 100644 --- a/entity-framework/ef6/modeling/code-first/data-annotations.md +++ b/entity-framework/ef6/modeling/code-first/data-annotations.md @@ -1,7 +1,7 @@ --- title: Code First Data Annotations - EF6 description: Code First Data Annotations in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/data-annotations --- @@ -42,7 +42,7 @@ I’ll demonstrate Code First DataAnnotations with a simple pair of classes: Blo } ``` -As they are, the Blog and Post classes conveniently follow code first convention and require no tweaks to enable EF compatability. However, you can also use the annotations to provide more information to EF about the classes and the database to which they map. +As they are, the Blog and Post classes conveniently follow code first convention and require no tweaks to enable EF compatibility. However, you can also use the annotations to provide more information to EF about the classes and the database to which they map.   diff --git a/entity-framework/ef6/modeling/code-first/data-types/enums.md b/entity-framework/ef6/modeling/code-first/data-types/enums.md index 11dd0ddcec..42ba2afeb8 100644 --- a/entity-framework/ef6/modeling/code-first/data-types/enums.md +++ b/entity-framework/ef6/modeling/code-first/data-types/enums.md @@ -1,7 +1,7 @@ --- title: Enum Support - Code First - EF6 description: Enum Support - Code First in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/data-types/enums --- diff --git a/entity-framework/ef6/modeling/code-first/data-types/spatial.md b/entity-framework/ef6/modeling/code-first/data-types/spatial.md index 256a55e81a..fb4f87eb57 100644 --- a/entity-framework/ef6/modeling/code-first/data-types/spatial.md +++ b/entity-framework/ef6/modeling/code-first/data-types/spatial.md @@ -1,7 +1,7 @@ --- title: Spatial - Code First - EF6 description: Spatial - Code First in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/data-types/spatial --- diff --git a/entity-framework/ef6/modeling/code-first/dbsets.md b/entity-framework/ef6/modeling/code-first/dbsets.md index 89000d630f..76b8256ffe 100644 --- a/entity-framework/ef6/modeling/code-first/dbsets.md +++ b/entity-framework/ef6/modeling/code-first/dbsets.md @@ -1,7 +1,7 @@ --- title: Defining DbSets - EF6 description: Defining DbSets in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/dbsets --- diff --git a/entity-framework/ef6/modeling/code-first/fluent/cud-stored-procedures.md b/entity-framework/ef6/modeling/code-first/fluent/cud-stored-procedures.md index 5cf49553a6..52936ce336 100644 --- a/entity-framework/ef6/modeling/code-first/fluent/cud-stored-procedures.md +++ b/entity-framework/ef6/modeling/code-first/fluent/cud-stored-procedures.md @@ -1,7 +1,7 @@ --- title: Code First Insert, Update, and Delete Stored Procedures - EF6 description: Code First Insert, Update, and Delete Stored Procedures in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/fluent/cud-stored-procedures --- diff --git a/entity-framework/ef6/modeling/code-first/fluent/relationships.md b/entity-framework/ef6/modeling/code-first/fluent/relationships.md index 65aa4f2c02..f327f60e4b 100644 --- a/entity-framework/ef6/modeling/code-first/fluent/relationships.md +++ b/entity-framework/ef6/modeling/code-first/fluent/relationships.md @@ -1,7 +1,7 @@ --- title: Fluent API - Relationships - EF6 description: Fluent API - Relationships in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/fluent/relationships --- diff --git a/entity-framework/ef6/modeling/code-first/fluent/types-and-properties.md b/entity-framework/ef6/modeling/code-first/fluent/types-and-properties.md index b3f046558f..7073fd877c 100644 --- a/entity-framework/ef6/modeling/code-first/fluent/types-and-properties.md +++ b/entity-framework/ef6/modeling/code-first/fluent/types-and-properties.md @@ -1,7 +1,7 @@ --- title: Fluent API - Configuring and Mapping Properties and Types - EF6 description: Fluent API - Configuring and Mapping Properties and Types in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/fluent/types-and-properties --- diff --git a/entity-framework/ef6/modeling/code-first/fluent/vb.md b/entity-framework/ef6/modeling/code-first/fluent/vb.md index 8e58763cf9..1e38974dcf 100644 --- a/entity-framework/ef6/modeling/code-first/fluent/vb.md +++ b/entity-framework/ef6/modeling/code-first/fluent/vb.md @@ -1,7 +1,7 @@ --- title: Fluent API with VB.NET - EF6 description: Fluent API with VB.NET in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/fluent/vb --- diff --git a/entity-framework/ef6/modeling/code-first/migrations/automatic.md b/entity-framework/ef6/modeling/code-first/migrations/automatic.md index 1fec747ba9..63d6e32ced 100644 --- a/entity-framework/ef6/modeling/code-first/migrations/automatic.md +++ b/entity-framework/ef6/modeling/code-first/migrations/automatic.md @@ -1,7 +1,7 @@ --- title: Automatic Code First Migrations - EF6 description: Automatic Code First Migrations in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/migrations/automatic --- diff --git a/entity-framework/ef6/modeling/code-first/migrations/existing-database.md b/entity-framework/ef6/modeling/code-first/migrations/existing-database.md index 4b8b3942f9..dab982a981 100644 --- a/entity-framework/ef6/modeling/code-first/migrations/existing-database.md +++ b/entity-framework/ef6/modeling/code-first/migrations/existing-database.md @@ -1,7 +1,7 @@ --- title: Code First Migrations with an existing database - EF6 description: Code First Migrations with an existing database in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/migrations/existing-database --- diff --git a/entity-framework/ef6/modeling/code-first/migrations/history-customization.md b/entity-framework/ef6/modeling/code-first/migrations/history-customization.md index d7f0729732..0ee0f6dd42 100644 --- a/entity-framework/ef6/modeling/code-first/migrations/history-customization.md +++ b/entity-framework/ef6/modeling/code-first/migrations/history-customization.md @@ -1,7 +1,7 @@ --- title: Customizing the migrations history table - EF6 description: Customizing the migrations history table in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/migrations/history-customization --- diff --git a/entity-framework/ef6/modeling/code-first/migrations/index.md b/entity-framework/ef6/modeling/code-first/migrations/index.md index 1a2db5dd7b..44430e731f 100644 --- a/entity-framework/ef6/modeling/code-first/migrations/index.md +++ b/entity-framework/ef6/modeling/code-first/migrations/index.md @@ -1,7 +1,7 @@ --- title: Code First Migrations - EF6 description: Code First Migrations in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/migrations/index --- diff --git a/entity-framework/ef6/modeling/code-first/migrations/migrate-exe.md b/entity-framework/ef6/modeling/code-first/migrations/migrate-exe.md index f634e73907..afc0fb1062 100644 --- a/entity-framework/ef6/modeling/code-first/migrations/migrate-exe.md +++ b/entity-framework/ef6/modeling/code-first/migrations/migrate-exe.md @@ -1,7 +1,7 @@ --- title: Using migrate.exe - EF6 description: Using migrate.exe in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/migrations/migrate-exe --- diff --git a/entity-framework/ef6/modeling/code-first/migrations/teams.md b/entity-framework/ef6/modeling/code-first/migrations/teams.md index 1684b6a513..a57e493aae 100644 --- a/entity-framework/ef6/modeling/code-first/migrations/teams.md +++ b/entity-framework/ef6/modeling/code-first/migrations/teams.md @@ -1,7 +1,7 @@ --- title: Code First Migrations in Team Environments - EF6 description: Code First Migrations in Team Environments in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/migrations/teams --- diff --git a/entity-framework/ef6/modeling/code-first/workflows/existing-database.md b/entity-framework/ef6/modeling/code-first/workflows/existing-database.md index e667a589f9..14f37b6061 100644 --- a/entity-framework/ef6/modeling/code-first/workflows/existing-database.md +++ b/entity-framework/ef6/modeling/code-first/workflows/existing-database.md @@ -1,7 +1,7 @@ --- title: Code First to an Existing Database - EF6 description: Code First to an Existing Database in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/workflows/existing-database --- diff --git a/entity-framework/ef6/modeling/code-first/workflows/new-database.md b/entity-framework/ef6/modeling/code-first/workflows/new-database.md index 0891dca942..4d484688e5 100644 --- a/entity-framework/ef6/modeling/code-first/workflows/new-database.md +++ b/entity-framework/ef6/modeling/code-first/workflows/new-database.md @@ -1,7 +1,7 @@ --- title: Code First to a New Database - EF6 description: Code First to a New Database in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/code-first/workflows/new-database --- diff --git a/entity-framework/ef6/modeling/designer/advanced/defining-query.md b/entity-framework/ef6/modeling/designer/advanced/defining-query.md index e476427517..8858c586e6 100644 --- a/entity-framework/ef6/modeling/designer/advanced/defining-query.md +++ b/entity-framework/ef6/modeling/designer/advanced/defining-query.md @@ -1,7 +1,7 @@ --- title: Defining Query - EF Designer - EF6 description: Defining Query - EF Designer in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/advanced/defining-query --- diff --git a/entity-framework/ef6/modeling/designer/advanced/edmx/csdl-spec.md b/entity-framework/ef6/modeling/designer/advanced/edmx/csdl-spec.md index 52ace5ec78..01c8667ae6 100644 --- a/entity-framework/ef6/modeling/designer/advanced/edmx/csdl-spec.md +++ b/entity-framework/ef6/modeling/designer/advanced/edmx/csdl-spec.md @@ -1,11 +1,15 @@ --- title: CSDL Specification - EF6 description: CSDL Specification in Entity Framework 6 -author: ajcvickers -ms.date: 10/23/2016 +author: SamMonoRT +ms.date: 08/23/2024 uid: ef6/modeling/designer/advanced/edmx/csdl-spec --- # CSDL Specification + +> [!NOTE] +> CSDL v1 is unsupported, please update to V3 + Conceptual schema definition language (CSDL) is an XML-based language that describes the entities, relationships, and functions that make up a conceptual model of a data-driven application. This conceptual model can be used by the Entity Framework or WCF Data Services. The metadata that is described with CSDL is used by the Entity Framework to map entities and relationships that are defined in a conceptual model to a data source. For more information, see [SSDL Specification](xref:ef6/modeling/designer/advanced/edmx/ssdl-spec) and [MSL Specification](xref:ef6/modeling/designer/advanced/edmx/msl-spec). CSDL is the Entity Framework's implementation of the Entity Data Model. @@ -22,7 +26,6 @@ Versions of CSDL are differentiated by XML namespaces. | CSDL v2 | `https://schemas.microsoft.com/ado/2008/09/edm` | | CSDL v3 | `https://schemas.microsoft.com/ado/2009/11/edm` | -  ## Association Element (CSDL) An **Association** element defines a relationship between two entity types. An association must specify the entity types that are involved in the relationship and the possible number of entity types at each end of the relationship, which is known as the multiplicity. The multiplicity of an association end can have a value of one (1), zero or one (0..1), or many (\*). This information is specified in two child End elements. diff --git a/entity-framework/ef6/modeling/designer/advanced/edmx/msl-spec.md b/entity-framework/ef6/modeling/designer/advanced/edmx/msl-spec.md index add03788e5..8f1d2db901 100644 --- a/entity-framework/ef6/modeling/designer/advanced/edmx/msl-spec.md +++ b/entity-framework/ef6/modeling/designer/advanced/edmx/msl-spec.md @@ -1,11 +1,15 @@ --- title: MSL Specification - EF6 description: MSL Specification in Entity Framework 6 -author: ajcvickers -ms.date: 10/23/2016 +author: SamMonoRT +ms.date: 08/23/2024 uid: ef6/modeling/designer/advanced/edmx/msl-spec --- # MSL Specification + +> [!NOTE] +> MSL v1 is unsupported, please update to V3 + Mapping specification language (MSL) is an XML-based language that describes the mapping between the conceptual model and storage model of an Entity Framework application. In an Entity Framework application, mapping metadata is loaded from an .msl file (written in MSL) at build time. Entity Framework uses mapping metadata at runtime to translate queries against the conceptual model to store-specific commands. @@ -20,7 +24,7 @@ Versions of MSL are differentiated by XML namespaces. |:------------|:-----------------------------------------------------| | MSL v1 | urn:schemas-microsoft-com:windows:storage:mapping:CS | | MSL v2 | `https://schemas.microsoft.com/ado/2008/09/mapping/cs` | -| MSL v3 | `https://schemas.microsoft.com/ado/2009/11/mapping/cs` | +| MSL v3 | `https://schemas.microsoft.com/ado/2009/11/mapping/cs` | ## Alias Element (MSL) diff --git a/entity-framework/ef6/modeling/designer/advanced/edmx/ssdl-spec.md b/entity-framework/ef6/modeling/designer/advanced/edmx/ssdl-spec.md index 716c13e868..ed6d4ec8b6 100644 --- a/entity-framework/ef6/modeling/designer/advanced/edmx/ssdl-spec.md +++ b/entity-framework/ef6/modeling/designer/advanced/edmx/ssdl-spec.md @@ -1,11 +1,15 @@ --- title: SSDL Specification - EF6 description: SSDL Specification in Entity Framework 6 -author: ajcvickers -ms.date: 10/23/2016 +author: SamMonoRT +ms.date: 08/23/2024 uid: ef6/modeling/designer/advanced/edmx/ssdl-spec --- # SSDL Specification + +> [!NOTE] +> SSDL v1 is unsupported, please update to V3 + Store schema definition language (SSDL) is an XML-based language that describes the storage model of an Entity Framework application. In an Entity Framework application, storage model metadata is loaded from a .ssdl file (written in SSDL) into an instance of the System.Data.Metadata.Edm.StoreItemCollection and is accessible by using methods in the System.Data.Metadata.Edm.MetadataWorkspace class. Entity Framework uses storage model metadata to translate queries against the conceptual model to store-specific commands. diff --git a/entity-framework/ef6/modeling/designer/advanced/multiple-result-sets.md b/entity-framework/ef6/modeling/designer/advanced/multiple-result-sets.md index eab02a3e2d..66bf8627b2 100644 --- a/entity-framework/ef6/modeling/designer/advanced/multiple-result-sets.md +++ b/entity-framework/ef6/modeling/designer/advanced/multiple-result-sets.md @@ -1,7 +1,7 @@ --- title: Stored Procedures with Multiple Result Sets - EF6 description: Stored Procedures with Multiple Result Sets in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/advanced/multiple-result-sets --- diff --git a/entity-framework/ef6/modeling/designer/advanced/tvfs.md b/entity-framework/ef6/modeling/designer/advanced/tvfs.md index 1a4bcc3999..f3a4d8bcf4 100644 --- a/entity-framework/ef6/modeling/designer/advanced/tvfs.md +++ b/entity-framework/ef6/modeling/designer/advanced/tvfs.md @@ -1,7 +1,7 @@ --- title: Table-Valued Functions (TVFs) - EF6 description: Table-Valued Functions (TVFs) in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/advanced/tvfs --- diff --git a/entity-framework/ef6/modeling/designer/codegen/index.md b/entity-framework/ef6/modeling/designer/codegen/index.md index 02f4905e60..59db859901 100644 --- a/entity-framework/ef6/modeling/designer/codegen/index.md +++ b/entity-framework/ef6/modeling/designer/codegen/index.md @@ -1,7 +1,7 @@ --- title: Designer Code Generation Templates - EF6 description: Designer Code Generation Templates in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/codegen/index --- diff --git a/entity-framework/ef6/modeling/designer/codegen/legacy-objectcontext.md b/entity-framework/ef6/modeling/designer/codegen/legacy-objectcontext.md index e2274cdc9c..061d21367a 100644 --- a/entity-framework/ef6/modeling/designer/codegen/legacy-objectcontext.md +++ b/entity-framework/ef6/modeling/designer/codegen/legacy-objectcontext.md @@ -1,7 +1,7 @@ --- title: Reverting to ObjectContext in Entity Framework Designer - EF6 description: Reverting to ObjectContext in Entity Framework Designer in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/codegen/legacy-objectcontext --- diff --git a/entity-framework/ef6/modeling/designer/data-types/complex-types.md b/entity-framework/ef6/modeling/designer/data-types/complex-types.md index c39bcf8708..e4b18fdadd 100644 --- a/entity-framework/ef6/modeling/designer/data-types/complex-types.md +++ b/entity-framework/ef6/modeling/designer/data-types/complex-types.md @@ -1,7 +1,7 @@ --- title: Complex Types - EF Designer - EF6 description: Complex Types - EF Designer in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/data-types/complex-types --- diff --git a/entity-framework/ef6/modeling/designer/data-types/enums.md b/entity-framework/ef6/modeling/designer/data-types/enums.md index a6c51832bd..467ca9ede2 100644 --- a/entity-framework/ef6/modeling/designer/data-types/enums.md +++ b/entity-framework/ef6/modeling/designer/data-types/enums.md @@ -1,7 +1,7 @@ --- title: Enum Support - EF Designer - EF6 description: Enum Support - EF Designer in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/data-types/enums --- diff --git a/entity-framework/ef6/modeling/designer/data-types/spatial.md b/entity-framework/ef6/modeling/designer/data-types/spatial.md index 764a249893..e224e7b238 100644 --- a/entity-framework/ef6/modeling/designer/data-types/spatial.md +++ b/entity-framework/ef6/modeling/designer/data-types/spatial.md @@ -1,7 +1,7 @@ --- title: Spatial - EF Designer - EF6 description: Spatial - EF Designer in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/data-types/spatial --- diff --git a/entity-framework/ef6/modeling/designer/entity-splitting.md b/entity-framework/ef6/modeling/designer/entity-splitting.md index 87d1c42276..adde5f4ad6 100644 --- a/entity-framework/ef6/modeling/designer/entity-splitting.md +++ b/entity-framework/ef6/modeling/designer/entity-splitting.md @@ -1,7 +1,7 @@ --- title: Designer Entity Splitting - EF6 description: Designer Entity Splitting in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/entity-splitting --- diff --git a/entity-framework/ef6/modeling/designer/inheritance/tph.md b/entity-framework/ef6/modeling/designer/inheritance/tph.md index 56f79f8243..3601c8fbfb 100644 --- a/entity-framework/ef6/modeling/designer/inheritance/tph.md +++ b/entity-framework/ef6/modeling/designer/inheritance/tph.md @@ -1,7 +1,7 @@ --- title: Designer TPH Inheritance - EF6 description: Designer TPH Inheritance in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/inheritance/tph --- diff --git a/entity-framework/ef6/modeling/designer/inheritance/tpt.md b/entity-framework/ef6/modeling/designer/inheritance/tpt.md index cd8e1b9a07..8bba825ec6 100644 --- a/entity-framework/ef6/modeling/designer/inheritance/tpt.md +++ b/entity-framework/ef6/modeling/designer/inheritance/tpt.md @@ -1,7 +1,7 @@ --- title: Designer TPT Inheritance - EF6 description: Designer TPT Inheritance in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/inheritance/tpt --- diff --git a/entity-framework/ef6/modeling/designer/keyboard-shortcuts.md b/entity-framework/ef6/modeling/designer/keyboard-shortcuts.md index 8ca3f0eaa6..8091d9b73d 100644 --- a/entity-framework/ef6/modeling/designer/keyboard-shortcuts.md +++ b/entity-framework/ef6/modeling/designer/keyboard-shortcuts.md @@ -1,7 +1,7 @@ --- title: Entity Framework Designer Keyboard Shortcuts - EF6 description: Entity Framework Designer Keyboard Shortcuts in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework Designer Keyboard Shortcuts diff --git a/entity-framework/ef6/modeling/designer/multiple-diagrams.md b/entity-framework/ef6/modeling/designer/multiple-diagrams.md index b0fd037f4a..4ce69d2d5a 100644 --- a/entity-framework/ef6/modeling/designer/multiple-diagrams.md +++ b/entity-framework/ef6/modeling/designer/multiple-diagrams.md @@ -1,7 +1,7 @@ --- title: Multiple Diagrams per Model - EF6 description: Multiple Diagrams per Model in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/multiple-diagrams --- diff --git a/entity-framework/ef6/modeling/designer/relationships.md b/entity-framework/ef6/modeling/designer/relationships.md index 8840371899..e7774cfae9 100644 --- a/entity-framework/ef6/modeling/designer/relationships.md +++ b/entity-framework/ef6/modeling/designer/relationships.md @@ -1,7 +1,7 @@ --- title: Relationships - EF Designer - EF6 description: Relationships - EF Designer in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/relationships --- diff --git a/entity-framework/ef6/modeling/designer/select-runtime-version.md b/entity-framework/ef6/modeling/designer/select-runtime-version.md index 9e960c6f6e..4f6c206a45 100644 --- a/entity-framework/ef6/modeling/designer/select-runtime-version.md +++ b/entity-framework/ef6/modeling/designer/select-runtime-version.md @@ -1,7 +1,7 @@ --- title: Selecting Entity Framework Runtime Version for EF Designer Models - EF6 description: Selecting Entity Framework Runtime Version for EF Designer Models in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Selecting Entity Framework Runtime Version for EF Designer Models diff --git a/entity-framework/ef6/modeling/designer/stored-procedures/cud.md b/entity-framework/ef6/modeling/designer/stored-procedures/cud.md index 99484c0310..cd93da2a3c 100644 --- a/entity-framework/ef6/modeling/designer/stored-procedures/cud.md +++ b/entity-framework/ef6/modeling/designer/stored-procedures/cud.md @@ -1,7 +1,7 @@ --- title: Designer CUD Stored Procedures - EF6 description: Designer CUD Stored Procedures in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/stored-procedures/cud --- diff --git a/entity-framework/ef6/modeling/designer/stored-procedures/query.md b/entity-framework/ef6/modeling/designer/stored-procedures/query.md index 0916107d64..ab595b5f1d 100644 --- a/entity-framework/ef6/modeling/designer/stored-procedures/query.md +++ b/entity-framework/ef6/modeling/designer/stored-procedures/query.md @@ -1,7 +1,7 @@ --- title: Designer Query Stored Procedures - EF6 description: Designer Query Stored Procedures in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/stored-procedures/query --- @@ -44,7 +44,7 @@ To complete this walkthrough, you will need: ![Import Stored Procedures](~/ef6/media/import.jpg) - *Starting with Visual Studio 2012 the EF Designer supports bulk import of stored procedures. The **Import selected stored procedures and functions into theentity model** is checked by default.* + *Starting with Visual Studio 2012 the EF Designer supports bulk import of stored procedures. The **Import selected stored procedures and functions into the entity model** is checked by default.* - Click **Finish**. By default, the result shape of each imported stored procedure or function that returns more than one column will automatically become a new complex type. In this example we want to map the results of the **GetStudentGrades** function to the **StudentGrade** entity and the results of the **GetDepartmentName** to **none** (**none** is the default value). diff --git a/entity-framework/ef6/modeling/designer/table-splitting.md b/entity-framework/ef6/modeling/designer/table-splitting.md index 3da19be499..5866db7693 100644 --- a/entity-framework/ef6/modeling/designer/table-splitting.md +++ b/entity-framework/ef6/modeling/designer/table-splitting.md @@ -1,7 +1,7 @@ --- title: Designer Table Splitting - EF6 description: Designer Table Splitting in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/table-splitting --- diff --git a/entity-framework/ef6/modeling/designer/workflows/database-first.md b/entity-framework/ef6/modeling/designer/workflows/database-first.md index 6e07ddd83f..1e80b05f07 100644 --- a/entity-framework/ef6/modeling/designer/workflows/database-first.md +++ b/entity-framework/ef6/modeling/designer/workflows/database-first.md @@ -1,7 +1,7 @@ --- title: Database First - EF6 description: Database First in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/workflows/database-first --- diff --git a/entity-framework/ef6/modeling/designer/workflows/model-first.md b/entity-framework/ef6/modeling/designer/workflows/model-first.md index b6c594f19e..009e4d379f 100644 --- a/entity-framework/ef6/modeling/designer/workflows/model-first.md +++ b/entity-framework/ef6/modeling/designer/workflows/model-first.md @@ -1,7 +1,7 @@ --- title: Model First - EF6 description: Model First in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/modeling/designer/workflows/model-first --- diff --git a/entity-framework/ef6/modeling/index.md b/entity-framework/ef6/modeling/index.md index 57eaa45f27..94b9f8d128 100644 --- a/entity-framework/ef6/modeling/index.md +++ b/entity-framework/ef6/modeling/index.md @@ -1,7 +1,7 @@ --- title: Creating a Model - EF6 description: Creating a Model in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 07/05/2018 uid: ef6/modeling/index --- diff --git a/entity-framework/ef6/querying/index.md b/entity-framework/ef6/querying/index.md index ca8c12e6c4..e7149479bc 100644 --- a/entity-framework/ef6/querying/index.md +++ b/entity-framework/ef6/querying/index.md @@ -1,7 +1,7 @@ --- title: Querying and Finding Entities - EF6 description: Querying and Finding Entities in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/querying/index --- diff --git a/entity-framework/ef6/querying/load-method.md b/entity-framework/ef6/querying/load-method.md index 98fd495b19..2dcf7e5ae5 100644 --- a/entity-framework/ef6/querying/load-method.md +++ b/entity-framework/ef6/querying/load-method.md @@ -1,7 +1,7 @@ --- title: The Load Method - EF6 description: The Load Method in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/querying/load-method --- diff --git a/entity-framework/ef6/querying/local-data.md b/entity-framework/ef6/querying/local-data.md index 0d65448752..6f9cfb8c6e 100644 --- a/entity-framework/ef6/querying/local-data.md +++ b/entity-framework/ef6/querying/local-data.md @@ -1,7 +1,7 @@ --- title: Local Data - EF6 description: Local Data in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/querying/local-data --- diff --git a/entity-framework/ef6/querying/no-tracking.md b/entity-framework/ef6/querying/no-tracking.md index 6ff6855738..81e9f707af 100644 --- a/entity-framework/ef6/querying/no-tracking.md +++ b/entity-framework/ef6/querying/no-tracking.md @@ -1,7 +1,7 @@ --- title: No-Tracking Queries - EF6 description: No-Tracking Queries in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/querying/no-tracking --- diff --git a/entity-framework/ef6/querying/raw-sql.md b/entity-framework/ef6/querying/raw-sql.md index 4d87c1857a..f7e54a6890 100644 --- a/entity-framework/ef6/querying/raw-sql.md +++ b/entity-framework/ef6/querying/raw-sql.md @@ -1,7 +1,7 @@ --- title: Raw SQL Queries - EF6 description: Raw SQL Queries in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/querying/raw-sql --- diff --git a/entity-framework/ef6/querying/related-data.md b/entity-framework/ef6/querying/related-data.md index d4025ac5f4..fbed6a59b3 100644 --- a/entity-framework/ef6/querying/related-data.md +++ b/entity-framework/ef6/querying/related-data.md @@ -1,7 +1,7 @@ --- title: Loading Related Entities - EF6 description: Loading Related Entities in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/querying/related-data --- diff --git a/entity-framework/ef6/resources/blogs.md b/entity-framework/ef6/resources/blogs.md index 7cd07039e5..1e9d4ccb6f 100644 --- a/entity-framework/ef6/resources/blogs.md +++ b/entity-framework/ef6/resources/blogs.md @@ -1,7 +1,7 @@ --- title: Entity Framework Blogs - EF6 description: Entity Framework 6 Blogs -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework Blogs diff --git a/entity-framework/ef6/resources/case-studies.md b/entity-framework/ef6/resources/case-studies.md index eb5d93389b..3efe63008b 100644 --- a/entity-framework/ef6/resources/case-studies.md +++ b/entity-framework/ef6/resources/case-studies.md @@ -1,7 +1,7 @@ --- title: Case Studies for Entity Framework - EF6 description: Case Studies for Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Microsoft Case Studies for Entity Framework diff --git a/entity-framework/ef6/resources/contribute.md b/entity-framework/ef6/resources/contribute.md index 3da283d193..69e00b81e6 100644 --- a/entity-framework/ef6/resources/contribute.md +++ b/entity-framework/ef6/resources/contribute.md @@ -1,7 +1,7 @@ --- title: Contribute to Entity Framework - EF6 description: Contribute to Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 07/05/2018 --- # Contribute to Entity Framework 6 diff --git a/entity-framework/ef6/resources/get-help.md b/entity-framework/ef6/resources/get-help.md index c3ba924db1..bb1ad923c9 100644 --- a/entity-framework/ef6/resources/get-help.md +++ b/entity-framework/ef6/resources/get-help.md @@ -1,7 +1,7 @@ --- title: Get Help Using Entity Framework - EF6 description: Get Help Using Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/resources/get-help --- diff --git a/entity-framework/ef6/resources/glossary.md b/entity-framework/ef6/resources/glossary.md index f7c1a1a0e4..b325dad886 100644 --- a/entity-framework/ef6/resources/glossary.md +++ b/entity-framework/ef6/resources/glossary.md @@ -1,7 +1,7 @@ --- title: Entity Framework Glossary - EF6 description: Entity Framework 6 Glossary -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/resources/glossary --- diff --git a/entity-framework/ef6/resources/licenses/ef5/chs.md b/entity-framework/ef6/resources/licenses/ef5/chs.md index e15730e490..8cf15c4f0a 100644 --- a/entity-framework/ef6/resources/licenses/ef5/chs.md +++ b/entity-framework/ef6/resources/licenses/ef5/chs.md @@ -1,7 +1,7 @@ --- title: Entity Framework 5 License (CHS) - EF6 description: Entity Framework 5 License (CHS) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 5 License (CHS) @@ -43,4 +43,4 @@ c. **分发限制。您不可以** - 以源代码形式披露或分发代码;或 - 其他人有权对其进行修改。 -2. **对补充程序的支持服务。**Microsoft 为 https://www.support.microsoft.com/common/international.aspx 中指明的本软件提供支持服务。 +2. **对补充程序的支持服务。**Microsoft 为 https://support.microsoft.com/ 中指明的本软件提供支持服务。 diff --git a/entity-framework/ef6/resources/licenses/ef5/cht.md b/entity-framework/ef6/resources/licenses/ef5/cht.md index 61a04baa5a..0e14fc34ed 100644 --- a/entity-framework/ef6/resources/licenses/ef5/cht.md +++ b/entity-framework/ef6/resources/licenses/ef5/cht.md @@ -1,7 +1,7 @@ --- title: Entity Framework 5 License (CHT) - EF6 description: Entity Framework 5 License (CHT) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 5 License (CHT) @@ -43,4 +43,4 @@ Microsoft 公司(或其關係企業,視 貴用戶所居住的地點而定 - 程式碼必須以原始碼形式揭露或散布,或 - 他人有修改的權利。 -**2. 增補程式支援服務。**Microsoft 為軟體提供支援服務之相關說明,請參閱 https://www.support.microsoft.com/common/international.aspx 。 +**2. 增補程式支援服務。**Microsoft 為軟體提供支援服務之相關說明,請參閱 https://support.microsoft.com/ 。 diff --git a/entity-framework/ef6/resources/licenses/ef5/deu.md b/entity-framework/ef6/resources/licenses/ef5/deu.md index 52d0d28942..53b6fcbc1e 100644 --- a/entity-framework/ef6/resources/licenses/ef5/deu.md +++ b/entity-framework/ef6/resources/licenses/ef5/deu.md @@ -1,7 +1,7 @@ --- title: Entity Framework 5 License (DEU) - EF6 description: Entity Framework 5 License (DEU) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 5 License (DEU) @@ -43,4 +43,4 @@ In den folgenden Lizenzbestimmungen werden zusätzliche Nutzungsbedingungen für - der Code in Quellcodeform offen gelegt oder vertrieben wird - andere das Recht haben, ihn zu ändern. -**2. SUPPORTLEISTUNGEN FÜR SOFTWAREERGÄNZUNG.** Microsoft stellt Supportleistungen für diese Software bereit, die unter https://www.support.microsoft.com/common/international.aspx beschrieben werden. +**2. SUPPORTLEISTUNGEN FÜR SOFTWAREERGÄNZUNG.** Microsoft stellt Supportleistungen für diese Software bereit, die unter https://support.microsoft.com/ beschrieben werden. diff --git a/entity-framework/ef6/resources/licenses/ef5/enu.md b/entity-framework/ef6/resources/licenses/ef5/enu.md index c3bc5be86a..1c8aaf5ed7 100644 --- a/entity-framework/ef6/resources/licenses/ef5/enu.md +++ b/entity-framework/ef6/resources/licenses/ef5/enu.md @@ -1,7 +1,7 @@ --- title: Entity Framework 5 License - EF6 description: Entity Framework 5 License -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 5 License (ENU) @@ -43,4 +43,4 @@ The following license terms describe additional use terms for this supplement. T - the code be disclosed or distributed in source code form; or - others have the right to modify it. -**2. SUPPORT SERVICES FOR SUPPLEMENT.** Microsoft provides support services for this software as described at https://www.support.microsoft.com/common/international.aspx. +**2. SUPPORT SERVICES FOR SUPPLEMENT.** Microsoft provides support services for this software as described at https://support.microsoft.com/. diff --git a/entity-framework/ef6/resources/licenses/ef5/esn.md b/entity-framework/ef6/resources/licenses/ef5/esn.md index d8f5975f06..42f2aff788 100644 --- a/entity-framework/ef6/resources/licenses/ef5/esn.md +++ b/entity-framework/ef6/resources/licenses/ef5/esn.md @@ -1,7 +1,7 @@ --- title: Entity Framework 5 License (ESN) - EF6 description: Entity Framework 5 License (ESN) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 5 License (ESN) @@ -43,4 +43,4 @@ Los siguientes términos de licencia describen términos de uso adicionales para - el código sea divulgado o distribuido en forma de código fuente, o que - otros tengan derecho a modificarlo. -**2. SERVICIOS DE SOPORTE TÉCNICO PARA SUPLEMENTOS.** Microsoft presta servicios de soporte técnico para este software, tal y como se describe en https://www.support.microsoft.com/common/international.aspx. +**2. SERVICIOS DE SOPORTE TÉCNICO PARA SUPLEMENTOS.** Microsoft presta servicios de soporte técnico para este software, tal y como se describe en https://support.microsoft.com/. diff --git a/entity-framework/ef6/resources/licenses/ef5/fra.md b/entity-framework/ef6/resources/licenses/ef5/fra.md index 6942d76d79..2653e2ed2a 100644 --- a/entity-framework/ef6/resources/licenses/ef5/fra.md +++ b/entity-framework/ef6/resources/licenses/ef5/fra.md @@ -1,7 +1,7 @@ --- title: Entity Framework 5 License (FRA) - EF6 description: Entity Framework 5 License (FRA) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 5 License (FRA) @@ -43,4 +43,4 @@ Les conditions de licence suivantes décrivent les conditions d'utilisation supp - le code soit dévoilé ou distribué dans sa forme de code source, ou - d'autres aient le droit de le modifier. -**2. SERVICES D'ASSISTANCE TECHNIQUE POUR LE SUPPLÉMENT.** Microsoft fournit des services d'assistance technique pour ce logiciel disponibles sur le site https://www.support.microsoft.com/common/international.aspx. +**2. SERVICES D'ASSISTANCE TECHNIQUE POUR LE SUPPLÉMENT.** Microsoft fournit des services d'assistance technique pour ce logiciel disponibles sur le site https://support.microsoft.com/. diff --git a/entity-framework/ef6/resources/licenses/ef5/ita.md b/entity-framework/ef6/resources/licenses/ef5/ita.md index c69bca5c4d..b6221349f9 100644 --- a/entity-framework/ef6/resources/licenses/ef5/ita.md +++ b/entity-framework/ef6/resources/licenses/ef5/ita.md @@ -1,7 +1,7 @@ --- title: Entity Framework 5 License (ITA) - EF6 description: Entity Framework 5 License (ITA) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 5 License (ITA) @@ -43,4 +43,4 @@ Nelle condizioni di licenza che seguono sono descritte condizioni di utilizzo ag - il codice sia divulgato o distribuito nel formato in codice sorgente; - altri abbiano il diritto di modificarlo. -**2. SERVIZI DI SUPPORTO TECNICO PER IL SUPPLEMENTO.** Microsoft fornisce servizi di supporto tecnico per questo software come descritto all'indirizzo https://www.support.microsoft.com/common/international.aspx. +**2. SERVIZI DI SUPPORTO TECNICO PER IL SUPPLEMENTO.** Microsoft fornisce servizi di supporto tecnico per questo software come descritto all'indirizzo https://support.microsoft.com/. diff --git a/entity-framework/ef6/resources/licenses/ef5/jpn.md b/entity-framework/ef6/resources/licenses/ef5/jpn.md index 403380f780..982d6c5505 100644 --- a/entity-framework/ef6/resources/licenses/ef5/jpn.md +++ b/entity-framework/ef6/resources/licenses/ef5/jpn.md @@ -1,7 +1,7 @@ --- title: Entity Framework 5 License (JPN) - EF6 description: Entity Framework 5 License (JPN) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 5 License (JPN) @@ -43,4 +43,4 @@ Microsoft Corporation (以下「マイクロソフト」といいます) は、 - コードをソース コード形式で公表または頒布すること - 他者が改変を行う権利を有すること -**2. 本追加ソフトウェアのサポート サービス** マイクロソフトは、本ソフトウェアに対し https://www.support.microsoft.com/common/international.aspx で説明されるサポート サービスを提供します。 +**2. 本追加ソフトウェアのサポート サービス** マイクロソフトは、本ソフトウェアに対し https://support.microsoft.com/ で説明されるサポート サービスを提供します。 diff --git a/entity-framework/ef6/resources/licenses/ef5/kor.md b/entity-framework/ef6/resources/licenses/ef5/kor.md index 7d766cc556..843e7400d7 100644 --- a/entity-framework/ef6/resources/licenses/ef5/kor.md +++ b/entity-framework/ef6/resources/licenses/ef5/kor.md @@ -1,7 +1,7 @@ --- title: Entity Framework 5 License (KOR) - EF6 description: Entity Framework 5 License (KOR) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 5 License (KOR) @@ -43,4 +43,4 @@ Microsoft Corporation(또는 거주 지역에 따라 계열사 중 하나)은 - 코드를 소스 코드 형태로 공개하거나 배포합니다. - 다른 사람이 배포 가능 코드를 수정할 수 있는 권한을 갖습니다. -**2. 추가 구성 요소에 대한 지원 서비스.** Microsoft는 https://www.support.microsoft.com/common/international.aspx 에 기술된 대로 본 소프트웨어에 대한 지원 서비스를 제공합니다. +**2. 추가 구성 요소에 대한 지원 서비스.** Microsoft는 https://support.microsoft.com/ 에 기술된 대로 본 소프트웨어에 대한 지원 서비스를 제공합니다. diff --git a/entity-framework/ef6/resources/licenses/ef5/rus.md b/entity-framework/ef6/resources/licenses/ef5/rus.md index 5e224c2eeb..a6fc8dfde6 100644 --- a/entity-framework/ef6/resources/licenses/ef5/rus.md +++ b/entity-framework/ef6/resources/licenses/ef5/rus.md @@ -1,7 +1,7 @@ --- title: Entity Framework 5 License (RUS) - EF6 description: Entity Framework 5 License (RUS) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 5 License (RUS) @@ -43,4 +43,4 @@ ms.date: 10/23/2016 - код раскрывается и распространяется в виде исходного кода; - другие имеют право его модифицировать. -**2. ТЕХНИЧЕСКАЯ ПОДДЕРЖКА ДОПОЛНЕНИЯ.** Корпорация Майкрософт предоставляет техническую поддержку дополнения, как указано на веб-узле https://www.support.microsoft.com/common/international.aspx. +**2. ТЕХНИЧЕСКАЯ ПОДДЕРЖКА ДОПОЛНЕНИЯ.** Корпорация Майкрософт предоставляет техническую поддержку дополнения, как указано на веб-узле https://support.microsoft.com/. diff --git a/entity-framework/ef6/resources/licenses/ef6/chs.md b/entity-framework/ef6/resources/licenses/ef6/chs.md index 9b909095b0..270ac98d00 100644 --- a/entity-framework/ef6/resources/licenses/ef6/chs.md +++ b/entity-framework/ef6/resources/licenses/ef6/chs.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime License (CHS) - EF6 description: Entity Framework 6 Runtime License (CHS) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime License (CHS) diff --git a/entity-framework/ef6/resources/licenses/ef6/cht.md b/entity-framework/ef6/resources/licenses/ef6/cht.md index 65c96d1733..49bbd55788 100644 --- a/entity-framework/ef6/resources/licenses/ef6/cht.md +++ b/entity-framework/ef6/resources/licenses/ef6/cht.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime License (CHT) - EF6 description: Entity Framework 6 Runtime License (CHT) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime License (CHT) diff --git a/entity-framework/ef6/resources/licenses/ef6/deu.md b/entity-framework/ef6/resources/licenses/ef6/deu.md index 940b0ca7f6..6c84673a54 100644 --- a/entity-framework/ef6/resources/licenses/ef6/deu.md +++ b/entity-framework/ef6/resources/licenses/ef6/deu.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime License (DEU) - EF6 description: Entity Framework 6 Runtime License (DEU) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime License (DEU) diff --git a/entity-framework/ef6/resources/licenses/ef6/enu.md b/entity-framework/ef6/resources/licenses/ef6/enu.md index 86fa1eba34..e0d1ebca96 100644 --- a/entity-framework/ef6/resources/licenses/ef6/enu.md +++ b/entity-framework/ef6/resources/licenses/ef6/enu.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime License - EF6 description: Entity Framework 6 Runtime License -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime License (ENU) diff --git a/entity-framework/ef6/resources/licenses/ef6/esn.md b/entity-framework/ef6/resources/licenses/ef6/esn.md index 9f7d89e679..0ba55fddfc 100644 --- a/entity-framework/ef6/resources/licenses/ef6/esn.md +++ b/entity-framework/ef6/resources/licenses/ef6/esn.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime License (ESN) - EF6 description: Entity Framework 6 Runtime License (ESN) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime License (ESN) diff --git a/entity-framework/ef6/resources/licenses/ef6/fra.md b/entity-framework/ef6/resources/licenses/ef6/fra.md index 6b0d20449d..f162db8612 100644 --- a/entity-framework/ef6/resources/licenses/ef6/fra.md +++ b/entity-framework/ef6/resources/licenses/ef6/fra.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime License (FRA) - EF6 description: Entity Framework 6 Runtime License (FRA) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime License (FRA) diff --git a/entity-framework/ef6/resources/licenses/ef6/ita.md b/entity-framework/ef6/resources/licenses/ef6/ita.md index c0eb5595a2..617cf044c3 100644 --- a/entity-framework/ef6/resources/licenses/ef6/ita.md +++ b/entity-framework/ef6/resources/licenses/ef6/ita.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime License (ITA) - EF6 description: Entity Framework 6 Runtime License (ITA) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime License (ITA) diff --git a/entity-framework/ef6/resources/licenses/ef6/jpn.md b/entity-framework/ef6/resources/licenses/ef6/jpn.md index e1396e94ed..45708651d8 100644 --- a/entity-framework/ef6/resources/licenses/ef6/jpn.md +++ b/entity-framework/ef6/resources/licenses/ef6/jpn.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime License (JPN) - EF6 description: Entity Framework 6 Runtime License (JPN) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime License (JPN) diff --git a/entity-framework/ef6/resources/licenses/ef6/kor.md b/entity-framework/ef6/resources/licenses/ef6/kor.md index d0b62022df..0163b43245 100644 --- a/entity-framework/ef6/resources/licenses/ef6/kor.md +++ b/entity-framework/ef6/resources/licenses/ef6/kor.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime License (KOR) - EF6 description: Entity Framework 6 Runtime License (KOR) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime License (KOR) diff --git a/entity-framework/ef6/resources/licenses/ef6/prerelease/alpha.md b/entity-framework/ef6/resources/licenses/ef6/prerelease/alpha.md index 181e7f1809..5892416695 100644 --- a/entity-framework/ef6/resources/licenses/ef6/prerelease/alpha.md +++ b/entity-framework/ef6/resources/licenses/ef6/prerelease/alpha.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime Alpha License - EF6 description: Entity Framework 6 Runtime Alpha License -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime Alpha License (ENU) diff --git a/entity-framework/ef6/resources/licenses/ef6/prerelease/beta-rc.md b/entity-framework/ef6/resources/licenses/ef6/prerelease/beta-rc.md index 752b4d4b52..575a7e1674 100644 --- a/entity-framework/ef6/resources/licenses/ef6/prerelease/beta-rc.md +++ b/entity-framework/ef6/resources/licenses/ef6/prerelease/beta-rc.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime Beta/RC License - EF6 description: Entity Framework 6 Runtime Beta/RC License -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime Beta/RC License (ENU) diff --git a/entity-framework/ef6/resources/licenses/ef6/rus.md b/entity-framework/ef6/resources/licenses/ef6/rus.md index cd5f40e5db..7b97f450eb 100644 --- a/entity-framework/ef6/resources/licenses/ef6/rus.md +++ b/entity-framework/ef6/resources/licenses/ef6/rus.md @@ -1,7 +1,7 @@ --- title: Entity Framework 6 Runtime License (RUS) - EF6 description: Entity Framework 6 Runtime License (RUS) -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework 6 Runtime License (RUS) diff --git a/entity-framework/ef6/resources/school-database.md b/entity-framework/ef6/resources/school-database.md index 5c293fe056..1730c3cbe6 100644 --- a/entity-framework/ef6/resources/school-database.md +++ b/entity-framework/ef6/resources/school-database.md @@ -1,7 +1,7 @@ --- title: School Sample Database - EF6 description: School Sample Database for Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/resources/school-database --- diff --git a/entity-framework/ef6/resources/tools.md b/entity-framework/ef6/resources/tools.md index 13e213a8c4..dc75375ee3 100644 --- a/entity-framework/ef6/resources/tools.md +++ b/entity-framework/ef6/resources/tools.md @@ -1,17 +1,18 @@ --- title: Tools & Extensions - EF6 description: Tools & Extensions in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Entity Framework Tools & Extensions + > [!IMPORTANT] > Extensions are built by a variety of sources and not maintained as part of Entity Framework. When considering a third party extension, be sure to evaluate quality, licensing, compatibility, support, etc. to ensure they meet your requirements. -Entity Framework has been a popular O/RM for many years. Here are some examples of free and paid tools and extensions developed for it: +Entity Framework has been a popular O/RM for many years. Here are some examples of free and paid tools and extensions developed for it: - [EF Power Tools Community Edition](https://marketplace.visualstudio.com/items?itemName=ErikEJ.EntityFramework6PowerToolsCommunityEdition) -- [EF Profiler](https://efprof.com) +- [EF Profiler](https://hibernatingrhinos.com/products/efprof) - [LINQPad](https://www.linqpad.net) - [LLBLGen Pro](https://www.llblgen.com) - [Huagati DBML/EDMX Tools](https://www.huagati.com/dbmltools) diff --git a/entity-framework/ef6/saving/change-tracking/auto-detect-changes.md b/entity-framework/ef6/saving/change-tracking/auto-detect-changes.md index 8b3600d6f0..a439c49b9a 100644 --- a/entity-framework/ef6/saving/change-tracking/auto-detect-changes.md +++ b/entity-framework/ef6/saving/change-tracking/auto-detect-changes.md @@ -1,7 +1,7 @@ --- title: Automatic detect changes - EF6 description: Automatic detect changes in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/saving/change-tracking/auto-detect-changes --- diff --git a/entity-framework/ef6/saving/change-tracking/entity-state.md b/entity-framework/ef6/saving/change-tracking/entity-state.md index dd12541f26..aed7343dd1 100644 --- a/entity-framework/ef6/saving/change-tracking/entity-state.md +++ b/entity-framework/ef6/saving/change-tracking/entity-state.md @@ -1,7 +1,7 @@ --- title: Working with entity states - EF6 description: Working with entity states in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/saving/change-tracking/entity-state --- diff --git a/entity-framework/ef6/saving/change-tracking/property-values.md b/entity-framework/ef6/saving/change-tracking/property-values.md index b84738f5e4..b1ad9c7ff7 100644 --- a/entity-framework/ef6/saving/change-tracking/property-values.md +++ b/entity-framework/ef6/saving/change-tracking/property-values.md @@ -1,7 +1,7 @@ --- title: Working with property values - EF6 description: Working with property values in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/saving/change-tracking/property-values --- diff --git a/entity-framework/ef6/saving/concurrency.md b/entity-framework/ef6/saving/concurrency.md index b77e63f8f0..93aa565f51 100644 --- a/entity-framework/ef6/saving/concurrency.md +++ b/entity-framework/ef6/saving/concurrency.md @@ -1,7 +1,7 @@ --- title: Handling Concurrency Conflicts - EF6 description: Handling Concurrency Conflicts in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/saving/concurrency --- diff --git a/entity-framework/ef6/saving/index.md b/entity-framework/ef6/saving/index.md index c5afa85041..c0224e5a4d 100644 --- a/entity-framework/ef6/saving/index.md +++ b/entity-framework/ef6/saving/index.md @@ -1,7 +1,7 @@ --- title: Saving Data - EF6 description: Saving Data in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 07/05/2018 --- diff --git a/entity-framework/ef6/saving/transactions.md b/entity-framework/ef6/saving/transactions.md index 9add9ed397..b786185b29 100644 --- a/entity-framework/ef6/saving/transactions.md +++ b/entity-framework/ef6/saving/transactions.md @@ -1,7 +1,7 @@ --- title: Working with Transactions - EF6 description: Working with Transactions in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/saving/transactions --- diff --git a/entity-framework/ef6/saving/validation.md b/entity-framework/ef6/saving/validation.md index 837422e462..2d13759e31 100644 --- a/entity-framework/ef6/saving/validation.md +++ b/entity-framework/ef6/saving/validation.md @@ -1,7 +1,7 @@ --- title: Validation - EF6 description: Validation in Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 --- # Data Validation diff --git a/entity-framework/ef6/what-is-new/index.md b/entity-framework/ef6/what-is-new/index.md index b8fab6af32..2f8ce7a64c 100644 --- a/entity-framework/ef6/what-is-new/index.md +++ b/entity-framework/ef6/what-is-new/index.md @@ -1,8 +1,8 @@ --- title: What's new - EF6 description: What's new in Entity Framework 6 -author: ajcvickers -ms.date: 09/12/2019 +author: SamMonoRT +ms.date: 05/17/2024 uid: ef6/what-is-new/index --- # What's new in EF6 @@ -11,9 +11,17 @@ We highly recommend that you use the latest released version of Entity Framework However, we realize that you may need to use a previous version, or that you may want to experiment with new improvements in the latest pre-release. To install specific versions of EF, see [Get Entity Framework](xref:ef6/fundamentals/install). +## EF 6.5.0 + +The EF 6.5.0 runtime was released to NuGet in June 2024. The primary goal of EF 6.5 is to include a new SQL Server / Azure SQL Database provider. See [list of important fixes](https://github.com/dotnet/ef6/milestone/17?closed=1) on Github. Here are some of the more notable ones: + +- New SQL Server / Azure SQL Database provider (contributed by the community) - [Microsoft.EntityFramework.SqlServer](https://www.nuget.org/packages/Microsoft.EntityFramework.SqlServer/). This new provider uses the modern SQL Server client [Microsoft.Data.SqlClient](https://www.nuget.org/packages/Microsoft.Data.SqlClient). For more information about configuration of this provider, see [Microsoft.EntityFramework.SqlServer Guide](xref:ef6/what-is-new/microsoft-ef6-sqlserver). +- The `ef6` utility was updated to only support .NET 6 and newer. It was also updated to support reading from app.config files, and support Windows ARM64. +- The System.Data.SqlClient driver was updated to version 4.8.6. + ## EF 6.4.0 -The EF 6.4.0 runtime was released to NuGet in December 2019. The primary goal of EF 6.4 is to polish the features and scenarios that was delivered in EF 6.3. See [list of important fixes](https://github.com/dotnet/ef6/milestone/14?closed=1) on Github. +The EF 6.4.0 runtime was released to NuGet in December 2019. The primary goal of EF 6.4 is to polish the features and scenarios that was delivered in EF 6.3. See [list of important fixes](https://github.com/dotnet/ef6/milestone/14?closed=1) on Github. ## EF 6.3.0 @@ -29,7 +37,7 @@ The EF 6.3.0 runtime was released to NuGet in September 2019. The main goal of t ### EF designer support -There's currently no support for using the EF designer directly on .NET Core or .NET Standard projects or on an SDK-style .NET Framework project. +There's currently no support for using the EF designer directly on .NET or .NET Standard projects or on an SDK-style .NET Framework project. You can work around this limitation by adding the EDMX file and the generated classes for the entities and the DbContext as linked files to a .NET Core 3.0 or .NET Standard 2.1 project in the same solution. @@ -44,7 +52,7 @@ The linked files will look like this in the project file: ``` -Note that the EDMX file is linked with the EntityDeploy build action. This is a special MSBuild task (now included in the EF 6.3 package) that takes care of adding the EF model into the target assembly as embedded resources (or copying it as files in the output folder, depending on the Metadata Artifact Processing setting in the EDMX). For more details on how to get this set up, see our [EDMX .NET Core sample](https://aka.ms/EdmxDotNetCoreSample). +Note that the EDMX file is linked with the EntityDeploy build action. This is a special MSBuild task (now included in the EF 6.3 package) that takes care of adding the EF model into the target assembly as embedded resources (or copying it as files in the output folder, depending on the Metadata Artifact Processing setting in the EDMX). For more details on how to get this set up, see our [EDMX .NET sample](https://aka.ms/EdmxDotNetCoreSample). Warning: make sure the old style (i.e. non-SDK-style) .NET Framework project defining the "real" .edmx file comes _before_ the project defining the link inside the .sln file. Otherwise, when you open the .edmx file in the designer, you see the error message "The Entity Framework is not available in the target framework currently specified for the project. You can change the target framework of the project or edit the model in the XmlEditor". diff --git a/entity-framework/ef6/what-is-new/microsoft-ef6-sqlserver.md b/entity-framework/ef6/what-is-new/microsoft-ef6-sqlserver.md new file mode 100644 index 0000000000..7c2127b41f --- /dev/null +++ b/entity-framework/ef6/what-is-new/microsoft-ef6-sqlserver.md @@ -0,0 +1,164 @@ +--- +title: Entity Framework 6 SQL Server provider based on Microsoft.Data.SqlClient +description: Microsoft.EntityFramework.SqlServer guide +author: SamMonoRT +ms.date: 06/11/2024 +uid: ef6/what-is-new/microsoft-ef6-sqlserver +--- + +# Entity Framework 6 SQL Server provider based on Microsoft.Data.SqlClient + +This Entity Framework 6 provider is a replacement provider for the built-in SQL Server provider. + +This provider depends on the modern [Microsoft.Data.SqlClient](https://github.com/dotnet/SqlClient) ADO.NET provider, which includes the following advantages over the currently used driver: + +- Current client receiving full support in contrast to `System.Data.SqlClient`, which is in maintenance mode +- Supports new SQL Server features, including support for the SQL Server 2022 enhanced client protocol (TDS8) +- Supports most Azure Active Directory authentication methods +- Supports Always Encrypted with .NET + +Notice that this provider is a runtime only update and will not work with the existing Visual Studio tooling. + +The latest build of this package is available from [NuGet](https://www.nuget.org/packages/Microsoft.EntityFramework.SqlServer) + +## Configuration + +There are various ways to configure Entity Framework to use this provider. + +You can register the provider in code using an attribute: + +````csharp +[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] +public class SchoolContext : DbContext +{ + public SchoolContext() : base() + { + } + + public DbSet Students { get; set; } +} +```` + +If you have multiple classes inheriting from DbContext in your solution, add the DbConfigurationType attribute to all of them. + +Or you can use the SetConfiguration method before any data access calls: + +````csharp + DbConfiguration.SetConfiguration(new MicrosoftSqlDbConfiguration()); +```` + +Or add the following lines to your existing derived DbConfiguration class: + +````csharp +SetProviderFactory(MicrosoftSqlProviderServices.ProviderInvariantName, Microsoft.Data.SqlClient.SqlClientFactory.Instance); +SetProviderServices(MicrosoftSqlProviderServices.ProviderInvariantName, MicrosoftSqlProviderServices.Instance); +// Optional +SetExecutionStrategy(MicrosoftSqlProviderServices.ProviderInvariantName, () => new MicrosoftSqlAzureExecutionStrategy()); +```` + +You can also use App.Config based configuration: + +````xml + + + +
+ + + + + + + + + + + + +```` + +If you use App.Config with a .NET 6 or later app, you must remove the `` section above and register the DbProviderFactory in code once: + +````csharp +DbProviderFactories.RegisterFactory(MicrosoftSqlProviderServices.ProviderInvariantName, Microsoft.Data.SqlClient.SqlClientFactory.Instance); +```` + +## EDMX usage + +If you use an EDMX file, update the `Provider` name: + +````xml + + + + +```` + +> In order to use the EDMX file with the Visual Studio designer, you must switch the provider name back to `System.Data.SqlClient` + +Also update the provider name inside the EntityConnection connection string - `provider=Microsoft.Data.SqlClient` + +````xml + +```` + +## Code changes + +To use the provider in an existing solution, a few code changes are required (as needed). + +`using System.Data.SqlClient;` => `using Microsoft.Data.SqlClient;` + +`using Microsoft.SqlServer.Server;` => `using Microsoft.Data.SqlClient.Server;` + +The following classes have been renamed to avoid conflicts with classes that uses `System.Data.SqlClient` in the existing SQL Server provider: + +`SqlAzureExecutionStrategy` => `MicrosoftSqlAzureExecutionStrategy` + +`SqlDbConfiguration` => `MicrosoftSqlDbConfiguration` + +`SqlProviderServices` => `MicrosoftSqlProviderServices` + +`SqlServerMigrationSqlGenerator` => `MicrosoftSqlServerMigrationSqlGenerator` + +`SqlSpatialServices` => `MicrosoftSqlSpatialServices` + +`SqlConnectionFactory` => `MicrosoftSqlConnectionFactory` + +`LocalDbConnectionFactory` => `MicrosoftLocalDbConnectionFactory` + +## Known issues + +**Azure App Service with .NET Framework and connection strings configuration** + +If you use Azure App Service with .NET Framework and the [connection strings configuration feature](/azure/app-service/configure-common?tabs=portal#configure-connection-strings), you can encounter runtime issues, as the `ProviderName` connection string setting in this scenario is hardcoded to `System.Data.SqlClient`. + +Solution is to use a derived MicrosoftSqlDbConfiguration class like this: + +```csharp +public class AppServiceConfiguration : MicrosoftSqlDbConfiguration +{ + public AppServiceConfiguration() + { + SetProviderFactory("System.Data.SqlClient", Microsoft.Data.SqlClient.SqlClientFactory.Instance); + SetProviderServices("System.Data.SqlClient", MicrosoftSqlProviderServices.Instance); + SetExecutionStrategy("System.Data.SqlClient", () => new MicrosoftSqlAzureExecutionStrategy()); + } +} +``` + +Then use this derived class in the code-based configuration described above. + +**EntityFramework.dll installed in GAC** + +If an older version of EntityFramework.dll is installed in the .NET Framework GAC (Global Assembly Cache), you might get this error: + +`The 'PrimitiveTypeKind' attribute is invalid - The value 'HierarchyId' is invalid according to its datatype` + +Solution is to remove the .dll from the GAC. EF6 assemblies should never be installed in the GAC. diff --git a/entity-framework/ef6/what-is-new/past-releases.md b/entity-framework/ef6/what-is-new/past-releases.md index 983e20c440..fc52492e0d 100644 --- a/entity-framework/ef6/what-is-new/past-releases.md +++ b/entity-framework/ef6/what-is-new/past-releases.md @@ -1,7 +1,7 @@ --- title: Past Releases of Entity Framework - EF6 description: Past Releases of Entity Framework -author: ajcvickers +author: SamMonoRT ms.date: 09/12/2019 uid: ef6/what-is-new/past-releases --- @@ -228,7 +228,7 @@ Here is a list of content we put together specifically for the EF 4.3 release, m ## EF 4.2 The EF 4.2.0 runtime was released to NuGet in November of 2011. This release includes bug fixes to the EF 4.1.1 release. -Because this release only included bug fixes it could have been the EF 4.1.2 patch release but we opted to move to 4.2 to allow us to move away from the date based patch version numbers we used in the 4.1.x releases and adopt the [Semantic Versionsing](https://semver.org) standard for semantic versioning. +Because this release only included bug fixes it could have been the EF 4.1.2 patch release but we opted to move to 4.2 to allow us to move away from the date based patch version numbers we used in the 4.1.x releases and adopt the [Semantic Versioning](https://semver.org) standard for semantic versioning. Here is a list of content we put together specifically for the EF 4.2 release, the content provided for EF 4.1 still applies to EF 4.2 as well: diff --git a/entity-framework/ef6/what-is-new/upgrading-to-ef6.md b/entity-framework/ef6/what-is-new/upgrading-to-ef6.md index ae2b8a220b..6a185fb6ae 100644 --- a/entity-framework/ef6/what-is-new/upgrading-to-ef6.md +++ b/entity-framework/ef6/what-is-new/upgrading-to-ef6.md @@ -1,7 +1,7 @@ --- title: Upgrading to Entity Framework 6 - EF6 description: Upgrading to Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 10/23/2016 uid: ef6/what-is-new/upgrading-to-ef6 --- diff --git a/entity-framework/ef6/what-is-new/visual-studio.md b/entity-framework/ef6/what-is-new/visual-studio.md index bbcdd63b6d..d5fcf98c61 100644 --- a/entity-framework/ef6/what-is-new/visual-studio.md +++ b/entity-framework/ef6/what-is-new/visual-studio.md @@ -1,7 +1,7 @@ --- title: Visual Studio Releases - EF6 description: Visual Studio Releases and Entity Framework 6 -author: ajcvickers +author: SamMonoRT ms.date: 07/05/2018 uid: ef6/what-is-new/visual-studio --- diff --git a/entity-framework/efcore-and-ef6/index.md b/entity-framework/efcore-and-ef6/index.md index ce49b42646..f0e16d8ea0 100644 --- a/entity-framework/efcore-and-ef6/index.md +++ b/entity-framework/efcore-and-ef6/index.md @@ -1,7 +1,7 @@ --- title: Compare EF6 and EF Core description: Guidance on how to choose between EF6 and EF Core. -author: ajcvickers +author: SamMonoRT ms.date: 01/23/2019 uid: efcore-and-ef6/index --- diff --git a/entity-framework/efcore-and-ef6/porting/index.md b/entity-framework/efcore-and-ef6/porting/index.md index 303b97f09a..434766a0f9 100644 --- a/entity-framework/efcore-and-ef6/porting/index.md +++ b/entity-framework/efcore-and-ef6/porting/index.md @@ -13,8 +13,9 @@ Entity Framework Core, or EF Core for short, is a total rewrite of Entity Framew > [!IMPORTANT] > Before you start the porting process it is important to validate that EF Core meets the data access requirements for your application. You can find everything you need in the [EF Core documentation](xref:core/index). -> [!IMPORTANT] -> There is a known issue ([microsoft/dotnet-apiport #993](https://github.com/microsoft/dotnet-apiport/issues/993)) with the [portability analyzer](/dotnet/standard/analyzers/portability-analyzer) that erroneously reports EF Core as incompatible with .NET 5 and .NET 6. These warnings can be safely ignored as EF Core is 100% compatible with .NET 5 and .NET 6 target frameworks. +> [!WARNING] +> EF Core only supports modern .NET, and does not support .NET Framework. +> As such, if your project is still targeting .NET Framework, you will have to migrate to modern .NET before you can start your migration from EF6 to EF Core. Note that EF6 supports modern .NET, so you can migrate to modern .NET first while keeping EF6, and then tackle the migration from EF6 to EF Core. ## Reasons to upgrade diff --git a/entity-framework/efcore-and-ef6/porting/port-behavior.md b/entity-framework/efcore-and-ef6/porting/port-behavior.md index f2637f6e97..a83d7aeecd 100644 --- a/entity-framework/efcore-and-ef6/porting/port-behavior.md +++ b/entity-framework/efcore-and-ef6/porting/port-behavior.md @@ -1,7 +1,7 @@ --- title: Porting from EF6 to EF Core - Behavior changes description: A non-exhaustive list of some changes in behavior between EF6 and EF Core. -author: ajcvickers +author: SamMonoRT ms.date: 12/09/2021 uid: efcore-and-ef6/porting/port-behavior --- diff --git a/entity-framework/efcore-and-ef6/porting/port-code.md b/entity-framework/efcore-and-ef6/porting/port-code.md index 168f9d994f..3be52b547c 100644 --- a/entity-framework/efcore-and-ef6/porting/port-code.md +++ b/entity-framework/efcore-and-ef6/porting/port-code.md @@ -1,7 +1,7 @@ --- title: Porting from EF6 to EF Core - Porting a Code-Based Model - EF description: Specific information on porting an Entity Framework 6 code-based model application to Entity Framework Core -author: ajcvickers +author: SamMonoRT ms.date: 12/09/2021 uid: efcore-and-ef6/porting/port-code --- @@ -25,7 +25,7 @@ Most APIs that you use in EF6 are in the `System.Data.Entity` namespace (and rel As described in [configuring the database connection](xref:efcore-and-ef6/porting/port-detailed-cases#configuring-the-database-connection), EF Core has less magic around detecting the database to connect to. You will need to override the `OnConfiguring` method on your derived context, and use the database provider specific API to setup the connection to the database. -Most EF6 applications store the connection string in the applications `App/Web.config` file. In EF Core, you read this connection string using the `ConfigurationManager` API. You may need to add a reference to the `System.Configuration` framework assembly to be able to use this API. +Most EF6 applications store the connection string in the applications `App/Web.config` file. In EF Core, you read this connection string using the `ConfigurationManager` API. You may need to add a reference to the `System.Configuration` framework assembly to be able to use this API: ```csharp public class BloggingContext : DbContext @@ -40,6 +40,9 @@ public class BloggingContext : DbContext } ``` +> Warning +> Never store passwords or other sensitive data in source code or configuration files. Production secrets shouldn't be used for development or test. Secrets shouldn't be deployed with the app. Production secrets should be accessed through a controlled means like Azure Key Vault. Azure test and production secrets can be stored and protected with the [Azure Key Vault configuration provider](/aspnet/core/security/key-vault-configuration). + ## Update your code At this point, it's a matter of addressing compilation errors and reviewing code to see if the behavior changes will impact you. diff --git a/entity-framework/efcore-and-ef6/porting/port-edmx.md b/entity-framework/efcore-and-ef6/porting/port-edmx.md index fd95d7aca8..efea705272 100644 --- a/entity-framework/efcore-and-ef6/porting/port-edmx.md +++ b/entity-framework/efcore-and-ef6/porting/port-edmx.md @@ -1,7 +1,7 @@ --- title: Porting from EF6 to EF Core - Porting an EDMX-Based Model - EF description: Specific information on porting an Entity Framework 6 EDMX-based model application to Entity Framework Core -author: ajcvickers +author: SamMonoRT ms.date: 12/09/2021 uid: efcore-and-ef6/porting/port-edmx --- diff --git a/entity-framework/efcore-and-ef6/side-by-side.md b/entity-framework/efcore-and-ef6/side-by-side.md index 07d7a18af7..6e0271f1cc 100644 --- a/entity-framework/efcore-and-ef6/side-by-side.md +++ b/entity-framework/efcore-and-ef6/side-by-side.md @@ -1,7 +1,7 @@ --- title: EF6 and EF Core - Using them in the Same Application description: Guidance on using both Entity Framework Core and Entity Framework 6 in the same application -author: ajcvickers +author: SamMonoRT ms.date: 01/23/2019 uid: efcore-and-ef6/side-by-side --- diff --git a/entity-framework/efcore-and-ef6/support.md b/entity-framework/efcore-and-ef6/support.md index d8cc2efd9e..a7e895f282 100644 --- a/entity-framework/efcore-and-ef6/support.md +++ b/entity-framework/efcore-and-ef6/support.md @@ -1,8 +1,8 @@ --- title: Entity Framework Support Policies description: Support policies for every evolution of Entity Framework -author: ajcvickers -ms.date: 02/16/2022 +author: SamMonoRT +ms.date: 05/22/2024 uid: efcore-and-ef6/support --- @@ -12,7 +12,7 @@ Entity Framework was first released in 2008 as part of the .NET Framework. Since - The first version of Entity Framework and Entity Framework 4 are fully contained in the .NET Framework - Entity Framework 4.1, 4.2, 4.3, and 5.0 have some code in the .NET Framework, and some code shipped as NuGet packages -- Entity Framework 6.0, 6.1, 6.2, 6.3, and 6.4 are shipped entirely as NuGet packages +- Entity Framework 6.0, 6.1, 6.2, 6.3, 6.4, and 6.5 are shipped entirely as NuGet packages - Entity Framework Core (all versions) is an entirely separate codebase and ships as NuGet packages Support policies for each of these variations is described in this document. In all cases, the support policy applies to the latest patch of the given versions. @@ -23,10 +23,10 @@ New versions of Entity Framework Core are shipped at the same time as new .NET v Entity Framework Core is the only actively developed version of Entity Framework and we recommend using it for all new code. -## Entity Framework 6.0, 6.1, 6.2, 6.3, and 6.4 +## Entity Framework 6.0, 6.1, 6.2, 6.3, 6.4, and 6.5 -Entity Framework 6.x follows the [Modern Lifecycle Policy](/lifecycle/policies/modern). This means that only the latest patch of the latest released version is supported. At this time the latest version is 6.4.4. This version can always [be found on NuGet](https://www.nuget.org/packages/EntityFramework/). -Versions 6.0, 6.1, 6.2, and 6.3 are no longer supported. +Entity Framework 6.x follows the [Modern Lifecycle Policy](/lifecycle/policies/modern). This means that only the latest patch of the latest released version is supported. At this time the latest version is 6.5. This version can always [be found on NuGet](https://www.nuget.org/packages/EntityFramework/). +Versions 6.0, 6.1, 6.2, 6.3, and 6.4 are no longer supported. Although Entity Framework 6.x is still supported, it is no longer being developed and will only receive fixes for security issues. The Entity Framework 6.x codebase is very stable, and it is a priority to preserve this stability by not making any unnecessary changes to the code. It is strongly encouraged that new applications and existing applications that are in active development [use Entity Framework Core](xref:efcore-and-ef6/index). diff --git a/entity-framework/index.yml b/entity-framework/index.yml index 620da5aba6..dceb7a7fe0 100644 --- a/entity-framework/index.yml +++ b/entity-framework/index.yml @@ -9,7 +9,6 @@ metadata: description: Entity Framework is a modern object-relation mapper that lets you build a clean, portable, and high-level data access layer with .NET (C#) across a variety of databases, including SQL Database (on-premises and Azure), SQLite, MySQL, PostgreSQL, and Azure Cosmos DB. It supports LINQ queries, change tracking, updates, and schema migrations. ms.topic: hub-page author: jcjiang - ms.author: jiacjian ms.date: 03/08/2023 # highlightedContent section (optional) @@ -63,8 +62,6 @@ additionalContent: text: "WPF .NET Core app accessing SQLite with EF Core" - url: core/get-started/winforms.md text: "Windows Forms .NET Core app accessing SQLite with EF Core" - - url: core/get-started/xamarin.md - text: "Xamarin mobile app accessing SQLite with EF Core" # Card - title: Supported databases links: @@ -78,6 +75,10 @@ additionalContent: text: "MySQL and MariaDB" - url: core/providers/cosmos/index.md text: "Azure Cosmos DB for NoSQL" + - url: https://www.mongodb.com/docs/entity-framework/current/ + text: "MongoDB" + - url: https://github.com/FirebirdSQL/NETProvider + text: "Firebird" - url: core/providers/in-memory/index.md text: "In memory (testing)" - url: core/providers/index.md @@ -97,8 +98,6 @@ additionalContent: text: "Windows Presentation Foundation (WPF)" - url: core/get-started/winforms.md text: "Windows Forms (WinForms)" - - url: core/get-started/xamarin.md - text: "Xamarin" # Card - title: Fundamentals links: diff --git a/entity-framework/toc.yml b/entity-framework/toc.yml index 5bade783fe..12b1bb3055 100644 --- a/entity-framework/toc.yml +++ b/entity-framework/toc.yml @@ -21,6 +21,8 @@ href: efcore-and-ef6/porting/port-database.md - name: Porting to a hybrid model href: efcore-and-ef6/porting/port-hybrid.md + - name: Behavior Changes between EF6 and EF Core + href: efcore-and-ef6/porting/port-behavior.md - name: Detailed cases to consider when Porting href: efcore-and-ef6/porting/port-detailed-cases.md - name: Use EF6 and EF Core in the same application @@ -30,12 +32,10 @@ items: - name: Welcome! href: core/index.md - - name: "What's new in EF Core 8.0" - href: core/what-is-new/ef-core-8.0/whatsnew.md - - name: "Breaking changes in EF Core 8.0" - href: core/what-is-new/ef-core-8.0/breaking-changes.md - - name: "The plan for EF Core 9.0" - href: core/what-is-new/ef-core-9.0/plan.md + - name: "What's new in EF Core 10.0" + href: core/what-is-new/ef-core-10.0/whatsnew.md + - name: "Breaking changes in EF Core 10.0" + href: core/what-is-new/ef-core-10.0/breaking-changes.md - name: Getting started items: - name: EF Core Overview @@ -55,57 +55,58 @@ href: core/get-started/wpf.md - name: Windows Forms tutorial href: core/get-started/winforms.md - - name: Xamarin tutorial - href: core/get-started/xamarin.md - - name: "Releases and planning (roadmap)" items: - name: Current and planned releases href: core/what-is-new/index.md - name: Release planning process href: core/what-is-new/release-planning.md + - name: EF Core 10.0 (RC) + items: + - name: "What's new?" + href: core/what-is-new/ef-core-10.0/whatsnew.md + - name: Breaking changes + href: core/what-is-new/ef-core-10.0/breaking-changes.md - name: EF Core 9.0 items: - - name: High-level plan - href: core/what-is-new/ef-core-9.0/plan.md - name: "What's new?" href: core/what-is-new/ef-core-9.0/whatsnew.md - name: Breaking changes href: core/what-is-new/ef-core-9.0/breaking-changes.md - name: EF Core 8.0 items: - - name: High-level plan - href: core/what-is-new/ef-core-8.0/plan.md - name: "What's new?" href: core/what-is-new/ef-core-8.0/whatsnew.md - name: Breaking changes href: core/what-is-new/ef-core-8.0/breaking-changes.md - - name: EF Core 7.0 - items: - name: High-level plan - href: core/what-is-new/ef-core-7.0/plan.md - - name: "What's new?" - href: core/what-is-new/ef-core-7.0/whatsnew.md - - name: Breaking changes - href: core/what-is-new/ef-core-7.0/breaking-changes.md - - name: EF Core 6.0 - items: - - name: High-level plan - href: core/what-is-new/ef-core-6.0/plan.md - - name: "What's new?" - href: core/what-is-new/ef-core-6.0/whatsnew.md - - name: Breaking changes - href: core/what-is-new/ef-core-6.0/breaking-changes.md + href: core/what-is-new/ef-core-8.0/plan.md - name: Out of support items: - - name: EF Core 5.0 + - name: EF Core 7.0 items: + - name: "What's new?" + href: core/what-is-new/ef-core-7.0/whatsnew.md + - name: Breaking changes + href: core/what-is-new/ef-core-7.0/breaking-changes.md - name: High-level plan - href: core/what-is-new/ef-core-5.0/plan.md + href: core/what-is-new/ef-core-7.0/plan.md + - name: EF Core 6.0 + items: + - name: "What's new?" + href: core/what-is-new/ef-core-6.0/whatsnew.md + - name: Breaking changes + href: core/what-is-new/ef-core-6.0/breaking-changes.md + - name: High-level plan + href: core/what-is-new/ef-core-6.0/plan.md + - name: EF Core 5.0 + items: - name: "What's new?" href: core/what-is-new/ef-core-5.0/whatsnew.md - name: Breaking changes href: core/what-is-new/ef-core-5.0/breaking-changes.md + - name: High-level plan + href: core/what-is-new/ef-core-5.0/plan.md - name: EF Core 3.1 items: - name: New features @@ -326,8 +327,8 @@ - name: Diagnostic listeners href: core/logging-events-diagnostics/diagnostic-listeners.md #- name: Debug views - - name: Event counters - href: core/logging-events-diagnostics/event-counters.md + - name: Metrics + href: core/logging-events-diagnostics/metrics.md - name: Testing items: @@ -352,6 +353,8 @@ href: core/performance/efficient-updating.md - name: Modeling for performance href: core/performance/modeling-for-performance.md + - name: NativeAOT and precompiled queries + href: core/performance/nativeaot-and-precompiled-queries.md - name: Advanced performance topics href: core/performance/advanced-performance-topics.md @@ -363,7 +366,6 @@ href: core/miscellaneous/async.md - name: Nullable reference types href: core/miscellaneous/nullable-reference-types.md - #- name: Using dependency injection - name: Collations and case sensitivity href: core/miscellaneous/collations-and-case-sensitivity.md - name: Connection resiliency @@ -392,16 +394,18 @@ items: - name: Overview href: core/providers/sql-server/index.md - - name: Temporal tables - href: core/providers/sql-server/temporal-tables.md - - name: Value generation - href: core/providers/sql-server/value-generation.md - name: Function mappings href: core/providers/sql-server/functions.md - name: Columns href: core/providers/sql-server/columns.md - name: Indexes href: core/providers/sql-server/indexes.md + - name: Value generation + href: core/providers/sql-server/value-generation.md + - name: Vector search + href: core/providers/sql-server/vector-search.md + - name: Temporal tables + href: core/providers/sql-server/temporal-tables.md - name: Memory-optimized tables href: core/providers/sql-server/memory-optimized-tables.md - name: Hierarchical data @@ -409,8 +413,6 @@ - name: Spatial data displayName: GIS href: core/providers/sql-server/spatial.md - - name: Specify Azure SQL Database options - href: core/providers/sql-server/azure-sql-database.md - name: Miscellaneous href: core/providers/sql-server/misc.md - name: SQLite @@ -430,12 +432,18 @@ items: - name: Overview href: core/providers/cosmos/index.md + - name: Modeling + href: core/providers/cosmos/modeling.md + - name: Querying + href: core/providers/cosmos/querying.md - name: Work with unstructured data href: core/providers/cosmos/unstructured-data.md + - name: Vector search + href: core/providers/cosmos/vector-search.md + - name: Full text search + href: core/providers/cosmos/full-text-search.md - name: Azure Cosmos DB limitations href: core/providers/cosmos/limitations.md - - name: Function mappings - href: core/providers/cosmos/functions.md - name: End-to-end sample href: core/providers/cosmos/planetary-docs-sample.md - name: In-memory (not recommended) @@ -448,7 +456,7 @@ - name: Tools & extensions href: core/extensions/index.md - - name: Command-line reference + - name: Design-time tools reference items: - name: Overview href: core/cli/index.md @@ -456,6 +464,8 @@ href: core/cli/powershell.md - name: .NET Core CLI href: core/cli/dotnet.md + - name: MSBuild Tasks + href: core/cli/msbuild.md - name: Design-time DbContext creation href: core/cli/dbcontext-creation.md - name: Design-time services @@ -464,7 +474,7 @@ - name: Learn more items: - name: EF Core API reference >> - href: /dotnet/api/?view=efcore-7.0&preserve-view=true + href: /dotnet/api/?view=efcore-9.0&preserve-view=true - name: .NET Data Community Standups href: core/learn-more/community-standups.md @@ -482,6 +492,8 @@ href: ef6/what-is-new/upgrading-to-ef6.md - name: Visual Studio Releases href: ef6/what-is-new/visual-studio.md + - name: Microsoft.Data.SqlClient support + href: ef6/what-is-new/microsoft-ef6-sqlserver.md - name: Get started href: ef6/get-started.md - name: Fundamentals diff --git a/samples/core/Benchmarks/AverageBlogRanking.cs b/samples/core/Benchmarks/AverageBlogRanking.cs index 670eaf614f..08ee415350 100644 --- a/samples/core/Benchmarks/AverageBlogRanking.cs +++ b/samples/core/Benchmarks/AverageBlogRanking.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Threading.Tasks; using BenchmarkDotNet.Attributes; using Microsoft.EntityFrameworkCore; @@ -10,22 +11,22 @@ public class AverageBlogRanking public int NumBlogs; // number of records to write [once], and read [each pass] [GlobalSetup] - public void Setup() + public async Task Setup() { using var context = new BloggingContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); - context.SeedData(NumBlogs); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + await context.SeedData(NumBlogs); } #region LoadEntities [Benchmark] - public double LoadEntities() + public async Task LoadEntities() { var sum = 0; var count = 0; using var ctx = new BloggingContext(); - foreach (var blog in ctx.Blogs) + await foreach (var blog in ctx.Blogs.AsAsyncEnumerable()) { sum += blog.Rating; count++; @@ -37,12 +38,12 @@ public double LoadEntities() #region LoadEntitiesNoTracking [Benchmark] - public double LoadEntitiesNoTracking() + public async Task LoadEntitiesNoTracking() { var sum = 0; var count = 0; using var ctx = new BloggingContext(); - foreach (var blog in ctx.Blogs.AsNoTracking()) + await foreach (var blog in ctx.Blogs.AsNoTracking().AsAsyncEnumerable()) { sum += blog.Rating; count++; @@ -54,12 +55,12 @@ public double LoadEntitiesNoTracking() #region ProjectOnlyRanking [Benchmark] - public double ProjectOnlyRanking() + public async Task ProjectOnlyRanking() { var sum = 0; var count = 0; using var ctx = new BloggingContext(); - foreach (var rating in ctx.Blogs.Select(b => b.Rating)) + await foreach (var rating in ctx.Blogs.Select(b => b.Rating).AsAsyncEnumerable()) { sum += rating; count++; @@ -71,10 +72,10 @@ public double ProjectOnlyRanking() #region CalculateInDatabase [Benchmark(Baseline = true)] - public double CalculateInDatabase() + public async Task CalculateInDatabase() { using var ctx = new BloggingContext(); - return ctx.Blogs.Average(b => b.Rating); + return await ctx.Blogs.AverageAsync(b => b.Rating); } #endregion @@ -83,9 +84,9 @@ public class BloggingContext : DbContext public DbSet Blogs { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True"); + => optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0"); - public void SeedData(int numblogs) + public async Task SeedData(int numblogs) { Blogs.AddRange( Enumerable.Range(0, numblogs).Select( @@ -93,7 +94,7 @@ public void SeedData(int numblogs) { Name = $"Blog{i}", Url = $"blog{i}.blogs.net", CreationTime = new DateTime(2020, 1, 1), Rating = i % 5 })); - SaveChanges(); + await SaveChangesAsync(); } } diff --git a/samples/core/Benchmarks/CompiledQueries.cs b/samples/core/Benchmarks/CompiledQueries.cs index 587f1fe98b..aa10ed1a29 100644 --- a/samples/core/Benchmarks/CompiledQueries.cs +++ b/samples/core/Benchmarks/CompiledQueries.cs @@ -62,7 +62,7 @@ public class BloggingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0") .UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); public async Task SeedDataAsync(int numBlogs) diff --git a/samples/core/Benchmarks/ContextPooling.cs b/samples/core/Benchmarks/ContextPooling.cs index fa0899e445..a03605780f 100644 --- a/samples/core/Benchmarks/ContextPooling.cs +++ b/samples/core/Benchmarks/ContextPooling.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using BenchmarkDotNet.Attributes; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -14,34 +15,34 @@ public class ContextPooling public int NumBlogs { get; set; } [GlobalSetup] - public void Setup() + public async Task Setup() { _options = new DbContextOptionsBuilder() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0") .Options; using var context = new BloggingContext(_options); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); - context.SeedData(NumBlogs); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + await context.SeedData(NumBlogs); _poolingFactory = new PooledDbContextFactory(_options); } [Benchmark] - public List WithoutContextPooling() + public async Task> WithoutContextPooling() { using var context = new BloggingContext(_options); - return context.Blogs.ToList(); + return await context.Blogs.ToListAsync(); } [Benchmark] - public List WithContextPooling() + public async Task> WithContextPooling() { using var context = _poolingFactory.CreateDbContext(); - return context.Blogs.ToList(); + return await context.Blogs.ToListAsync(); } public class BloggingContext : DbContext @@ -50,10 +51,10 @@ public class BloggingContext : DbContext public BloggingContext(DbContextOptions options) : base(options) {} - public void SeedData(int numBlogs) + public async Task SeedData(int numBlogs) { Blogs.AddRange(Enumerable.Range(0, numBlogs).Select(i => new Blog { Url = $"http://www.someblog{i}.com/"})); - SaveChanges(); + await SaveChangesAsync(); } } diff --git a/samples/core/Benchmarks/DynamicallyConstructedQueries.cs b/samples/core/Benchmarks/DynamicallyConstructedQueries.cs index cbd81594d7..c969e9a5e3 100644 --- a/samples/core/Benchmarks/DynamicallyConstructedQueries.cs +++ b/samples/core/Benchmarks/DynamicallyConstructedQueries.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading; +using System.Threading.Tasks; using BenchmarkDotNet.Attributes; using Microsoft.EntityFrameworkCore; @@ -13,16 +14,16 @@ public class DynamicallyConstructedQueries private bool _addWhereClause = true; [GlobalSetup] - public static void GlobalSetup() + public static async Task GlobalSetup() { using var context = new BloggingContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region ExpressionApiWithConstant [Benchmark] - public int ExpressionApiWithConstant() + public async Task ExpressionApiWithConstant() { var url = "blog" + Interlocked.Increment(ref _blogNumber); using var context = new BloggingContext(); @@ -43,13 +44,13 @@ public int ExpressionApiWithConstant() query = query.Where(whereLambda); } - return query.Count(); + return await query.CountAsync(); } #endregion #region ExpressionApiWithParameter [Benchmark] - public int ExpressionApiWithParameter() + public async Task ExpressionApiWithParameter() { var url = "blog" + Interlocked.Increment(ref _blogNumber); using var context = new BloggingContext(); @@ -78,13 +79,13 @@ public int ExpressionApiWithParameter() query = query.Where(whereLambda); } - return query.Count(); + return await query.CountAsync(); } #endregion #region SimpleWithParameter [Benchmark] - public int SimpleWithParameter() + public async Task SimpleWithParameter() { var url = "blog" + Interlocked.Increment(ref _blogNumber); @@ -99,7 +100,7 @@ public int SimpleWithParameter() query = query.Where(whereLambda); } - return query.Count(); + return await query.CountAsync(); } #endregion @@ -109,7 +110,7 @@ public class BloggingContext : DbContext public DbSet Posts { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True"); + => optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0"); } public class Blog diff --git a/samples/core/Benchmarks/Inheritance.cs b/samples/core/Benchmarks/Inheritance.cs index dbc45195b6..42e97b84e0 100644 --- a/samples/core/Benchmarks/Inheritance.cs +++ b/samples/core/Benchmarks/Inheritance.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using BenchmarkDotNet.Attributes; using Microsoft.EntityFrameworkCore; @@ -11,60 +12,60 @@ public class Inheritance public int RowsPerEntityType { get; set; } [GlobalSetup(Target = nameof(TPH))] - public void SetupTPH() + public async Task SetupTPH() { Console.WriteLine("Setting up database..."); using var context = new TPHContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); - context.SeedData(RowsPerEntityType); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + await context.SeedData(RowsPerEntityType); Console.WriteLine("Setup complete."); } [GlobalSetup(Target = nameof(TPT))] - public void SetupTPT() + public async Task SetupTPT() { Console.WriteLine("Setting up database..."); using var context = new TPTContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); - context.SeedData(RowsPerEntityType); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + await context.SeedData(RowsPerEntityType); Console.WriteLine("Setup complete."); } [GlobalSetup(Target = nameof(TPC))] - public void SetupTPC() + public async Task SetupTPC() { Console.WriteLine("Setting up database..."); using var context = new TPCContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); - context.SeedData(RowsPerEntityType); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + await context.SeedData(RowsPerEntityType); Console.WriteLine("Setup complete."); } [Benchmark] - public List TPH() + public async Task> TPH() { using var context = new TPHContext(); - return context.Roots.ToList(); + return await context.Roots.ToListAsync(); } [Benchmark] - public List TPT() + public async Task> TPT() { using var context = new TPTContext(); - return context.Roots.ToList(); + return await context.Roots.ToListAsync(); } [Benchmark] - public List TPC() + public async Task> TPC() { using var context = new TPCContext(); - return context.Roots.ToList(); + return await context.Roots.ToListAsync(); } public abstract class InheritanceContext : DbContext @@ -72,7 +73,7 @@ public abstract class InheritanceContext : DbContext public DbSet Roots { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True"); + => optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0"); protected override void OnModelCreating(ModelBuilder modelBuilder) { @@ -84,7 +85,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilder.Entity(); } - public void SeedData(int rowsPerEntityType) + public async Task SeedData(int rowsPerEntityType) { Set().AddRange(Enumerable.Range(0, rowsPerEntityType).Select(i => new Root { RootProperty = i })); Set().AddRange(Enumerable.Range(0, rowsPerEntityType).Select(i => new Child1 { Child1Property = i })); @@ -93,7 +94,7 @@ public void SeedData(int rowsPerEntityType) Set().AddRange(Enumerable.Range(0, rowsPerEntityType).Select(i => new Child2 { Child2Property = i })); Set().AddRange(Enumerable.Range(0, rowsPerEntityType).Select(i => new Child2A { Child2AProperty = i })); Set().AddRange(Enumerable.Range(0, rowsPerEntityType).Select(i => new Child2B { Child2BProperty = i })); - SaveChanges(); + await SaveChangesAsync(); } } diff --git a/samples/core/Benchmarks/QueryTrackingBehavior.cs b/samples/core/Benchmarks/QueryTrackingBehavior.cs index c2f70372b4..e7f303a53e 100644 --- a/samples/core/Benchmarks/QueryTrackingBehavior.cs +++ b/samples/core/Benchmarks/QueryTrackingBehavior.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using BenchmarkDotNet.Attributes; using Microsoft.EntityFrameworkCore; @@ -16,30 +17,30 @@ public class QueryTrackingBehavior public int NumPostsPerBlog { get; set; } [GlobalSetup] - public void Setup() + public async Task Setup() { Console.WriteLine("Setting up database..."); using var context = new BloggingContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); - BloggingContext.SeedData(NumBlogs, NumPostsPerBlog); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + await BloggingContext.SeedData(NumBlogs, NumPostsPerBlog); Console.WriteLine("Setup complete."); } [Benchmark(Baseline = true)] - public List AsTracking() + public async Task> AsTracking() { using var context = new BloggingContext(); - return context.Posts.AsTracking().Include(p => p.Blog).ToList(); + return await context.Posts.AsTracking().Include(p => p.Blog).ToListAsync(); } [Benchmark] - public List AsNoTracking() + public async Task> AsNoTracking() { using var context = new BloggingContext(); - return context.Posts.AsNoTracking().Include(p => p.Blog).ToList(); + return await context.Posts.AsNoTracking().Include(p => p.Blog).ToListAsync(); } public class BloggingContext : DbContext @@ -48,15 +49,16 @@ public class BloggingContext : DbContext public DbSet Posts { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True"); + => optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0"); - public static void SeedData(int numBlogs, int numPostsPerBlog) + public static async Task SeedData(int numBlogs, int numPostsPerBlog) { using var context = new BloggingContext(); context.AddRange( - Enumerable.Range(0, numBlogs).Select( - _ => new Blog { Posts = Enumerable.Range(0, numPostsPerBlog).Select(_ => new Post()).ToList() })); - context.SaveChanges(); + Enumerable.Range(0, numBlogs) + .Select(_ => new Blog { Url = "Some URL", Posts = Enumerable.Range(0, numPostsPerBlog) + .Select(_ => new Post() { Title = "Some Title", Content = "Some Content"}).ToList() })); + await context.SaveChangesAsync(); } } @@ -77,4 +79,4 @@ public class Post public int BlogId { get; set; } public Blog Blog { get; set; } } -} \ No newline at end of file +} diff --git a/samples/core/CascadeDeletes/IntroOptionalSamples.cs b/samples/core/CascadeDeletes/IntroOptionalSamples.cs index 5dd1879cc6..04717d76a5 100644 --- a/samples/core/CascadeDeletes/IntroOptionalSamples.cs +++ b/samples/core/CascadeDeletes/IntroOptionalSamples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,67 +9,67 @@ namespace IntroOptional; public static class IntroOptionalSamples { - public static void Deleting_principal_parent_1b() + public static async Task Deleting_principal_parent_1b() { Console.WriteLine($">>>> Sample: {nameof(Deleting_principal_parent_1b)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Deleting_principal_parent_1b using var context = new BlogsContext(); - var blog = context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).First(); + var blog = await context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).FirstAsync(); context.Remove(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Severing_a_relationship_1b() + public static async Task Severing_a_relationship_1b() { Console.WriteLine($">>>> Sample: {nameof(Severing_a_relationship_1b)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Severing_a_relationship_1b using var context = new BlogsContext(); - var blog = context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).First(); + var blog = await context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).FirstAsync(); foreach (var post in blog.Posts) { post.Blog = null; } - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Severing_a_relationship_2b() + public static async Task Severing_a_relationship_2b() { Console.WriteLine($">>>> Sample: {nameof(Severing_a_relationship_2b)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Severing_a_relationship_2b using var context = new BlogsContext(); - var blog = context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).First(); + var blog = await context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).FirstAsync(); blog.Posts.Clear(); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); @@ -77,15 +78,15 @@ public static void Severing_a_relationship_2b() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -108,7 +109,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -159,7 +160,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Scratch;Trusted_Connection=True"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Scratch;Trusted_Connection=True;ConnectRetryCount=0"); //.UseSqlite("DataSource=test.db"); if (!_quiet) @@ -167,4 +168,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder.LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }); } } -} \ No newline at end of file +} diff --git a/samples/core/CascadeDeletes/IntroRequiredSamples.cs b/samples/core/CascadeDeletes/IntroRequiredSamples.cs index cc318d1142..2ccf07c516 100644 --- a/samples/core/CascadeDeletes/IntroRequiredSamples.cs +++ b/samples/core/CascadeDeletes/IntroRequiredSamples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,88 +9,88 @@ namespace IntroRequired; public static class IntroRequiredSamples { - public static void Deleting_principal_parent_1() + public static async Task Deleting_principal_parent_1() { Console.WriteLine($">>>> Sample: {nameof(Deleting_principal_parent_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Deleting_principal_parent_1 using var context = new BlogsContext(); - var blog = context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).First(); + var blog = await context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).FirstAsync(); context.Remove(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Severing_a_relationship_1() + public static async Task Severing_a_relationship_1() { Console.WriteLine($">>>> Sample: {nameof(Severing_a_relationship_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Severing_a_relationship_1 using var context = new BlogsContext(); - var blog = context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).First(); + var blog = await context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).FirstAsync(); foreach (var post in blog.Posts) { post.Blog = null; } - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Severing_a_relationship_2() + public static async Task Severing_a_relationship_2() { Console.WriteLine($">>>> Sample: {nameof(Severing_a_relationship_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Severing_a_relationship_2 using var context = new BlogsContext(); - var blog = context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).First(); + var blog = await context.Blogs.OrderBy(e => e.Name).Include(e => e.Posts).FirstAsync(); blog.Posts.Clear(); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Where_cascading_behaviors_happen_1() + public static async Task Where_cascading_behaviors_happen_1() { Console.WriteLine($">>>> Sample: {nameof(Where_cascading_behaviors_happen_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Where_cascading_behaviors_happen_1 using var context = new BlogsContext(); - var blog = context.Blogs.OrderBy(e => e.Name).First(); + var blog = await context.Blogs.OrderBy(e => e.Name).FirstAsync(); context.Remove(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); @@ -98,15 +99,15 @@ public static void Where_cascading_behaviors_happen_1() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -129,7 +130,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -176,7 +177,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Scratch;Trusted_Connection=True"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Scratch;Trusted_Connection=True;ConnectRetryCount=0"); //.UseSqlite("DataSource=test.db"); if (!_quiet) @@ -184,4 +185,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder.LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }); } } -} \ No newline at end of file +} diff --git a/samples/core/CascadeDeletes/OptionalDependentsSamples.cs b/samples/core/CascadeDeletes/OptionalDependentsSamples.cs index 0585730316..4b8d9d55c7 100644 --- a/samples/core/CascadeDeletes/OptionalDependentsSamples.cs +++ b/samples/core/CascadeDeletes/OptionalDependentsSamples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,13 +9,13 @@ namespace Optional; public static class OptionalDependentsSamples { - public static void Optional_relationship_with_dependents_children_loaded() + public static async Task Optional_relationship_with_dependents_children_loaded() { Console.WriteLine("#### Optional relationship with dependents/children loaded"); Console.WriteLine(); - var deleteResults = Helpers.GatherData(c => c.Remove(c.Blogs.Include(e => e.Posts).Single())); - var severResults = Helpers.GatherData(c => c.Blogs.Include(e => e.Posts).Single().Posts.Clear()); + var deleteResults = await Helpers.GatherData(async c => c.Remove(await c.Blogs.Include(e => e.Posts).SingleAsync())); + var severResults = await Helpers.GatherData(async c => (await c.Blogs.Include(e => e.Posts).SingleAsync()).Posts.Clear()); Console.WriteLine( $"| `{"DeleteBehavior".PadRight(16)} | {"On deleting principal/parent".PadRight(40)} | On severing from principal/parent"); @@ -28,12 +29,12 @@ public static void Optional_relationship_with_dependents_children_loaded() Console.WriteLine(); } - public static void Optional_relationship_with_dependents_children_not_loaded() + public static async Task Optional_relationship_with_dependents_children_not_loaded() { Console.WriteLine("#### Optional relationship with dependents/children not loaded"); Console.WriteLine(); - var deleteResults = Helpers.GatherData(c => c.Remove(c.Blogs.Single())); + var deleteResults = await Helpers.GatherData(async c => c.Remove(await c.Blogs.SingleAsync())); Console.WriteLine( $"| `{"DeleteBehavior".PadRight(16)} | {"On deleting principal/parent".PadRight(40)} | On severing from principal/parent"); @@ -80,16 +81,16 @@ public class Post public static class Helpers { - public static void RecreateCleanDatabase(OptionalBlogsContext context) + public static async Task RecreateCleanDatabase(OptionalBlogsContext context) { using (context) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } } - public static void PopulateDatabase(OptionalBlogsContext context) + public static async Task PopulateDatabase(OptionalBlogsContext context) { using (context) { @@ -112,33 +113,33 @@ public static void PopulateDatabase(OptionalBlogsContext context) } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } - public static Dictionary GatherData(Action action) + public static async Task> GatherData(Func action) { var results = new Dictionary(); foreach (var deleteBehavior in DeleteBehaviors) { - RecreateCleanDatabase(new OptionalBlogsContext(deleteBehavior)); - PopulateDatabase(new OptionalBlogsContext(deleteBehavior)); + await RecreateCleanDatabase(new OptionalBlogsContext(deleteBehavior)); + await PopulateDatabase(new OptionalBlogsContext(deleteBehavior)); try { using var context = new OptionalBlogsContext(deleteBehavior); - action(context); + await action(context); context.ChangeTracker.DetectChanges(); var deletingPosts = context.ChangeTracker.Entries().Any(e => e.State == EntityState.Deleted); var settingFksToNull = context.ChangeTracker.Entries().Any(e => e.State == EntityState.Modified); - context.SaveChanges(); + await context.SaveChangesAsync(); - var deletedPosts = !context.Posts.AsNoTracking().Any(); + var deletedPosts = !(await context.Posts.AsNoTracking().AnyAsync()); results[deleteBehavior] = deletingPosts @@ -187,7 +188,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder .EnableServiceProviderCaching(false) .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Scratch;Trusted_Connection=True"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Scratch;Trusted_Connection=True;ConnectRetryCount=0"); //.UseSqlite("DataSource=test.db"); if (!_quiet) @@ -196,4 +197,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) } } } -} \ No newline at end of file +} diff --git a/samples/core/CascadeDeletes/Program.cs b/samples/core/CascadeDeletes/Program.cs index 9623a16faa..3237432b46 100644 --- a/samples/core/CascadeDeletes/Program.cs +++ b/samples/core/CascadeDeletes/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using DatabaseCycles; using IntroOptional; using IntroRequired; @@ -7,26 +8,26 @@ public class Program { - public static void Main() + public static async Task Main() { Console.WriteLine("Samples for _Cascade Delete_"); Console.WriteLine(); - IntroRequiredSamples.Deleting_principal_parent_1(); - IntroRequiredSamples.Severing_a_relationship_1(); - IntroRequiredSamples.Severing_a_relationship_2(); - IntroRequiredSamples.Where_cascading_behaviors_happen_1(); + await IntroRequiredSamples.Deleting_principal_parent_1(); + await IntroRequiredSamples.Severing_a_relationship_1(); + await IntroRequiredSamples.Severing_a_relationship_2(); + await IntroRequiredSamples.Where_cascading_behaviors_happen_1(); - WithDatabaseCycleSamples.Database_cascade_limitations_1(); - WithDatabaseCycleSamples.Database_cascade_limitations_2(); + await WithDatabaseCycleSamples.Database_cascade_limitations_1(); + await WithDatabaseCycleSamples.Database_cascade_limitations_2(); - IntroOptionalSamples.Deleting_principal_parent_1b(); - IntroOptionalSamples.Severing_a_relationship_1b(); - IntroOptionalSamples.Severing_a_relationship_2b(); + await IntroOptionalSamples.Deleting_principal_parent_1b(); + await IntroOptionalSamples.Severing_a_relationship_1b(); + await IntroOptionalSamples.Severing_a_relationship_2b(); - RequiredDependentsSamples.Required_relationship_with_dependents_children_loaded(); - RequiredDependentsSamples.Required_relationship_with_dependents_children_not_loaded(); - OptionalDependentsSamples.Optional_relationship_with_dependents_children_loaded(); - OptionalDependentsSamples.Optional_relationship_with_dependents_children_not_loaded(); + await RequiredDependentsSamples.Required_relationship_with_dependents_children_loaded(); + await RequiredDependentsSamples.Required_relationship_with_dependents_children_not_loaded(); + await OptionalDependentsSamples.Optional_relationship_with_dependents_children_loaded(); + await OptionalDependentsSamples.Optional_relationship_with_dependents_children_not_loaded(); } } diff --git a/samples/core/CascadeDeletes/RequiredDependentsSamples.cs b/samples/core/CascadeDeletes/RequiredDependentsSamples.cs index eda55142a8..d7f4bf0352 100644 --- a/samples/core/CascadeDeletes/RequiredDependentsSamples.cs +++ b/samples/core/CascadeDeletes/RequiredDependentsSamples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,13 +9,13 @@ namespace Required; public static class RequiredDependentsSamples { - public static void Required_relationship_with_dependents_children_loaded() + public static async Task Required_relationship_with_dependents_children_loaded() { Console.WriteLine("#### Required relationship with dependents/children loaded"); Console.WriteLine(); - var deleteResults = Helpers.GatherData(c => c.Remove(c.Blogs.Include(e => e.Posts).Single())); - var severResults = Helpers.GatherData(c => c.Blogs.Include(e => e.Posts).Single().Posts.Clear()); + var deleteResults = await Helpers.GatherData(async c => c.Remove(await c.Blogs.Include(e => e.Posts).SingleAsync())); + var severResults = await Helpers.GatherData(async c => (await c.Blogs.Include(e => e.Posts).SingleAsync()).Posts.Clear()); Console.WriteLine( $"| `{"DeleteBehavior".PadRight(16)} | {"On deleting principal/parent".PadRight(40)} | On severing from principal/parent"); @@ -28,12 +29,12 @@ public static void Required_relationship_with_dependents_children_loaded() Console.WriteLine(); } - public static void Required_relationship_with_dependents_children_not_loaded() + public static async Task Required_relationship_with_dependents_children_not_loaded() { Console.WriteLine("#### Required relationship with dependents/children not loaded"); Console.WriteLine(); - var deleteResults = Helpers.GatherData(c => c.Remove(c.Blogs.Single())); + var deleteResults = await Helpers.GatherData(async c => c.Remove(await c.Blogs.SingleAsync())); Console.WriteLine( $"| `{"DeleteBehavior".PadRight(16)} | {"On deleting principal/parent".PadRight(40)} | On severing from principal/parent"); @@ -77,16 +78,16 @@ public class Post public static class Helpers { - public static void RecreateCleanDatabase(RequiredBlogsContext context) + public static async Task RecreateCleanDatabase(RequiredBlogsContext context) { using (context) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } } - public static void PopulateDatabase(RequiredBlogsContext context) + public static async Task PopulateDatabase(RequiredBlogsContext context) { using (context) { @@ -109,11 +110,11 @@ public static void PopulateDatabase(RequiredBlogsContext context) } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } - public static Dictionary GatherData(Action action) + public static async Task> GatherData(Func action) { var results = new Dictionary(); @@ -121,8 +122,8 @@ public static Dictionary GatherData(Action GatherData(Action().Any(e => e.State == EntityState.Deleted); var settingFksToNull = context.ChangeTracker.Entries().Any(e => e.State == EntityState.Modified); - context.SaveChanges(); + await context.SaveChangesAsync(); - var deletedPosts = !context.Posts.AsNoTracking().Any(); + var deletedPosts = !(await context.Posts.AsNoTracking().AnyAsync()); results[deleteBehavior] = deletingPosts @@ -192,7 +193,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder .EnableServiceProviderCaching(false) .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Scratch;Trusted_Connection=True"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Scratch;Trusted_Connection=True;ConnectRetryCount=0"); //.UseSqlite("DataSource=test.db"); if (!_quiet) @@ -201,4 +202,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) } } } -} \ No newline at end of file +} diff --git a/samples/core/CascadeDeletes/WithDatabaseCycleSamples.cs b/samples/core/CascadeDeletes/WithDatabaseCycleSamples.cs index 90e7659bae..76c59babd5 100644 --- a/samples/core/CascadeDeletes/WithDatabaseCycleSamples.cs +++ b/samples/core/CascadeDeletes/WithDatabaseCycleSamples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,46 +9,46 @@ namespace DatabaseCycles; public static class WithDatabaseCycleSamples { - public static void Database_cascade_limitations_1() + public static async Task Database_cascade_limitations_1() { Console.WriteLine($">>>> Sample: {nameof(Database_cascade_limitations_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Database_cascade_limitations_1 using var context = new BlogsContext(); - var owner = context.People.Single(e => e.Name == "ajcvickers"); - var blog = context.Blogs.Single(e => e.Owner == owner); + var owner = await context.People.SingleAsync(e => e.Name == "ajcvickers"); + var blog = await context.Blogs.SingleAsync(e => e.Owner == owner); context.Remove(owner); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Database_cascade_limitations_2() + public static async Task Database_cascade_limitations_2() { Console.WriteLine($">>>> Sample: {nameof(Database_cascade_limitations_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); try { #region Database_cascade_limitations_2 using var context = new BlogsContext(); - var owner = context.People.Single(e => e.Name == "ajcvickers"); + var owner = await context.People.SingleAsync(e => e.Name == "ajcvickers"); context.Remove(owner); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion } catch (Exception e) @@ -65,15 +66,15 @@ public static void Database_cascade_limitations_2() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -101,7 +102,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -169,7 +170,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Scratch;Trusted_Connection=True"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Scratch;Trusted_Connection=True;ConnectRetryCount=0"); //.UseSqlite("DataSource=test.db"); if (!_quiet) @@ -177,4 +178,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder.LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }); } } -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/AccessingTrackedEntities/Program.cs b/samples/core/ChangeTracking/AccessingTrackedEntities/Program.cs index 45bbb28d45..ff72565641 100644 --- a/samples/core/ChangeTracking/AccessingTrackedEntities/Program.cs +++ b/samples/core/ChangeTracking/AccessingTrackedEntities/Program.cs @@ -1,30 +1,31 @@ using System; +using System.Threading.Tasks; public class Program { - public static void Main() + public static async Task Main() { Console.WriteLine("Samples for _Accessing Tracked Entities_"); Console.WriteLine(); - Samples.Using_DbContext_Entry_and_EntityEntry_instances_1(); - Samples.Work_with_the_entity_1(); - Samples.Work_with_the_entity_2(); - Samples.Work_with_a_single_property_1(); - Samples.Work_with_a_single_navigation_1(); - Samples.Work_with_a_single_navigation_2(); - Samples.Work_with_all_properties_of_an_entity_1(); - Samples.Work_with_all_navigations_of_an_entity_1(); - Samples.Work_with_all_members_of_an_entity_1(); + await Samples.Using_DbContext_Entry_and_EntityEntry_instances_1(); + await Samples.Work_with_the_entity_1(); + await Samples.Work_with_the_entity_2(); + await Samples.Work_with_a_single_property_1(); + await Samples.Work_with_a_single_navigation_1(); + await Samples.Work_with_a_single_navigation_2(); + await Samples.Work_with_all_properties_of_an_entity_1(); + await Samples.Work_with_all_navigations_of_an_entity_1(); + await Samples.Work_with_all_members_of_an_entity_1(); - Samples.Find_and_FindAsync_1(); - Samples.Find_and_FindAsync_2(); + await Samples.Find_and_FindAsync_1(); + await Samples.Find_and_FindAsync_2(); - Samples.Using_ChangeTracker_Entries_to_access_all_tracked_entities_1(); + await Samples.Using_ChangeTracker_Entries_to_access_all_tracked_entities_1(); - Samples.Using_DbSet_Local_to_query_tracked_entities_1(); - Samples.Using_DbSet_Local_to_query_tracked_entities_2(); - Samples.Using_DbSet_Local_to_query_tracked_entities_3(); - Samples.Using_DbSet_Local_to_query_tracked_entities_4(); + await Samples.Using_DbSet_Local_to_query_tracked_entities_1(); + await Samples.Using_DbSet_Local_to_query_tracked_entities_2(); + await Samples.Using_DbSet_Local_to_query_tracked_entities_3(); + await Samples.Using_DbSet_Local_to_query_tracked_entities_4(); } } diff --git a/samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs b/samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs index 23b4871696..527c58944d 100644 --- a/samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs +++ b/samples/core/ChangeTracking/AccessingTrackedEntities/Samples.cs @@ -4,6 +4,7 @@ using System.ComponentModel; using System.Diagnostics; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -11,35 +12,35 @@ public static class Samples { - public static void Using_DbContext_Entry_and_EntityEntry_instances_1() + public static async Task Using_DbContext_Entry_and_EntityEntry_instances_1() { Console.WriteLine($">>>> Sample: {nameof(Using_DbContext_Entry_and_EntityEntry_instances_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Using_DbContext_Entry_and_EntityEntry_instances_1 using var context = new BlogsContext(); - var blog = context.Blogs.Single(e => e.Id == 1); + var blog = await context.Blogs.SingleAsync(e => e.Id == 1); var entityEntry = context.Entry(blog); #endregion Console.WriteLine(); } - public static void Work_with_the_entity_1() + public static async Task Work_with_the_entity_1() { Console.WriteLine($">>>> Sample: {nameof(Work_with_the_entity_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var blog = context.Blogs.Single(e => e.Id == 1); + var blog = await context.Blogs.SingleAsync(e => e.Id == 1); #region Work_with_the_entity_1 var currentState = context.Entry(blog).State; @@ -52,13 +53,13 @@ public static void Work_with_the_entity_1() Console.WriteLine(); } - public static void Work_with_the_entity_2() + public static async Task Work_with_the_entity_2() { Console.WriteLine($">>>> Sample: {nameof(Work_with_the_entity_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); @@ -73,18 +74,18 @@ public static void Work_with_the_entity_2() Console.WriteLine(); } - public static void Work_with_a_single_property_1() + public static async Task Work_with_a_single_property_1() { Console.WriteLine($">>>> Sample: {nameof(Work_with_a_single_property_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); { - var blog = context.Blogs.Single(e => e.Id == 1); + var blog = await context.Blogs.SingleAsync(e => e.Id == 1); #region Work_with_a_single_property_1a PropertyEntry propertyEntry = context.Entry(blog).Property(e => e.Name); @@ -92,7 +93,7 @@ public static void Work_with_a_single_property_1() } { - var blog = context.Blogs.Single(e => e.Id == 1); + var blog = await context.Blogs.SingleAsync(e => e.Id == 1); #region Work_with_a_single_property_1b PropertyEntry propertyEntry = context.Entry(blog).Property("Name"); @@ -100,7 +101,7 @@ public static void Work_with_a_single_property_1() } { - var blog = context.Blogs.Single(e => e.Id == 1); + var blog = await context.Blogs.SingleAsync(e => e.Id == 1); #region Work_with_a_single_property_1c PropertyEntry propertyEntry = context.Entry(blog).Property("Name"); @@ -108,7 +109,7 @@ public static void Work_with_a_single_property_1() } { - var blog = context.Blogs.Single(e => e.Id == 1); + var blog = await context.Blogs.SingleAsync(e => e.Id == 1); #region Work_with_a_single_property_1d string currentValue = context.Entry(blog).Property(e => e.Name).CurrentValue; @@ -118,7 +119,7 @@ public static void Work_with_a_single_property_1() { #region Work_with_a_single_property_1e - object blog = context.Blogs.Single(e => e.Id == 1); + object blog = await context.Blogs.SingleAsync(e => e.Id == 1); object currentValue = context.Entry(blog).Property("Name").CurrentValue; context.Entry(blog).Property("Name").CurrentValue = "1unicorn2"; @@ -128,17 +129,17 @@ public static void Work_with_a_single_property_1() Console.WriteLine(); } - public static void Work_with_a_single_navigation_1() + public static async Task Work_with_a_single_navigation_1() { Console.WriteLine($">>>> Sample: {nameof(Work_with_a_single_navigation_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var post = context.Posts.Include(e => e.Blog).Single(e => e.Id == 1); + var post = await context.Posts.Include(e => e.Blog).SingleAsync(e => e.Id == 1); #region Work_with_a_single_navigation_1 ReferenceEntry referenceEntry1 = context.Entry(post).Reference(e => e.Blog); @@ -149,17 +150,17 @@ public static void Work_with_a_single_navigation_1() Console.WriteLine(); } - public static void Work_with_a_single_navigation_2() + public static async Task Work_with_a_single_navigation_2() { Console.WriteLine($">>>> Sample: {nameof(Work_with_a_single_navigation_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var blog = context.Blogs.Include(e => e.Posts).Single(e => e.Id == 1); + var blog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Id == 1); #region Work_with_a_single_navigation_2a CollectionEntry collectionEntry1 = context.Entry(blog).Collection(e => e.Posts); @@ -174,17 +175,17 @@ public static void Work_with_a_single_navigation_2() Console.WriteLine(); } - public static void Work_with_all_properties_of_an_entity_1() + public static async Task Work_with_all_properties_of_an_entity_1() { Console.WriteLine($">>>> Sample: {nameof(Work_with_all_properties_of_an_entity_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var blog = context.Blogs.Include(e => e.Posts).Single(e => e.Id == 1); + var blog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Id == 1); #region Work_with_all_properties_of_an_entity_1 foreach (var propertyEntry in context.Entry(blog).Properties) @@ -199,23 +200,23 @@ public static void Work_with_all_properties_of_an_entity_1() Console.WriteLine(); } - public static void Work_with_all_properties_of_an_entity_2() + public static async Task Work_with_all_properties_of_an_entity_2() { Console.WriteLine($">>>> Sample: {nameof(Work_with_all_properties_of_an_entity_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var blog = context.Blogs.Include(e => e.Posts).Single(e => e.Id == 1); + var blog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Id == 1); { #region Work_with_all_properties_of_an_entity_2a var currentValues = context.Entry(blog).CurrentValues; var originalValues = context.Entry(blog).OriginalValues; - var databaseValues = context.Entry(blog).GetDatabaseValues(); + var databaseValues = await context.Entry(blog).GetDatabaseValuesAsync(); #endregion } @@ -229,7 +230,7 @@ public static void Work_with_all_properties_of_an_entity_2() { #region Work_with_all_properties_of_an_entity_2c - var databaseValues = context.Entry(blog).GetDatabaseValues(); + var databaseValues = await context.Entry(blog).GetDatabaseValuesAsync(); context.Entry(blog).CurrentValues.SetValues(databaseValues); context.Entry(blog).OriginalValues.SetValues(databaseValues); #endregion @@ -245,24 +246,24 @@ public static void Work_with_all_properties_of_an_entity_2() { #region Work_with_all_properties_of_an_entity_2e - var clonedBlog = context.Entry(blog).GetDatabaseValues().ToObject(); + var clonedBlog = (await context.Entry(blog).GetDatabaseValuesAsync()).ToObject(); #endregion } Console.WriteLine(); } - public static void Work_with_all_navigations_of_an_entity_1() + public static async Task Work_with_all_navigations_of_an_entity_1() { Console.WriteLine($">>>> Sample: {nameof(Work_with_all_navigations_of_an_entity_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var blog = context.Blogs.Single(e => e.Id == 1); + var blog = await context.Blogs.SingleAsync(e => e.Id == 1); #region Work_with_all_navigations_of_an_entity_1 foreach (var navigationEntry in context.Entry(blog).Navigations) @@ -274,17 +275,17 @@ public static void Work_with_all_navigations_of_an_entity_1() Console.WriteLine(); } - public static void Work_with_all_members_of_an_entity_1() + public static async Task Work_with_all_members_of_an_entity_1() { Console.WriteLine($">>>> Sample: {nameof(Work_with_all_members_of_an_entity_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var blog = context.Blogs.Single(e => e.Id == 1); + var blog = await context.Blogs.SingleAsync(e => e.Id == 1); #region Work_with_all_members_of_an_entity_1 foreach (var memberEntry in context.Entry(blog).Members) @@ -297,25 +298,25 @@ public static void Work_with_all_members_of_an_entity_1() Console.WriteLine(); } - public static void Find_and_FindAsync_1() + public static async Task Find_and_FindAsync_1() { Console.WriteLine($">>>> Sample: {nameof(Find_and_FindAsync_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Find_and_FindAsync_1 using var context = new BlogsContext(); Console.WriteLine("First call to Find..."); - var blog1 = context.Blogs.Find(1); + var blog1 = await context.Blogs.FindAsync(1); Console.WriteLine($"...found blog {blog1.Name}"); Console.WriteLine(); Console.WriteLine("Second call to Find..."); - var blog2 = context.Blogs.Find(1); + var blog2 = await context.Blogs.FindAsync(1); Debug.Assert(blog1 == blog2); Console.WriteLine("...returned the same instance without executing a query."); @@ -324,36 +325,36 @@ public static void Find_and_FindAsync_1() Console.WriteLine(); } - public static void Find_and_FindAsync_2() + public static async Task Find_and_FindAsync_2() { Console.WriteLine($">>>> Sample: {nameof(Find_and_FindAsync_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); var orderId = 1; var productId = 2; #region Find_and_FindAsync_2 - var orderline = context.OrderLines.Find(orderId, productId); + var orderline = await context.OrderLines.FindAsync(orderId, productId); #endregion Console.WriteLine(); } - public static void Using_ChangeTracker_Entries_to_access_all_tracked_entities_1() + public static async Task Using_ChangeTracker_Entries_to_access_all_tracked_entities_1() { Console.WriteLine($">>>> Sample: {nameof(Using_ChangeTracker_Entries_to_access_all_tracked_entities_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Using_ChangeTracker_Entries_to_access_all_tracked_entities_1a using var context = new BlogsContext(); - var blogs = context.Blogs.Include(e => e.Posts).ToList(); + var blogs = await context.Blogs.Include(e => e.Posts).ToListAsync(); foreach (var entityEntry in context.ChangeTracker.Entries()) { @@ -384,18 +385,18 @@ public static void Using_ChangeTracker_Entries_to_access_all_tracked_entities_1( Console.WriteLine(); } - public static void Using_DbSet_Local_to_query_tracked_entities_1() + public static async Task Using_DbSet_Local_to_query_tracked_entities_1() { Console.WriteLine($">>>> Sample: {nameof(Using_DbSet_Local_to_query_tracked_entities_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Using_DbSet_Local_to_query_tracked_entities_1 using var context = new BlogsContext(); - context.Blogs.Include(e => e.Posts).Load(); + await context.Blogs.Include(e => e.Posts).LoadAsync(); foreach (var blog in context.Blogs.Local) { @@ -411,18 +412,18 @@ public static void Using_DbSet_Local_to_query_tracked_entities_1() Console.WriteLine(); } - public static void Using_DbSet_Local_to_query_tracked_entities_2() + public static async Task Using_DbSet_Local_to_query_tracked_entities_2() { Console.WriteLine($">>>> Sample: {nameof(Using_DbSet_Local_to_query_tracked_entities_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Using_DbSet_Local_to_query_tracked_entities_2 using var context = new BlogsContext(); - var posts = context.Posts.Include(e => e.Blog).ToList(); + var posts = await context.Posts.Include(e => e.Blog).ToListAsync(); Console.WriteLine("Local view after loading posts:"); @@ -452,18 +453,18 @@ public static void Using_DbSet_Local_to_query_tracked_entities_2() Console.WriteLine(); } - public static void Using_DbSet_Local_to_query_tracked_entities_3() + public static async Task Using_DbSet_Local_to_query_tracked_entities_3() { Console.WriteLine($">>>> Sample: {nameof(Using_DbSet_Local_to_query_tracked_entities_3)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Using_DbSet_Local_to_query_tracked_entities_3 using var context = new BlogsContext(); - var posts = context.Posts.Include(e => e.Blog).ToList(); + var posts = await context.Posts.Include(e => e.Blog).ToListAsync(); Console.WriteLine("Local view after loading posts:"); @@ -493,17 +494,17 @@ public static void Using_DbSet_Local_to_query_tracked_entities_3() Console.WriteLine(); } - public static void Using_DbSet_Local_to_query_tracked_entities_4() + public static async Task Using_DbSet_Local_to_query_tracked_entities_4() { Console.WriteLine($">>>> Sample: {nameof(Using_DbSet_Local_to_query_tracked_entities_4)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - context.Posts.Include(e => e.Blog).Load(); + await context.Posts.Include(e => e.Blog).LoadAsync(); #region Using_DbSet_Local_to_query_tracked_entities_4 ObservableCollection observableCollection = context.Posts.Local.ToObservableCollection(); @@ -516,15 +517,15 @@ public static void Using_DbSet_Local_to_query_tracked_entities_4() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -547,7 +548,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } diff --git a/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/DefaultValueSamples.cs b/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/DefaultValueSamples.cs index 607fff9e2f..ed1fa5ec04 100644 --- a/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/DefaultValueSamples.cs +++ b/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/DefaultValueSamples.cs @@ -1,5 +1,6 @@ using System; using System.Diagnostics; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -7,12 +8,12 @@ namespace DefaultValues; public class DefaultValueSamples { - public static void Working_with_default_values_1() + public static async Task Working_with_default_values_1() { Console.WriteLine($">>>> Sample: {nameof(Working_with_default_values_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); #region Working_with_default_values_1 using var context = new BlogsContext(); @@ -21,7 +22,7 @@ public static void Working_with_default_values_1() new Token { Name = "A" }, new Token { Name = "B", ValidFrom = new DateTime(1111, 11, 11, 11, 11, 11) }); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); #endregion @@ -29,12 +30,12 @@ public static void Working_with_default_values_1() Console.WriteLine(); } - public static void Working_with_default_values_2() + public static async Task Working_with_default_values_2() { Console.WriteLine($">>>> Sample: {nameof(Working_with_default_values_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); #region Working_with_default_values_2 using var context = new BlogsContext(); @@ -44,7 +45,7 @@ public static void Working_with_default_values_2() var fooC = new Foo1(); context.AddRange(fooA, fooB, fooC); - context.SaveChanges(); + await context.SaveChangesAsync(); Debug.Assert(fooA.Count == 10); Debug.Assert(fooB.Count == -1); // Not what we want! @@ -54,12 +55,12 @@ public static void Working_with_default_values_2() Console.WriteLine(); } - public static void Working_with_default_values_3() + public static async Task Working_with_default_values_3() { Console.WriteLine($">>>> Sample: {nameof(Working_with_default_values_3)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); #region Working_with_default_values_3 using var context = new BlogsContext(); @@ -69,7 +70,7 @@ public static void Working_with_default_values_3() var fooC = new Foo2(); context.AddRange(fooA, fooB, fooC); - context.SaveChanges(); + await context.SaveChangesAsync(); Debug.Assert(fooA.Count == 10); Debug.Assert(fooB.Count == 0); @@ -79,12 +80,12 @@ public static void Working_with_default_values_3() Console.WriteLine(); } - public static void Working_with_default_values_4() + public static async Task Working_with_default_values_4() { Console.WriteLine($">>>> Sample: {nameof(Working_with_default_values_4)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); #region Working_with_default_values_4 using var context = new BlogsContext(); @@ -94,7 +95,7 @@ public static void Working_with_default_values_4() var fooC = new Foo3(); context.AddRange(fooA, fooB, fooC); - context.SaveChanges(); + await context.SaveChangesAsync(); Debug.Assert(fooA.Count == 10); Debug.Assert(fooB.Count == 0); @@ -104,12 +105,12 @@ public static void Working_with_default_values_4() Console.WriteLine(); } - public static void Working_with_default_values_5() + public static async Task Working_with_default_values_5() { Console.WriteLine($">>>> Sample: {nameof(Working_with_default_values_5)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); #region Working_with_default_values_5 using var context = new BlogsContext(); @@ -120,7 +121,7 @@ public static void Working_with_default_values_5() context.AddRange(userA, userB, userC); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); @@ -129,12 +130,12 @@ public static void Working_with_default_values_5() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } } @@ -268,4 +269,4 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .ValueGeneratedNever(); #endregion } -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/Program.cs b/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/Program.cs index 41ff74e4c0..9ab29ed7e0 100644 --- a/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/Program.cs +++ b/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/Program.cs @@ -1,22 +1,23 @@ using System; +using System.Threading.Tasks; using DefaultValues; using Optional; public class Program { - public static void Main() + public static async Task Main() { Console.WriteLine("Samples for _Identity Resolution in EF Core_"); Console.WriteLine(); - Samples.DbContext_versus_DbSet_methods_1(); - Samples.Temporary_values_1(); - Samples.Temporary_values_2(); + await Samples.DbContext_versus_DbSet_methods_1(); + await Samples.Temporary_values_1(); + await Samples.Temporary_values_2(); - DefaultValueSamples.Working_with_default_values_1(); - DefaultValueSamples.Working_with_default_values_2(); - DefaultValueSamples.Working_with_default_values_3(); - DefaultValueSamples.Working_with_default_values_4(); - DefaultValueSamples.Working_with_default_values_5(); + await DefaultValueSamples.Working_with_default_values_1(); + await DefaultValueSamples.Working_with_default_values_2(); + await DefaultValueSamples.Working_with_default_values_3(); + await DefaultValueSamples.Working_with_default_values_4(); + await DefaultValueSamples.Working_with_default_values_5(); } } diff --git a/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/Samples.cs b/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/Samples.cs index bbb09127bf..696969296f 100644 --- a/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/Samples.cs +++ b/samples/core/ChangeTracking/AdditionalChangeTrackingFeatures/Samples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,19 +9,19 @@ namespace Optional; public class Samples { - public static void DbContext_versus_DbSet_methods_1() + public static async Task DbContext_versus_DbSet_methods_1() { Console.WriteLine($">>>> Sample: {nameof(DbContext_versus_DbSet_methods_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region DbContext_versus_DbSet_methods_1 using var context = new BlogsContext(); - var post = context.Posts.Single(e => e.Id == 3); - var tag = context.Tags.Single(e => e.Id == 1); + var post = await context.Posts.SingleAsync(e => e.Id == 3); + var tag = await context.Tags.SingleAsync(e => e.Id == 1); var joinEntitySet = context.Set>("PostTag"); var joinEntity = new Dictionary { ["PostId"] = post.Id, ["TagId"] = tag.Id }; @@ -28,19 +29,19 @@ public static void DbContext_versus_DbSet_methods_1() Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Temporary_values_1() + public static async Task Temporary_values_1() { Console.WriteLine($">>>> Sample: {nameof(Temporary_values_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Temporary_values_1 using var context = new BlogsContext(); @@ -56,12 +57,12 @@ public static void Temporary_values_1() Console.WriteLine(); } - public static void Temporary_values_2() + public static async Task Temporary_values_2() { Console.WriteLine($">>>> Sample: {nameof(Temporary_values_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); #region Temporary_values_2 var blogs = new List { new Blog { Id = -1, Name = ".NET Blog" }, new Blog { Id = -2, Name = "Visual Studio Blog" } }; @@ -98,7 +99,7 @@ public static void Temporary_values_2() Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); #endregion @@ -109,15 +110,15 @@ public static void Temporary_values_2() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -161,7 +162,7 @@ public static void PopulateDatabase() new Tag { Text = "Visual Studio" }, new Tag { Text = "EF Core" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -241,4 +242,4 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) j => j.HasOne().WithMany()); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangeDetectionAndNotifications/ChangeTrackingProxiesSamples.cs b/samples/core/ChangeTracking/ChangeDetectionAndNotifications/ChangeTrackingProxiesSamples.cs index a1ab530e6d..548717fc87 100644 --- a/samples/core/ChangeTracking/ChangeDetectionAndNotifications/ChangeTrackingProxiesSamples.cs +++ b/samples/core/ChangeTracking/ChangeDetectionAndNotifications/ChangeTrackingProxiesSamples.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -9,17 +10,17 @@ namespace Proxies; public class ChangeTrackingProxiesSamples { - public static void Change_tracking_proxies_1() + public static async Task Change_tracking_proxies_1() { Console.WriteLine($">>>> Sample: {nameof(Change_tracking_proxies_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Change_tracking_proxies_1 using var context = new BlogsContext(); - var blog = context.Blogs.Include(e => e.Posts).First(e => e.Name == ".NET Blog"); + var blog = await context.Blogs.Include(e => e.Posts).FirstAsync(e => e.Name == ".NET Blog"); // Change a property value blog.Name = ".NET Blog (Updated!)"; @@ -42,15 +43,15 @@ public static void Change_tracking_proxies_1() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -95,7 +96,7 @@ public static void PopulateDatabase() })); })); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -152,4 +153,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) base.OnConfiguring(optionsBuilder); } -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangeDetectionAndNotifications/NotificationEntitiesSamples.cs b/samples/core/ChangeTracking/ChangeDetectionAndNotifications/NotificationEntitiesSamples.cs index 349c884455..61091f861f 100644 --- a/samples/core/ChangeTracking/ChangeDetectionAndNotifications/NotificationEntitiesSamples.cs +++ b/samples/core/ChangeTracking/ChangeDetectionAndNotifications/NotificationEntitiesSamples.cs @@ -3,6 +3,7 @@ using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -10,17 +11,17 @@ namespace Notification; public class NotificationEntitiesSamples { - public static void Notification_entities_1() + public static async Task Notification_entities_1() { Console.WriteLine($">>>> Sample: {nameof(Notification_entities_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Notification_entities_1 using var context = new BlogsContext(); - var blog = context.Blogs.Include(e => e.Posts).First(e => e.Name == ".NET Blog"); + var blog = await context.Blogs.Include(e => e.Posts).FirstAsync(e => e.Name == ".NET Blog"); // Change a property value blog.Name = ".NET Blog (Updated!)"; @@ -41,15 +42,15 @@ public static void Notification_entities_1() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -90,7 +91,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -229,4 +230,4 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangingAndChangedNotifications); } -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangeDetectionAndNotifications/NotificationWithBaseSamples.cs b/samples/core/ChangeTracking/ChangeDetectionAndNotifications/NotificationWithBaseSamples.cs index f1b1ac1c8f..5eb2c6aa97 100644 --- a/samples/core/ChangeTracking/ChangeDetectionAndNotifications/NotificationWithBaseSamples.cs +++ b/samples/core/ChangeTracking/ChangeDetectionAndNotifications/NotificationWithBaseSamples.cs @@ -4,6 +4,7 @@ using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -11,17 +12,17 @@ namespace NotificationWithBase; public class NotificationWithBaseSamples { - public static void Notification_entities_2() + public static async Task Notification_entities_2() { Console.WriteLine($">>>> Sample: {nameof(Notification_entities_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Notification_entities_2 using var context = new BlogsContext(); - var blog = context.Blogs.Include(e => e.Posts).First(e => e.Name == ".NET Blog"); + var blog = await context.Blogs.Include(e => e.Posts).FirstAsync(e => e.Name == ".NET Blog"); // Change a property value blog.Name = ".NET Blog (Updated!)"; @@ -42,15 +43,15 @@ public static void Notification_entities_2() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -91,7 +92,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -206,4 +207,4 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilder.HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangingAndChangedNotifications); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangeDetectionAndNotifications/Program.cs b/samples/core/ChangeTracking/ChangeDetectionAndNotifications/Program.cs index 09fd03249e..dbb789642b 100644 --- a/samples/core/ChangeTracking/ChangeDetectionAndNotifications/Program.cs +++ b/samples/core/ChangeTracking/ChangeDetectionAndNotifications/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Notification; using NotificationWithBase; using Proxies; @@ -6,17 +7,17 @@ public class Program { - public static void Main() + public static async Task Main() { Console.WriteLine("Samples for _Change Detection and Notifications_"); Console.WriteLine(); - SnapshotSamples.Snapshot_change_tracking_1(); - SnapshotSamples.Snapshot_change_tracking_2(); + await SnapshotSamples.Snapshot_change_tracking_1(); + await SnapshotSamples.Snapshot_change_tracking_2(); - NotificationEntitiesSamples.Notification_entities_1(); - NotificationWithBaseSamples.Notification_entities_2(); + await NotificationEntitiesSamples.Notification_entities_1(); + await NotificationWithBaseSamples.Notification_entities_2(); - ChangeTrackingProxiesSamples.Change_tracking_proxies_1(); + await ChangeTrackingProxiesSamples.Change_tracking_proxies_1(); } } diff --git a/samples/core/ChangeTracking/ChangeDetectionAndNotifications/SnapshotSamples.cs b/samples/core/ChangeTracking/ChangeDetectionAndNotifications/SnapshotSamples.cs index e3d63659cf..f7f49ad910 100644 --- a/samples/core/ChangeTracking/ChangeDetectionAndNotifications/SnapshotSamples.cs +++ b/samples/core/ChangeTracking/ChangeDetectionAndNotifications/SnapshotSamples.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,17 +10,17 @@ namespace Snapshot; public class SnapshotSamples { - public static void Snapshot_change_tracking_1() + public static async Task Snapshot_change_tracking_1() { Console.WriteLine($">>>> Sample: {nameof(Snapshot_change_tracking_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Snapshot_change_tracking_1 using var context = new BlogsContext(); - var blog = context.Blogs.Include(e => e.Posts).First(e => e.Name == ".NET Blog"); + var blog = await context.Blogs.Include(e => e.Posts).FirstAsync(e => e.Name == ".NET Blog"); // Change a property value blog.Name = ".NET Blog (Updated!)"; @@ -38,17 +40,17 @@ public static void Snapshot_change_tracking_1() Console.WriteLine(); } - public static void Snapshot_change_tracking_2() + public static async Task Snapshot_change_tracking_2() { Console.WriteLine($">>>> Sample: {nameof(Snapshot_change_tracking_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Snapshot_change_tracking_2 using var context = new BlogsContext(); - var blog = context.Blogs.Include(e => e.Posts).First(e => e.Name == ".NET Blog"); + var blog = await context.Blogs.Include(e => e.Posts).FirstAsync(e => e.Name == ".NET Blog"); // Change a property value context.Entry(blog).Property(e => e.Name).CurrentValue = ".NET Blog (Updated!)"; @@ -71,15 +73,15 @@ public static void Snapshot_change_tracking_2() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -120,7 +122,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -181,7 +183,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) } #region SaveChanges - public override int SaveChanges() + public override async Task SaveChangesAsync(CancellationToken cancellationToken = default) { foreach (var entityEntry in ChangeTracker.Entries()) // Detects changes automatically { @@ -195,7 +197,7 @@ public override int SaveChanges() try { ChangeTracker.AutoDetectChangesEnabled = false; - return base.SaveChanges(); // Avoid automatically detecting changes again here + return await base.SaveChangesAsync(cancellationToken); // Avoid automatically detecting changes again here } finally { @@ -203,4 +205,4 @@ public override int SaveChanges() } } #endregion -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangeTrackerDebugging/Program.cs b/samples/core/ChangeTracking/ChangeTrackerDebugging/Program.cs index b878822988..1d6eeb0533 100644 --- a/samples/core/ChangeTracking/ChangeTrackerDebugging/Program.cs +++ b/samples/core/ChangeTracking/ChangeTrackerDebugging/Program.cs @@ -1,13 +1,14 @@ using System; +using System.Threading.Tasks; public class Program { - public static void Main() + public static async Task Main() { Console.WriteLine("Samples for _Change Tracker Debugging_"); Console.WriteLine(); - Samples.Change_tracker_debug_view_1(); - Samples.Change_tracker_logging_1(); + await Samples.Change_tracker_debug_view_1(); + await Samples.Change_tracker_logging_1(); } } diff --git a/samples/core/ChangeTracking/ChangeTrackerDebugging/Samples.cs b/samples/core/ChangeTracking/ChangeTrackerDebugging/Samples.cs index e9f16413be..4c2950281e 100644 --- a/samples/core/ChangeTracking/ChangeTrackerDebugging/Samples.cs +++ b/samples/core/ChangeTracking/ChangeTrackerDebugging/Samples.cs @@ -1,27 +1,28 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.Extensions.Logging; public class Samples { - public static void Change_tracker_debug_view_1() + public static async Task Change_tracker_debug_view_1() { Console.WriteLine($">>>> Sample: {nameof(Change_tracker_debug_view_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Change_tracker_debug_view_1a using var context = new BlogsContext(); - var blogs = context.Blogs + var blogs = await context.Blogs .Include(e => e.Posts).ThenInclude(e => e.Tags) .Include(e => e.Assets) - .ToList(); + .ToListAsync(); // Mark something Added blogs[0].Posts.Add( @@ -55,20 +56,20 @@ public static void Change_tracker_debug_view_1() Console.WriteLine(); } - public static void Change_tracker_logging_1() + public static async Task Change_tracker_logging_1() { Console.WriteLine($">>>> Sample: {nameof(Change_tracker_logging_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(LogLevel.Debug); - var blogs = context.Blogs + var blogs = await context.Blogs .Include(e => e.Posts).ThenInclude(e => e.Tags) .Include(e => e.Assets) - .ToList(); + .ToListAsync(); // Mark something Added blogs[0].Posts.Add( @@ -92,15 +93,15 @@ public static void Change_tracker_logging_1() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(LogLevel.Error); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(LogLevel.Error); @@ -155,7 +156,7 @@ public static void PopulateDatabase() context.AddRange(blogs); context.AddRange(tags); - context.SaveChanges(); + await context.SaveChangesAsync(); } } diff --git a/samples/core/ChangeTracking/ChangeTrackingInEFCore/ExplicitKeysRequiredSamples.cs b/samples/core/ChangeTracking/ChangeTrackingInEFCore/ExplicitKeysRequiredSamples.cs index 11d4aedbfd..425e2ec130 100644 --- a/samples/core/ChangeTracking/ChangeTrackingInEFCore/ExplicitKeysRequiredSamples.cs +++ b/samples/core/ChangeTracking/ChangeTrackingInEFCore/ExplicitKeysRequiredSamples.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -9,17 +10,17 @@ namespace ExplicitKeysRequired; public static class ExplicitKeysRequiredSamples { - public static void Deleting_principal_parent_entities_1() + public static async Task Deleting_principal_parent_entities_1() { Console.WriteLine($">>>> Sample: {nameof(Deleting_principal_parent_entities_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var blog = GetDisconnectedBlogAndPosts(); + var blog = await GetDisconnectedBlogAndPosts(); #region Deleting_principal_parent_entities_1 // Attach a blog and associated posts @@ -32,32 +33,32 @@ public static void Deleting_principal_parent_entities_1() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); Console.WriteLine(); - Blog GetDisconnectedBlogAndPosts() + async Task GetDisconnectedBlogAndPosts() { using var tempContext = new BlogsContext(); - return tempContext.Blogs.Include(e => e.Posts).Single(); + return await tempContext.Blogs.Include(e => e.Posts).SingleAsync(); } } } public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -83,7 +84,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -134,4 +135,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder.LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }); } } -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangeTrackingInEFCore/ExplicitKeysSamples.cs b/samples/core/ChangeTracking/ChangeTrackingInEFCore/ExplicitKeysSamples.cs index 50ff569cb6..254ecebe2f 100644 --- a/samples/core/ChangeTracking/ChangeTrackingInEFCore/ExplicitKeysSamples.cs +++ b/samples/core/ChangeTracking/ChangeTrackingInEFCore/ExplicitKeysSamples.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -9,12 +10,12 @@ namespace ExplicitKeys; public static class ExplicitKeysSamples { - public static void Inserting_new_entities_1() + public static async Task Inserting_new_entities_1() { Console.WriteLine($">>>> Sample: {nameof(Inserting_new_entities_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using var context = new BlogsContext(); @@ -26,7 +27,7 @@ public static void Inserting_new_entities_1() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -34,12 +35,12 @@ public static void Inserting_new_entities_1() Console.WriteLine(); } - public static void Inserting_new_entities_2() + public static async Task Inserting_new_entities_2() { Console.WriteLine($">>>> Sample: {nameof(Inserting_new_entities_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using var context = new BlogsContext(); @@ -70,7 +71,7 @@ public static void Inserting_new_entities_2() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -78,13 +79,13 @@ public static void Inserting_new_entities_2() Console.WriteLine(); } - public static void Attaching_existing_entities_1() + public static async Task Attaching_existing_entities_1() { Console.WriteLine($">>>> Sample: {nameof(Attaching_existing_entities_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); @@ -96,7 +97,7 @@ public static void Attaching_existing_entities_1() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -104,13 +105,13 @@ public static void Attaching_existing_entities_1() Console.WriteLine(); } - public static void Attaching_existing_entities_2() + public static async Task Attaching_existing_entities_2() { Console.WriteLine($">>>> Sample: {nameof(Attaching_existing_entities_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); @@ -141,7 +142,7 @@ public static void Attaching_existing_entities_2() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -149,13 +150,13 @@ public static void Attaching_existing_entities_2() Console.WriteLine(); } - public static void Updating_existing_entities_1() + public static async Task Updating_existing_entities_1() { Console.WriteLine($">>>> Sample: {nameof(Updating_existing_entities_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); @@ -167,7 +168,7 @@ public static void Updating_existing_entities_1() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -175,13 +176,13 @@ public static void Updating_existing_entities_1() Console.WriteLine(); } - public static void Updating_existing_entities_2() + public static async Task Updating_existing_entities_2() { Console.WriteLine($">>>> Sample: {nameof(Updating_existing_entities_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); @@ -212,7 +213,7 @@ public static void Updating_existing_entities_2() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -220,13 +221,13 @@ public static void Updating_existing_entities_2() Console.WriteLine(); } - public static void Deleting_existing_entities_1() + public static async Task Deleting_existing_entities_1() { Console.WriteLine($">>>> Sample: {nameof(Deleting_existing_entities_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); @@ -238,7 +239,7 @@ public static void Deleting_existing_entities_1() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -246,17 +247,17 @@ public static void Deleting_existing_entities_1() Console.WriteLine(); } - public static void Deleting_dependent_child_entities_1() + public static async Task Deleting_dependent_child_entities_1() { Console.WriteLine($">>>> Sample: {nameof(Deleting_dependent_child_entities_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var post = GetDisconnectedPost(); + var post = await GetDisconnectedPost(); #region Deleting_dependent_child_entities_1 context.Attach(post); @@ -266,31 +267,31 @@ public static void Deleting_dependent_child_entities_1() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); Console.WriteLine(); - Post GetDisconnectedPost() + async Task GetDisconnectedPost() { using var tempContext = new BlogsContext(); - return tempContext.Posts.Find(2); + return await tempContext.Posts.FindAsync(2); } } - public static void Deleting_dependent_child_entities_2() + public static async Task Deleting_dependent_child_entities_2() { Console.WriteLine($">>>> Sample: {nameof(Deleting_dependent_child_entities_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var blog = GetDisconnectedBlogAndPosts(); + var blog = await GetDisconnectedBlogAndPosts(); #region Deleting_dependent_child_entities_2 // Attach a blog and associated posts @@ -303,31 +304,31 @@ public static void Deleting_dependent_child_entities_2() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); Console.WriteLine(); - Blog GetDisconnectedBlogAndPosts() + async Task GetDisconnectedBlogAndPosts() { using var tempContext = new BlogsContext(); - return tempContext.Blogs.Include(e => e.Posts).Single(); + return await tempContext.Blogs.Include(e => e.Posts).SingleAsync(); } } - public static void Deleting_principal_parent_entities_1() + public static async Task Deleting_principal_parent_entities_1() { Console.WriteLine($">>>> Sample: {nameof(Deleting_principal_parent_entities_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var blog = GetDisconnectedBlogAndPosts(); + var blog = await GetDisconnectedBlogAndPosts(); #region Deleting_principal_parent_entities_1 // Attach a blog and associated posts @@ -340,32 +341,32 @@ public static void Deleting_principal_parent_entities_1() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); Console.WriteLine(); - Blog GetDisconnectedBlogAndPosts() + async Task GetDisconnectedBlogAndPosts() { using var tempContext = new BlogsContext(); - return tempContext.Blogs.Include(e => e.Posts).Single(); + return await tempContext.Blogs.Include(e => e.Posts).SingleAsync(); } } } public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -391,7 +392,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -442,4 +443,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder.LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }); } } -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangeTrackingInEFCore/GeneratedKeysSamples.cs b/samples/core/ChangeTracking/ChangeTrackingInEFCore/GeneratedKeysSamples.cs index 0d2771fae2..7653d775e6 100644 --- a/samples/core/ChangeTracking/ChangeTrackingInEFCore/GeneratedKeysSamples.cs +++ b/samples/core/ChangeTracking/ChangeTrackingInEFCore/GeneratedKeysSamples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,47 +9,47 @@ namespace GeneratedKeys; public static class GeneratedKeysSamples { - public static void Simple_query_and_update_1() + public static async Task Simple_query_and_update_1() { Console.WriteLine($">>>> Sample: {nameof(Simple_query_and_update_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Simple_query_and_update_1 using var context = new BlogsContext(); - var blog = context.Blogs.Include(e => e.Posts).First(e => e.Name == ".NET Blog"); + var blog = await context.Blogs.Include(e => e.Posts).FirstAsync(e => e.Name == ".NET Blog"); blog.Name = ".NET Blog (Updated!)"; - foreach (var post in blog.Posts.Where(e => !e.Title.Contains("5.0"))) + await foreach (var post in blog.Posts.AsQueryable().Where(e => !e.Title.Contains("5.0")).AsAsyncEnumerable()) { post.Title = post.Title.Replace("5", "5.0"); } - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Simple_query_and_update_2() + public static async Task Simple_query_and_update_2() { Console.WriteLine($">>>> Sample: {nameof(Simple_query_and_update_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var blog = context.Blogs.Include(e => e.Posts).First(e => e.Name == ".NET Blog"); + var blog = await context.Blogs.Include(e => e.Posts).FirstAsync(e => e.Name == ".NET Blog"); blog.Name = ".NET Blog (Updated!)"; - foreach (var post in blog.Posts.Where(e => !e.Title.Contains("5.0"))) + await foreach (var post in blog.Posts.AsQueryable().Where(e => !e.Title.Contains("5.0")).AsAsyncEnumerable()) { post.Title = post.Title.Replace("5", "5.0"); } @@ -58,23 +59,23 @@ public static void Simple_query_and_update_2() Console.WriteLine(context.ChangeTracker.DebugView.LongView); #endregion - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } - public static void Query_then_insert_update_and_delete_1() + public static async Task Query_then_insert_update_and_delete_1() { Console.WriteLine($">>>> Sample: {nameof(Query_then_insert_update_and_delete_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Query_then_insert_update_and_delete_1 using var context = new BlogsContext(); - var blog = context.Blogs.Include(e => e.Posts).First(e => e.Name == ".NET Blog"); + var blog = await context.Blogs.Include(e => e.Posts).FirstAsync(e => e.Name == ".NET Blog"); // Modify property values blog.Name = ".NET Blog (Updated!)"; @@ -93,16 +94,16 @@ public static void Query_then_insert_update_and_delete_1() context.ChangeTracker.DetectChanges(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion } - public static void Inserting_new_entities_3() + public static async Task Inserting_new_entities_3() { Console.WriteLine($">>>> Sample: {nameof(Inserting_new_entities_3)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using var context = new BlogsContext(); @@ -130,7 +131,7 @@ public static void Inserting_new_entities_3() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -138,13 +139,13 @@ public static void Inserting_new_entities_3() Console.WriteLine(); } - public static void Attaching_existing_entities_3() + public static async Task Attaching_existing_entities_3() { Console.WriteLine($">>>> Sample: {nameof(Attaching_existing_entities_3)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); @@ -180,7 +181,7 @@ public static void Attaching_existing_entities_3() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -188,13 +189,13 @@ public static void Attaching_existing_entities_3() Console.WriteLine(); } - public static void Updating_existing_entities_3() + public static async Task Updating_existing_entities_3() { Console.WriteLine($">>>> Sample: {nameof(Updating_existing_entities_3)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); @@ -230,7 +231,7 @@ public static void Updating_existing_entities_3() Console.WriteLine("Before SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("After SaveChanges:"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -238,17 +239,17 @@ public static void Updating_existing_entities_3() Console.WriteLine(); } - public static void Custom_tracking_with_TrackGraph_1() + public static async Task Custom_tracking_with_TrackGraph_1() { Console.WriteLine($">>>> Sample: {nameof(Custom_tracking_with_TrackGraph_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var blog = context.Blogs.AsNoTracking().Include(e => e.Posts).Single(e => e.Name == ".NET Blog"); + var blog = await context.Blogs.AsNoTracking().Include(e => e.Posts).SingleAsync(e => e.Name == ".NET Blog"); #region Custom_tracking_with_TrackGraph_1a blog.Posts.Add( @@ -263,13 +264,13 @@ public static void Custom_tracking_with_TrackGraph_1() toDelete.Id = -toDelete.Id; #endregion - UpdateBlog(blog); + await UpdateBlog(blog); Console.WriteLine(); } #region Custom_tracking_with_TrackGraph_1b - public static void UpdateBlog(Blog blog) + public static async Task UpdateBlog(Blog blog) { using var context = new BlogsContext(); @@ -296,22 +297,22 @@ public static void UpdateBlog(Blog blog) Console.WriteLine($"Tracking {node.Entry.Metadata.DisplayName()} with key value {keyValue} as {node.Entry.State}"); }); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion } public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -334,7 +335,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -381,4 +382,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder.LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }); } } -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangeTrackingInEFCore/Program.cs b/samples/core/ChangeTracking/ChangeTrackingInEFCore/Program.cs index 4460eb108b..f705025b5a 100644 --- a/samples/core/ChangeTracking/ChangeTrackingInEFCore/Program.cs +++ b/samples/core/ChangeTracking/ChangeTrackingInEFCore/Program.cs @@ -1,37 +1,38 @@ using System; +using System.Threading.Tasks; using ExplicitKeys; using ExplicitKeysRequired; using GeneratedKeys; public class Program { - public static void Main() + public static async Task Main() { Console.WriteLine("Samples for _Change Tracking in EF Core_"); Console.WriteLine(); - GeneratedKeysSamples.Simple_query_and_update_1(); - GeneratedKeysSamples.Simple_query_and_update_2(); - GeneratedKeysSamples.Query_then_insert_update_and_delete_1(); + await GeneratedKeysSamples.Simple_query_and_update_1(); + await GeneratedKeysSamples.Simple_query_and_update_2(); + await GeneratedKeysSamples.Query_then_insert_update_and_delete_1(); - ExplicitKeysSamples.Inserting_new_entities_1(); - ExplicitKeysSamples.Inserting_new_entities_2(); - GeneratedKeysSamples.Inserting_new_entities_3(); + await ExplicitKeysSamples.Inserting_new_entities_1(); + await ExplicitKeysSamples.Inserting_new_entities_2(); + await GeneratedKeysSamples.Inserting_new_entities_3(); - ExplicitKeysSamples.Attaching_existing_entities_1(); - ExplicitKeysSamples.Attaching_existing_entities_2(); - GeneratedKeysSamples.Attaching_existing_entities_3(); + await ExplicitKeysSamples.Attaching_existing_entities_1(); + await ExplicitKeysSamples.Attaching_existing_entities_2(); + await GeneratedKeysSamples.Attaching_existing_entities_3(); - ExplicitKeysSamples.Updating_existing_entities_1(); - ExplicitKeysSamples.Updating_existing_entities_2(); - GeneratedKeysSamples.Updating_existing_entities_3(); + await ExplicitKeysSamples.Updating_existing_entities_1(); + await ExplicitKeysSamples.Updating_existing_entities_2(); + await GeneratedKeysSamples.Updating_existing_entities_3(); - ExplicitKeysSamples.Deleting_existing_entities_1(); - ExplicitKeysSamples.Deleting_dependent_child_entities_1(); - ExplicitKeysSamples.Deleting_dependent_child_entities_2(); - ExplicitKeysSamples.Deleting_principal_parent_entities_1(); - ExplicitKeysRequiredSamples.Deleting_principal_parent_entities_1(); + await ExplicitKeysSamples.Deleting_existing_entities_1(); + await ExplicitKeysSamples.Deleting_dependent_child_entities_1(); + await ExplicitKeysSamples.Deleting_dependent_child_entities_2(); + await ExplicitKeysSamples.Deleting_principal_parent_entities_1(); + await ExplicitKeysRequiredSamples.Deleting_principal_parent_entities_1(); - GeneratedKeysSamples.Custom_tracking_with_TrackGraph_1(); + await GeneratedKeysSamples.Custom_tracking_with_TrackGraph_1(); } } diff --git a/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityAndSkipsSamples.cs b/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityAndSkipsSamples.cs index e8649f301b..0d34d390bc 100644 --- a/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityAndSkipsSamples.cs +++ b/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityAndSkipsSamples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,19 +9,19 @@ namespace JoinEntityWithSkips; public class ExplicitJoinEntityWithSkipsSamples { - public static void Many_to_many_relationships_3() + public static async Task Many_to_many_relationships_3() { Console.WriteLine($">>>> Sample: {nameof(Many_to_many_relationships_3)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Many_to_many_relationships_3 using var context = new BlogsContext(); - var post = context.Posts.Single(e => e.Id == 3); - var tag = context.Tags.Single(e => e.Id == 1); + var post = await context.Posts.SingleAsync(e => e.Id == 3); + var tag = await context.Tags.SingleAsync(e => e.Id == 1); post.Tags.Add(tag); @@ -31,18 +32,18 @@ public static void Many_to_many_relationships_3() Console.WriteLine(); } - public static void Many_to_many_relationships_4() + public static async Task Many_to_many_relationships_4() { Console.WriteLine($">>>> Sample: {nameof(Many_to_many_relationships_4)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var post = context.Posts.Single(e => e.Id == 3); - var tag = context.Tags.Single(e => e.Id == 1); + var post = await context.Posts.SingleAsync(e => e.Id == 3); + var tag = await context.Tags.SingleAsync(e => e.Id == 1); #region Many_to_many_relationships_4 context.Add(new PostTag { Post = post, Tag = tag }); @@ -54,18 +55,18 @@ public static void Many_to_many_relationships_4() Console.WriteLine(); } - public static void Many_to_many_relationships_5() + public static async Task Many_to_many_relationships_5() { Console.WriteLine($">>>> Sample: {nameof(Many_to_many_relationships_5)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var post = context.Posts.Single(e => e.Id == 3); - var tag = context.Tags.Single(e => e.Id == 1); + var post = await context.Posts.SingleAsync(e => e.Id == 3); + var tag = await context.Tags.SingleAsync(e => e.Id == 1); #region Many_to_many_relationships_5 context.Add(new PostTag { PostId = post.Id, TagId = tag.Id }); @@ -80,15 +81,15 @@ public static void Many_to_many_relationships_5() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -132,7 +133,7 @@ public static void PopulateDatabase() new Tag { Text = "Visual Studio" }, new Tag { Text = "EF Core" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -213,4 +214,4 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) j => j.HasOne(t => t.Post).WithMany(p => p.PostTags)); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntitySamples.cs b/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntitySamples.cs index c7e0b748a4..ea86b10a85 100644 --- a/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntitySamples.cs +++ b/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntitySamples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,42 +9,42 @@ namespace JoinEntity; public class ExplicitJoinEntitySamples { - public static void Many_to_many_relationships_1() + public static async Task Many_to_many_relationships_1() { Console.WriteLine($">>>> Sample: {nameof(Many_to_many_relationships_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Many_to_many_relationships_1 using var context = new BlogsContext(); - var post = context.Posts.Single(e => e.Id == 3); - var tag = context.Tags.Single(e => e.Id == 1); + var post = await context.Posts.SingleAsync(e => e.Id == 3); + var tag = await context.Tags.SingleAsync(e => e.Id == 1); context.Add(new PostTag { PostId = post.Id, TagId = tag.Id }); Console.WriteLine(context.ChangeTracker.DebugView.LongView); #endregion - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } - public static void Many_to_many_relationships_2() + public static async Task Many_to_many_relationships_2() { Console.WriteLine($">>>> Sample: {nameof(Many_to_many_relationships_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var post = context.Posts.Single(e => e.Id == 3); - var tag = context.Tags.Single(e => e.Id == 1); + var post = await context.Posts.SingleAsync(e => e.Id == 3); + var tag = await context.Tags.SingleAsync(e => e.Id == 1); #region Many_to_many_relationships_2 context.Add(new PostTag { Post = post, Tag = tag }); @@ -51,7 +52,7 @@ public static void Many_to_many_relationships_2() Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } @@ -59,15 +60,15 @@ public static void Many_to_many_relationships_2() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -111,7 +112,7 @@ public static void PopulateDatabase() new Tag { Text = "Visual Studio" }, new Tag { Text = "EF Core" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -183,4 +184,4 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasKey(e => new { e.PostId, e.TagId }); } -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityWithPayloadSamples.cs b/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityWithPayloadSamples.cs index acbabe54ad..36091c738f 100644 --- a/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityWithPayloadSamples.cs +++ b/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityWithPayloadSamples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,23 +9,23 @@ namespace JoinEntityWithPayload; public class ExplicitJoinEntityWithPayloadSamples { - public static void Many_to_many_relationships_7() + public static async Task Many_to_many_relationships_7() { Console.WriteLine($">>>> Sample: {nameof(Many_to_many_relationships_7)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Many_to_many_relationships_7 using var context = new BlogsContext(); - var post = context.Posts.Single(e => e.Id == 3); - var tag = context.Tags.Single(e => e.Id == 1); + var post = await context.Posts.SingleAsync(e => e.Id == 3); + var tag = await context.Tags.SingleAsync(e => e.Id == 1); post.Tags.Add(tag); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); #endregion @@ -35,15 +36,15 @@ public static void Many_to_many_relationships_7() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -87,7 +88,7 @@ public static void PopulateDatabase() new Tag { Text = "Visual Studio" }, new Tag { Text = "EF Core" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -166,4 +167,4 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) j => j.Property(e => e.TaggedOn).HasDefaultValueSql("CURRENT_TIMESTAMP")); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityWithStringPayloadSamples.cs b/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityWithStringPayloadSamples.cs index d635724cd5..ac0d22f45e 100644 --- a/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityWithStringPayloadSamples.cs +++ b/samples/core/ChangeTracking/ChangingFKsAndNavigations/ExplicitJoinEntityWithStringPayloadSamples.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,29 +10,29 @@ namespace JoinEntityWithStringPayload; public class ExplicitJoinEntityWithStringPayloadSamples { - public static void Many_to_many_relationships_8() + public static async Task Many_to_many_relationships_8() { Console.WriteLine($">>>> Sample: {nameof(Many_to_many_relationships_8)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Many_to_many_relationships_8 using var context = new BlogsContext(); - var post = context.Posts.Single(e => e.Id == 3); - var tag = context.Tags.Single(e => e.Id == 1); + var post = await context.Posts.SingleAsync(e => e.Id == 3); + var tag = await context.Tags.SingleAsync(e => e.Id == 1); post.Tags.Add(tag); context.ChangeTracker.DetectChanges(); - var joinEntity = context.Set().Find(post.Id, tag.Id); + var joinEntity = await context.Set().FindAsync(post.Id, tag.Id); joinEntity.TaggedBy = "ajcvickers"; - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); #endregion @@ -38,24 +40,24 @@ public static void Many_to_many_relationships_8() Console.WriteLine(); } - public static void Many_to_many_relationships_9() + public static async Task Many_to_many_relationships_9() { Console.WriteLine($">>>> Sample: {nameof(Many_to_many_relationships_9)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Many_to_many_relationships_9 using var context = new BlogsContext(); - var post = context.Posts.Single(e => e.Id == 3); - var tag = context.Tags.Single(e => e.Id == 1); + var post = context.Posts.SingleAsync(e => e.Id == 3); + var tag = context.Tags.SingleAsync(e => e.Id == 1); context.Add( new PostTag { PostId = post.Id, TagId = tag.Id, TaggedBy = "ajcvickers" }); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); #endregion @@ -66,15 +68,15 @@ public static void Many_to_many_relationships_9() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -118,7 +120,7 @@ public static void PopulateDatabase() new Tag { Text = "Visual Studio" }, new Tag { Text = "EF Core" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -200,7 +202,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) #endregion #region SaveChanges - public override int SaveChanges() + public override async Task SaveChangesAsync(CancellationToken cancellationToken = default) { foreach (var entityEntry in ChangeTracker.Entries()) { @@ -210,7 +212,7 @@ public override int SaveChanges() } } - return base.SaveChanges(); + return await base.SaveChangesAsync(cancellationToken); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangingFKsAndNavigations/OptionalRelationshipsSamples.cs b/samples/core/ChangeTracking/ChangingFKsAndNavigations/OptionalRelationshipsSamples.cs index 94423838c6..39fa02741e 100644 --- a/samples/core/ChangeTracking/ChangingFKsAndNavigations/OptionalRelationshipsSamples.cs +++ b/samples/core/ChangeTracking/ChangingFKsAndNavigations/OptionalRelationshipsSamples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -8,21 +9,21 @@ namespace Optional; public class OptionalRelationshipsSamples { - public static void Relationship_fixup_1() + public static async Task Relationship_fixup_1() { Console.WriteLine($">>>> Sample: {nameof(Relationship_fixup_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Relationship_fixup_1 using var context = new BlogsContext(); - var blogs = context.Blogs + var blogs = await context.Blogs .Include(e => e.Posts) .Include(e => e.Assets) - .ToList(); + .ToListAsync(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); #endregion @@ -30,43 +31,43 @@ public static void Relationship_fixup_1() Console.WriteLine(); } - public static void Relationship_fixup_2() + public static async Task Relationship_fixup_2() { Console.WriteLine($">>>> Sample: {nameof(Relationship_fixup_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Relationship_fixup_2 using var context = new BlogsContext(); - var blogs = context.Blogs.ToList(); + var blogs = await context.Blogs.ToListAsync(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - var assets = context.Assets.ToList(); + var assets = await context.Assets.ToListAsync(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - var posts = context.Posts.ToList(); + var posts = await context.Posts.ToListAsync(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); #endregion Console.WriteLine(); } - public static void Changing_relationships_using_navigations_1() + public static async Task Changing_relationships_using_navigations_1() { Console.WriteLine($">>>> Sample: {nameof(Changing_relationships_using_navigations_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Changing_relationships_using_navigations_1 using var context = new BlogsContext(); - var dotNetBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == ".NET Blog"); - var vsBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == "Visual Studio Blog"); + var dotNetBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == ".NET Blog"); + var vsBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == "Visual Studio Blog"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -77,24 +78,24 @@ public static void Changing_relationships_using_navigations_1() context.ChangeTracker.DetectChanges(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Changing_relationships_using_navigations_2() + public static async Task Changing_relationships_using_navigations_2() { Console.WriteLine($">>>> Sample: {nameof(Changing_relationships_using_navigations_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var dotNetBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == ".NET Blog"); - var vsBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == "Visual Studio Blog"); + var dotNetBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == ".NET Blog"); + var vsBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == "Visual Studio Blog"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -106,23 +107,23 @@ public static void Changing_relationships_using_navigations_2() context.ChangeTracker.DetectChanges(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } - public static void Changing_relationships_using_foreign_key_values_1() + public static async Task Changing_relationships_using_foreign_key_values_1() { Console.WriteLine($">>>> Sample: {nameof(Changing_relationships_using_foreign_key_values_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var dotNetBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == ".NET Blog"); - var vsBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == "Visual Studio Blog"); + var dotNetBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == ".NET Blog"); + var vsBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == "Visual Studio Blog"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -134,23 +135,23 @@ public static void Changing_relationships_using_foreign_key_values_1() context.ChangeTracker.DetectChanges(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } - public static void Fixup_for_added_or_deleted_entities_1() + public static async Task Fixup_for_added_or_deleted_entities_1() { Console.WriteLine($">>>> Sample: {nameof(Fixup_for_added_or_deleted_entities_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var dotNetBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == ".NET Blog"); - var vsBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == "Visual Studio Blog"); + var dotNetBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == ".NET Blog"); + var vsBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == "Visual Studio Blog"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -163,23 +164,23 @@ public static void Fixup_for_added_or_deleted_entities_1() context.ChangeTracker.DetectChanges(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } - public static void Fixup_for_added_or_deleted_entities_2() + public static async Task Fixup_for_added_or_deleted_entities_2() { Console.WriteLine($">>>> Sample: {nameof(Fixup_for_added_or_deleted_entities_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var dotNetBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == ".NET Blog"); - var vsBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == "Visual Studio Blog"); + var dotNetBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == ".NET Blog"); + var vsBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == "Visual Studio Blog"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -191,22 +192,22 @@ public static void Fixup_for_added_or_deleted_entities_2() context.ChangeTracker.DetectChanges(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } - public static void Fixup_for_added_or_deleted_entities_3() + public static async Task Fixup_for_added_or_deleted_entities_3() { Console.WriteLine($">>>> Sample: {nameof(Fixup_for_added_or_deleted_entities_3)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var dotNetBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == ".NET Blog"); + var dotNetBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == ".NET Blog"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -218,73 +219,73 @@ public static void Fixup_for_added_or_deleted_entities_3() context.ChangeTracker.DetectChanges(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } - public static void Fixup_for_added_or_deleted_entities_7() + public static async Task Fixup_for_added_or_deleted_entities_7() { Console.WriteLine($">>>> Sample: {nameof(Fixup_for_added_or_deleted_entities_7)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Fixup_for_added_or_deleted_entities_7 using var context = new BlogsContext(); - var dotNetBlog = context.Blogs.Include(e => e.Assets).Single(e => e.Name == ".NET Blog"); + var dotNetBlog = await context.Blogs.Include(e => e.Assets).SingleAsync(e => e.Name == ".NET Blog"); dotNetBlog.Assets = new BlogAssets(); context.ChangeTracker.DetectChanges(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Deleting_an_entity_1() + public static async Task Deleting_an_entity_1() { Console.WriteLine($">>>> Sample: {nameof(Deleting_an_entity_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Deleting_an_entity_1 using var context = new BlogsContext(); - var vsBlog = context.Blogs + var vsBlog = await context.Blogs .Include(e => e.Posts) .Include(e => e.Assets) - .Single(e => e.Name == "Visual Studio Blog"); + .SingleAsync(e => e.Name == "Visual Studio Blog"); context.Remove(vsBlog); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Many_to_many_relationships_6() + public static async Task Many_to_many_relationships_6() { Console.WriteLine($">>>> Sample: {nameof(Many_to_many_relationships_6)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Many_to_many_relationships_6 using var context = new BlogsContext(); - var post = context.Posts.Single(e => e.Id == 3); - var tag = context.Tags.Single(e => e.Id == 1); + var post = await context.Posts.SingleAsync(e => e.Id == 3); + var tag = await context.Tags.SingleAsync(e => e.Id == 1); post.Tags.Add(tag); @@ -298,15 +299,15 @@ public static void Many_to_many_relationships_6() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -352,7 +353,7 @@ public static void PopulateDatabase() new Tag { Text = "Visual Studio" }, new Tag { Text = "EF Core" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -425,4 +426,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder) { } -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/ChangingFKsAndNavigations/Program.cs b/samples/core/ChangeTracking/ChangingFKsAndNavigations/Program.cs index 2abbf78996..3974e2c204 100644 --- a/samples/core/ChangeTracking/ChangingFKsAndNavigations/Program.cs +++ b/samples/core/ChangeTracking/ChangingFKsAndNavigations/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using JoinEntity; using JoinEntityWithPayload; using JoinEntityWithSkips; @@ -8,39 +9,39 @@ public class Program { - public static void Main() + public static async Task Main() { Console.WriteLine("Samples for _Changing Foreign Keys and Navigations_"); Console.WriteLine(); - OptionalRelationshipsSamples.Relationship_fixup_1(); - OptionalRelationshipsSamples.Relationship_fixup_2(); + await OptionalRelationshipsSamples.Relationship_fixup_1(); + await OptionalRelationshipsSamples.Relationship_fixup_2(); - OptionalRelationshipsSamples.Changing_relationships_using_navigations_1(); - OptionalRelationshipsSamples.Changing_relationships_using_navigations_2(); + await OptionalRelationshipsSamples.Changing_relationships_using_navigations_1(); + await OptionalRelationshipsSamples.Changing_relationships_using_navigations_2(); - OptionalRelationshipsSamples.Changing_relationships_using_foreign_key_values_1(); + await OptionalRelationshipsSamples.Changing_relationships_using_foreign_key_values_1(); - OptionalRelationshipsSamples.Fixup_for_added_or_deleted_entities_1(); - OptionalRelationshipsSamples.Fixup_for_added_or_deleted_entities_2(); - OptionalRelationshipsSamples.Fixup_for_added_or_deleted_entities_3(); - RequiredRelationshipsSamples.Fixup_for_added_or_deleted_entities_4(); - RequiredRelationshipsSamples.Fixup_for_added_or_deleted_entities_5(); - RequiredRelationshipsSamples.Fixup_for_added_or_deleted_entities_6(); - OptionalRelationshipsSamples.Fixup_for_added_or_deleted_entities_7(); - RequiredRelationshipsSamples.Fixup_for_added_or_deleted_entities_8(); + await OptionalRelationshipsSamples.Fixup_for_added_or_deleted_entities_1(); + await OptionalRelationshipsSamples.Fixup_for_added_or_deleted_entities_2(); + await OptionalRelationshipsSamples.Fixup_for_added_or_deleted_entities_3(); + await RequiredRelationshipsSamples.Fixup_for_added_or_deleted_entities_4(); + await RequiredRelationshipsSamples.Fixup_for_added_or_deleted_entities_5(); + await RequiredRelationshipsSamples.Fixup_for_added_or_deleted_entities_6(); + await OptionalRelationshipsSamples.Fixup_for_added_or_deleted_entities_7(); + await RequiredRelationshipsSamples.Fixup_for_added_or_deleted_entities_8(); - OptionalRelationshipsSamples.Deleting_an_entity_1(); - RequiredRelationshipsSamples.Deleting_an_entity_2(); + await OptionalRelationshipsSamples.Deleting_an_entity_1(); + await RequiredRelationshipsSamples.Deleting_an_entity_2(); - ExplicitJoinEntitySamples.Many_to_many_relationships_1(); - ExplicitJoinEntitySamples.Many_to_many_relationships_2(); - ExplicitJoinEntityWithSkipsSamples.Many_to_many_relationships_3(); - ExplicitJoinEntityWithSkipsSamples.Many_to_many_relationships_4(); - ExplicitJoinEntityWithSkipsSamples.Many_to_many_relationships_5(); - OptionalRelationshipsSamples.Many_to_many_relationships_6(); - ExplicitJoinEntityWithPayloadSamples.Many_to_many_relationships_7(); - ExplicitJoinEntityWithStringPayloadSamples.Many_to_many_relationships_8(); - ExplicitJoinEntityWithStringPayloadSamples.Many_to_many_relationships_9(); + await ExplicitJoinEntitySamples.Many_to_many_relationships_1(); + await ExplicitJoinEntitySamples.Many_to_many_relationships_2(); + await ExplicitJoinEntityWithSkipsSamples.Many_to_many_relationships_3(); + await ExplicitJoinEntityWithSkipsSamples.Many_to_many_relationships_4(); + await ExplicitJoinEntityWithSkipsSamples.Many_to_many_relationships_5(); + await OptionalRelationshipsSamples.Many_to_many_relationships_6(); + await ExplicitJoinEntityWithPayloadSamples.Many_to_many_relationships_7(); + await ExplicitJoinEntityWithStringPayloadSamples.Many_to_many_relationships_8(); + await ExplicitJoinEntityWithStringPayloadSamples.Many_to_many_relationships_9(); } } diff --git a/samples/core/ChangeTracking/ChangingFKsAndNavigations/RequiredRelationshipsSamples.cs b/samples/core/ChangeTracking/ChangingFKsAndNavigations/RequiredRelationshipsSamples.cs index 66120dac59..37f9c86ffb 100644 --- a/samples/core/ChangeTracking/ChangingFKsAndNavigations/RequiredRelationshipsSamples.cs +++ b/samples/core/ChangeTracking/ChangingFKsAndNavigations/RequiredRelationshipsSamples.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -9,17 +10,17 @@ namespace Required; public class RequiredRelationshipsSamples { - public static void Fixup_for_added_or_deleted_entities_4() + public static async Task Fixup_for_added_or_deleted_entities_4() { Console.WriteLine($">>>> Sample: {nameof(Fixup_for_added_or_deleted_entities_4)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var dotNetBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == ".NET Blog"); + var dotNetBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == ".NET Blog"); Console.WriteLine(context.ChangeTracker.DebugView.LongView); @@ -31,23 +32,23 @@ public static void Fixup_for_added_or_deleted_entities_4() context.ChangeTracker.DetectChanges(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } - public static void Fixup_for_added_or_deleted_entities_5() + public static async Task Fixup_for_added_or_deleted_entities_5() { Console.WriteLine($">>>> Sample: {nameof(Fixup_for_added_or_deleted_entities_5)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var dotNetBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == ".NET Blog"); - var vsBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == "Visual Studio Blog"); + var dotNetBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == ".NET Blog"); + var vsBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == "Visual Studio Blog"); #region Fixup_for_added_or_deleted_entities_5 context.ChangeTracker.DeleteOrphansTiming = CascadeTiming.OnSaveChanges; @@ -63,33 +64,33 @@ public static void Fixup_for_added_or_deleted_entities_5() context.ChangeTracker.DetectChanges(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Fixup_for_added_or_deleted_entities_6() + public static async Task Fixup_for_added_or_deleted_entities_6() { Console.WriteLine($">>>> Sample: {nameof(Fixup_for_added_or_deleted_entities_6)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); try { #region Fixup_for_added_or_deleted_entities_6 - var dotNetBlog = context.Blogs.Include(e => e.Posts).Single(e => e.Name == ".NET Blog"); + var dotNetBlog = await context.Blogs.Include(e => e.Posts).SingleAsync(e => e.Name == ".NET Blog"); context.ChangeTracker.DeleteOrphansTiming = CascadeTiming.Never; var post = dotNetBlog.Posts.Single(e => e.Title == "Announcing F# 5"); dotNetBlog.Posts.Remove(post); - context.SaveChanges(); // Throws + await context.SaveChangesAsync(); // Throws #endregion } catch (Exception e) @@ -100,50 +101,50 @@ public static void Fixup_for_added_or_deleted_entities_6() Console.WriteLine(); } - public static void Fixup_for_added_or_deleted_entities_8() + public static async Task Fixup_for_added_or_deleted_entities_8() { Console.WriteLine($">>>> Sample: {nameof(Fixup_for_added_or_deleted_entities_8)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Fixup_for_added_or_deleted_entities_8 using var context = new BlogsContext(); - var dotNetBlog = context.Blogs.Include(e => e.Assets).Single(e => e.Name == ".NET Blog"); + var dotNetBlog = await context.Blogs.Include(e => e.Assets).SingleAsync(e => e.Name == ".NET Blog"); dotNetBlog.Assets = new BlogAssets(); context.ChangeTracker.DetectChanges(); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); } - public static void Deleting_an_entity_2() + public static async Task Deleting_an_entity_2() { Console.WriteLine($">>>> Sample: {nameof(Deleting_an_entity_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Deleting_an_entity_2 using var context = new BlogsContext(); - var vsBlog = context.Blogs + var vsBlog = await context.Blogs .Include(e => e.Posts) .Include(e => e.Assets) - .Single(e => e.Name == "Visual Studio Blog"); + .SingleAsync(e => e.Name == "Visual Studio Blog"); context.Remove(vsBlog); Console.WriteLine(context.ChangeTracker.DebugView.LongView); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); @@ -152,15 +153,15 @@ public static void Deleting_an_entity_2() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -206,7 +207,7 @@ public static void PopulateDatabase() new Tag { Text = "Visual Studio" }, new Tag { Text = "EF Core" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -279,4 +280,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder) { } -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/IdentityResolutionInEFCore/IdentityResolutionSamples.cs b/samples/core/ChangeTracking/IdentityResolutionInEFCore/IdentityResolutionSamples.cs index 284f21a328..2d4a85a7c3 100644 --- a/samples/core/ChangeTracking/IdentityResolutionInEFCore/IdentityResolutionSamples.cs +++ b/samples/core/ChangeTracking/IdentityResolutionInEFCore/IdentityResolutionSamples.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -9,18 +10,18 @@ namespace Updates; public static class IdentityResolutionSamples { - public static void Identity_Resolution_in_EF_Core_1() + public static async Task Identity_Resolution_in_EF_Core_1() { Console.WriteLine($">>>> Sample: {nameof(Identity_Resolution_in_EF_Core_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Identity_Resolution_in_EF_Core_1 using var context = new BlogsContext(); - var blogA = context.Blogs.Single(e => e.Id == 1); + var blogA = await context.Blogs.SingleAsync(e => e.Id == 1); var blogB = new Blog { Id = 1, Name = ".NET Blog (All new!)" }; try @@ -36,149 +37,149 @@ public static void Identity_Resolution_in_EF_Core_1() Console.WriteLine(); } - public static void Updating_an_entity_1() + public static async Task Updating_an_entity_1() { Console.WriteLine($">>>> Sample: {nameof(Updating_an_entity_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); - UpdateFromHttpPost1( + await UpdateFromHttpPost1( new Blog { Id = 1, Name = ".NET Blog (All new!)", Summary = "Posts about .NET" }); Console.WriteLine(); } #region Updating_an_entity_1 - public static void UpdateFromHttpPost1(Blog blog) + public static async Task UpdateFromHttpPost1(Blog blog) { using var context = new BlogsContext(); context.Update(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion - public static void Updating_an_entity_2() + public static async Task Updating_an_entity_2() { Console.WriteLine($">>>> Sample: {nameof(Updating_an_entity_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); - UpdateFromHttpPost2( + await UpdateFromHttpPost2( new Blog { Id = 1, Name = ".NET Blog (All new!)", Summary = "Posts about .NET" }); Console.WriteLine(); } #region Updating_an_entity_2 - public static void UpdateFromHttpPost2(Blog blog) + public static async Task UpdateFromHttpPost2(Blog blog) { using var context = new BlogsContext(); - var trackedBlog = context.Blogs.Find(blog.Id); + var trackedBlog = await context.Blogs.FindAsync(blog.Id); trackedBlog.Name = blog.Name; trackedBlog.Summary = blog.Summary; - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion - public static void Updating_an_entity_3() + public static async Task Updating_an_entity_3() { Console.WriteLine($">>>> Sample: {nameof(Updating_an_entity_3)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); - UpdateFromHttpPost3( + await UpdateFromHttpPost3( new Blog { Id = 1, Name = ".NET Blog (All new!)", Summary = "Posts about .NET" }); Console.WriteLine(); } #region Updating_an_entity_3 - public static void UpdateFromHttpPost3(Blog blog) + public static async Task UpdateFromHttpPost3(Blog blog) { using var context = new BlogsContext(); - var trackedBlog = context.Blogs.Find(blog.Id); + var trackedBlog = await context.Blogs.FindAsync(blog.Id); context.Entry(trackedBlog).CurrentValues.SetValues(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion - public static void Updating_an_entity_4() + public static async Task Updating_an_entity_4() { Console.WriteLine($">>>> Sample: {nameof(Updating_an_entity_4)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); - UpdateFromHttpPost4( + await UpdateFromHttpPost4( new BlogDto { Id = 1, Name = ".NET Blog (All new!)", Summary = "Posts about .NET" }); Console.WriteLine(); } #region Updating_an_entity_4 - public static void UpdateFromHttpPost4(BlogDto dto) + public static async Task UpdateFromHttpPost4(BlogDto dto) { using var context = new BlogsContext(); - var trackedBlog = context.Blogs.Find(dto.Id); + var trackedBlog = await context.Blogs.FindAsync(dto.Id); context.Entry(trackedBlog).CurrentValues.SetValues(dto); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion - public static void Updating_an_entity_5() + public static async Task Updating_an_entity_5() { Console.WriteLine($">>>> Sample: {nameof(Updating_an_entity_5)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); - UpdateFromHttpPost5( + await UpdateFromHttpPost5( new Dictionary { ["Id"] = 1, ["Name"] = ".NET Blog (All new!)", ["Summary"] = "Posts about .NET" }); Console.WriteLine(); } #region Updating_an_entity_5 - public static void UpdateFromHttpPost5(Dictionary propertyValues) + public static async Task UpdateFromHttpPost5(Dictionary propertyValues) { using var context = new BlogsContext(); - var trackedBlog = context.Blogs.Find(propertyValues["Id"]); + var trackedBlog = await context.Blogs.FindAsync(propertyValues["Id"]); context.Entry(trackedBlog).CurrentValues.SetValues(propertyValues); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion - public static void Updating_an_entity_6() + public static async Task Updating_an_entity_6() { Console.WriteLine($">>>> Sample: {nameof(Updating_an_entity_6)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); - UpdateFromHttpPost6( + await UpdateFromHttpPost6( new Blog { Id = 1, Name = ".NET Blog (All new!)", Summary = "Posts about .NET" }, new Dictionary { ["Id"] = 1, ["Name"] = ".NET Blog", ["Summary"] = "Posts about .NET" }); @@ -186,14 +187,14 @@ public static void Updating_an_entity_6() } #region Updating_an_entity_6 - public static void UpdateFromHttpPost6(Blog blog, Dictionary originalValues) + public static async Task UpdateFromHttpPost6(Blog blog, Dictionary originalValues) { using var context = new BlogsContext(); context.Attach(blog); context.Entry(blog).OriginalValues.SetValues(originalValues); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion @@ -221,15 +222,15 @@ public static void Failing_to_set_key_values_1() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -252,7 +253,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -328,4 +329,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder.LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }); } } -} \ No newline at end of file +} diff --git a/samples/core/ChangeTracking/IdentityResolutionInEFCore/Program.cs b/samples/core/ChangeTracking/IdentityResolutionInEFCore/Program.cs index 26ca274cba..c16dc0fe9c 100644 --- a/samples/core/ChangeTracking/IdentityResolutionInEFCore/Program.cs +++ b/samples/core/ChangeTracking/IdentityResolutionInEFCore/Program.cs @@ -1,27 +1,28 @@ using System; +using System.Threading.Tasks; using Graphs; using Updates; public class Program { - public static void Main() + public static async Task Main() { Console.WriteLine("Samples for _Identity Resolution in EF Core_"); Console.WriteLine(); - IdentityResolutionSamples.Identity_Resolution_in_EF_Core_1(); - IdentityResolutionSamples.Updating_an_entity_1(); - IdentityResolutionSamples.Updating_an_entity_2(); - IdentityResolutionSamples.Updating_an_entity_3(); - IdentityResolutionSamples.Updating_an_entity_4(); - IdentityResolutionSamples.Updating_an_entity_5(); - IdentityResolutionSamples.Updating_an_entity_6(); + await IdentityResolutionSamples.Identity_Resolution_in_EF_Core_1(); + await IdentityResolutionSamples.Updating_an_entity_1(); + await IdentityResolutionSamples.Updating_an_entity_2(); + await IdentityResolutionSamples.Updating_an_entity_3(); + await IdentityResolutionSamples.Updating_an_entity_4(); + await IdentityResolutionSamples.Updating_an_entity_5(); + await IdentityResolutionSamples.Updating_an_entity_6(); - SerializedGraphExamples.Attaching_a_serialized_graph_1(); - SerializedGraphExamples.Attaching_a_serialized_graph_2(); - SerializedGraphExamples.Attaching_a_serialized_graph_3(); - SerializedGraphExamples.Attaching_a_serialized_graph_4(); - SerializedGraphExamples.Attaching_a_serialized_graph_5(); + await SerializedGraphExamples.Attaching_a_serialized_graph_1(); + await SerializedGraphExamples.Attaching_a_serialized_graph_2(); + await SerializedGraphExamples.Attaching_a_serialized_graph_3(); + await SerializedGraphExamples.Attaching_a_serialized_graph_4(); + await SerializedGraphExamples.Attaching_a_serialized_graph_5(); IdentityResolutionSamples.Failing_to_set_key_values_1(); } diff --git a/samples/core/ChangeTracking/IdentityResolutionInEFCore/SerializedGraphExamples.cs b/samples/core/ChangeTracking/IdentityResolutionInEFCore/SerializedGraphExamples.cs index 1f030a4b22..6f4c2ce39c 100644 --- a/samples/core/ChangeTracking/IdentityResolutionInEFCore/SerializedGraphExamples.cs +++ b/samples/core/ChangeTracking/IdentityResolutionInEFCore/SerializedGraphExamples.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text.Json; using System.Text.Json.Serialization; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Newtonsoft.Json; @@ -12,18 +13,18 @@ namespace Graphs; public static class SerializedGraphExamples { - public static void Attaching_a_serialized_graph_1() + public static async Task Attaching_a_serialized_graph_1() { Console.WriteLine($">>>> Sample: {nameof(Attaching_a_serialized_graph_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Attaching_a_serialized_graph_1a using var context = new BlogsContext(); - var blogs = context.Blogs.Include(e => e.Posts).ToList(); + var blogs = await context.Blogs.Include(e => e.Posts).ToListAsync(); var serialized = JsonConvert.SerializeObject( blogs, @@ -32,11 +33,11 @@ public static void Attaching_a_serialized_graph_1() Console.WriteLine(serialized); #endregion - UpdateBlogsFromJson(serialized); + await UpdateBlogsFromJson(serialized); } #region Attaching_a_serialized_graph_1b - public static void UpdateBlogsFromJson(string json) + public static async Task UpdateBlogsFromJson(string json) { using var context = new BlogsContext(); @@ -47,22 +48,22 @@ public static void UpdateBlogsFromJson(string json) context.Update(blog); } - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion - public static void Attaching_a_serialized_graph_2() + public static async Task Attaching_a_serialized_graph_2() { Console.WriteLine($">>>> Sample: {nameof(Attaching_a_serialized_graph_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); #region Attaching_a_serialized_graph_2 using var context = new BlogsContext(); - var posts = context.Posts.Include(e => e.Blog).ToList(); + var posts = await context.Posts.Include(e => e.Blog).ToListAsync(); var serialized = JsonConvert.SerializeObject( posts, @@ -71,10 +72,10 @@ public static void Attaching_a_serialized_graph_2() Console.WriteLine(serialized); #endregion - UpdatePostsFromJsonBad(serialized); + await UpdatePostsFromJsonBad(serialized); } - public static void UpdatePostsFromJsonBad(string json) + public static async Task UpdatePostsFromJsonBad(string json) { using var context = new BlogsContext(); @@ -87,7 +88,7 @@ public static void UpdatePostsFromJsonBad(string json) context.Update(post); // Will throw } - context.SaveChanges(); + await context.SaveChangesAsync(); } catch (Exception e) { @@ -95,17 +96,17 @@ public static void UpdatePostsFromJsonBad(string json) } } - public static void Attaching_a_serialized_graph_3() + public static async Task Attaching_a_serialized_graph_3() { Console.WriteLine($">>>> Sample: {nameof(Attaching_a_serialized_graph_3)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var posts = context.Posts.Include(e => e.Blog).ToList(); + var posts = await context.Posts.Include(e => e.Blog).ToListAsync(); #region Attaching_a_serialized_graph_3 var serialized = JsonConvert.SerializeObject( @@ -118,10 +119,10 @@ public static void Attaching_a_serialized_graph_3() Console.WriteLine(serialized); - UpdatePostsFromJson(serialized); + await UpdatePostsFromJson(serialized); } - public static void UpdatePostsFromJson(string json) + public static async Task UpdatePostsFromJson(string json) { using var context = new BlogsContext(); @@ -132,20 +133,20 @@ public static void UpdatePostsFromJson(string json) context.Update(post); } - context.SaveChanges(); + await context.SaveChangesAsync(); } - public static void Attaching_a_serialized_graph_4() + public static async Task Attaching_a_serialized_graph_4() { Console.WriteLine($">>>> Sample: {nameof(Attaching_a_serialized_graph_4)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var posts = context.Posts.Include(e => e.Blog).ToList(); + var posts = await context.Posts.Include(e => e.Blog).ToListAsync(); #region Attaching_a_serialized_graph_4 var serialized = JsonSerializer.Serialize( @@ -154,20 +155,20 @@ public static void Attaching_a_serialized_graph_4() Console.WriteLine(serialized); - UpdatePostsFromJson(serialized); + await UpdatePostsFromJson(serialized); } - public static void Attaching_a_serialized_graph_5() + public static async Task Attaching_a_serialized_graph_5() { Console.WriteLine($">>>> Sample: {nameof(Attaching_a_serialized_graph_4)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BlogsContext(); - var posts = context.Posts.Include(e => e.Blog).ToList(); + var posts = await context.Posts.Include(e => e.Blog).ToListAsync(); var serialized = JsonConvert.SerializeObject( posts, @@ -175,13 +176,13 @@ public static void Attaching_a_serialized_graph_5() Console.WriteLine(serialized); - Console.WriteLine() - ; - UpdatePostsFromJsonWithIdentityResolution(serialized); + Console.WriteLine(); + + await UpdatePostsFromJsonWithIdentityResolution(serialized); } #region Attaching_a_serialized_graph_5 - public static void UpdatePostsFromJsonWithIdentityResolution(string json) + public static async Task UpdatePostsFromJsonWithIdentityResolution(string json) { using var context = new BlogsContext(); @@ -213,22 +214,22 @@ public static void UpdatePostsFromJsonWithIdentityResolution(string json) }); } - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion } public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BlogsContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BlogsContext(quiet: true); @@ -271,7 +272,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -317,4 +318,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder.LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }); } } -} \ No newline at end of file +} diff --git a/samples/core/Cosmos/Cosmos.csproj b/samples/core/Cosmos/Cosmos.csproj index 8539b9f9df..7ba28aaa96 100644 --- a/samples/core/Cosmos/Cosmos.csproj +++ b/samples/core/Cosmos/Cosmos.csproj @@ -2,11 +2,11 @@ Exe - net8.0 + net10.0 - + diff --git a/samples/core/Cosmos/ModelBuilding/TriggerSample.cs b/samples/core/Cosmos/ModelBuilding/TriggerSample.cs new file mode 100644 index 0000000000..68a75e5ae9 --- /dev/null +++ b/samples/core/Cosmos/ModelBuilding/TriggerSample.cs @@ -0,0 +1,73 @@ +using Microsoft.Azure.Cosmos.Scripts; +using Microsoft.EntityFrameworkCore; +using System.Threading.Tasks; + +namespace Cosmos.ModelBuilding; + +public static class TriggerSample +{ + public static async Task ConfigureTriggers() + { + var contextOptions = new DbContextOptionsBuilder() + .UseCosmos("https://localhost:8081/", "account-key", "sample"); + + using var context = new TriggerContext(contextOptions.Options); + + // Ensure database is created + await context.Database.EnsureCreatedAsync(); + + // Create a new product - this will trigger the PreInsertTrigger + var product = new Product + { + Id = 1, + Name = "Sample Product", + Price = 19.99m, + Category = "Electronics" + }; + + context.Products.Add(product); + await context.SaveChangesAsync(); + + // Update the product - this will trigger the UpdateTrigger + product.Price = 24.99m; + await context.SaveChangesAsync(); + + // Delete the product - this will trigger the PostDeleteTrigger + context.Products.Remove(product); + await context.SaveChangesAsync(); + } +} + +public class TriggerContext : DbContext +{ + public TriggerContext(DbContextOptions options) : base(options) { } + + public DbSet Products { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(entity => + { + entity.HasPartitionKey(p => p.Category); + + #region TriggerConfiguration + // Configure pre-trigger for create operations + entity.HasTrigger("PreInsertTrigger", TriggerType.Pre, TriggerOperation.Create); + + // Configure post-trigger for delete operations + entity.HasTrigger("PostDeleteTrigger", TriggerType.Post, TriggerOperation.Delete); + + // Configure trigger for replace operations + entity.HasTrigger("UpdateTrigger", TriggerType.Pre, TriggerOperation.Replace); + #endregion + }); + } +} + +public class Product +{ + public int Id { get; set; } + public string Name { get; set; } = null!; + public decimal Price { get; set; } + public string Category { get; set; } = null!; +} \ No newline at end of file diff --git a/samples/core/DbContextPooling/Program.cs b/samples/core/DbContextPooling/Program.cs index 78f14a0002..2ddc477c2f 100644 --- a/samples/core/DbContextPooling/Program.cs +++ b/samples/core/DbContextPooling/Program.cs @@ -38,7 +38,7 @@ public class BlogController public class Startup { private const string ConnectionString - = @"Server=(localdb)\mssqllocaldb;Database=Demo.ContextPooling;Trusted_Connection=True"; + = @"Server=(localdb)\mssqllocaldb;Database=Demo.ContextPooling;Trusted_Connection=True;ConnectRetryCount=0"; public void ConfigureServices(IServiceCollection services) { @@ -61,7 +61,7 @@ private static async Task Main() new Startup().ConfigureServices(serviceCollection); var serviceProvider = serviceCollection.BuildServiceProvider(); - SetupDatabase(serviceProvider); + await SetupDatabase(serviceProvider); var stopwatch = new Stopwatch(); @@ -75,16 +75,16 @@ await Task.WhenAll( await monitorTask; } - private static void SetupDatabase(IServiceProvider serviceProvider) + private static async Task SetupDatabase(IServiceProvider serviceProvider) { using var serviceScope = serviceProvider.CreateScope(); var context = serviceScope.ServiceProvider.GetService(); - if (context.Database.EnsureCreated()) + if (await context.Database.EnsureCreatedAsync()) { context.Blogs.Add(new Blog { Name = "The Dog Blog", Url = "http://sample.com/dogs" }); context.Blogs.Add(new Blog { Name = "The Cat Blog", Url = "http://sample.com/cats" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -136,4 +136,4 @@ private static async Task MonitorResults(TimeSpan duration, Stopwatch stopwatch) stopwatch.Stop(); } -} \ No newline at end of file +} diff --git a/samples/core/GetStarted/Program.cs b/samples/core/GetStarted/Program.cs index 9b1e5538b6..3ca7fcab95 100644 --- a/samples/core/GetStarted/Program.cs +++ b/samples/core/GetStarted/Program.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using Microsoft.EntityFrameworkCore; using var db = new BloggingContext(); @@ -9,22 +10,22 @@ // Create Console.WriteLine("Inserting a new blog"); db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" }); -db.SaveChanges(); +await db.SaveChangesAsync(); // Read Console.WriteLine("Querying for a blog"); -var blog = db.Blogs +var blog = await db.Blogs .OrderBy(b => b.BlogId) - .First(); + .FirstAsync(); // Update Console.WriteLine("Updating the blog and adding a post"); blog.Url = "https://devblogs.microsoft.com/dotnet"; blog.Posts.Add( new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" }); -db.SaveChanges(); +await db.SaveChangesAsync(); // Delete Console.WriteLine("Delete the blog"); db.Remove(blog); -db.SaveChanges(); \ No newline at end of file +await db.SaveChangesAsync(); diff --git a/samples/core/Intro/Model.cs b/samples/core/Intro/Model.cs index 5f912c47aa..00b0c9250a 100644 --- a/samples/core/Intro/Model.cs +++ b/samples/core/Intro/Model.cs @@ -11,7 +11,7 @@ public class BloggingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0"); } } @@ -31,4 +31,4 @@ public class Post public int BlogId { get; set; } public Blog Blog { get; set; } -} \ No newline at end of file +} diff --git a/samples/core/Intro/Program.cs b/samples/core/Intro/Program.cs index 5a6dc43e62..e4d95c825c 100644 --- a/samples/core/Intro/Program.cs +++ b/samples/core/Intro/Program.cs @@ -1,26 +1,27 @@ using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace Intro; internal class Program { - private static void Main() + private static async Task Main() { using (var db = new BloggingContext()) { // Remove these lines if you are running migrations from the command line - db.Database.EnsureDeleted(); - db.Database.Migrate(); + await db.Database.EnsureDeletedAsync(); + await db.Database.MigrateAsync(); } #region Querying using (var db = new BloggingContext()) { - var blogs = db.Blogs + var blogs = await db.Blogs .Where(b => b.Rating > 3) .OrderBy(b => b.Url) - .ToList(); + .ToListAsync(); } #endregion @@ -29,8 +30,8 @@ private static void Main() { var blog = new Blog { Url = "http://sample.com/" }; db.Blogs.Add(blog); - db.SaveChanges(); + await db.SaveChangesAsync(); } #endregion } -} \ No newline at end of file +} diff --git a/samples/core/Miscellaneous/Async/Program.cs b/samples/core/Miscellaneous/Async/Program.cs index 8f4d268453..5b6c5a847c 100644 --- a/samples/core/Miscellaneous/Async/Program.cs +++ b/samples/core/Miscellaneous/Async/Program.cs @@ -30,7 +30,7 @@ public class BloggingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { - optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFAsync;Trusted_Connection=True"); + optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFAsync;Trusted_Connection=True;ConnectRetryCount=0"); } } @@ -39,4 +39,4 @@ public class Blog public int BlogId { get; set; } public string Url { get; set; } public int Rating { get; set; } -} \ No newline at end of file +} diff --git a/samples/core/Miscellaneous/AsyncWithSystemInteractive/AsyncWithSystemInteractive.csproj b/samples/core/Miscellaneous/AsyncWithSystemInteractive/AsyncWithSystemInteractive.csproj deleted file mode 100644 index 7bf753d26b..0000000000 --- a/samples/core/Miscellaneous/AsyncWithSystemInteractive/AsyncWithSystemInteractive.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - Exe - net8.0 - EFAsyncWithSystemInteractive - EFAsyncWithSystemInteractive - - - - - - - - - diff --git a/samples/core/Miscellaneous/AsyncWithSystemInteractive/Program.cs b/samples/core/Miscellaneous/AsyncWithSystemInteractive/Program.cs deleted file mode 100644 index 5cac9008c0..0000000000 --- a/samples/core/Miscellaneous/AsyncWithSystemInteractive/Program.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Linq; -using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; - -namespace EFAsync; - -public class Program -{ - public static async Task Main(string[] args) - { - await using var context = new BloggingContext(); - await context.Database.EnsureDeletedAsync(); - await context.Database.EnsureCreatedAsync(); - - #region SystemInteractiveAsync - var groupedHighlyRatedBlogs = await context.Blogs - .AsQueryable() - .Where(b => b.Rating > 3) // server-evaluated - .AsAsyncEnumerable() - .GroupBy(b => b.Rating) // client-evaluated - .ToListAsync(); - #endregion - } -} - -public class BloggingContext : DbContext -{ - public DbSet Blogs { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFAsync;Trusted_Connection=True"); - } -} - -public class Blog -{ - public int BlogId { get; set; } - public string Url { get; set; } - public int Rating { get; set; } -} \ No newline at end of file diff --git a/samples/core/Miscellaneous/Collations/Program.cs b/samples/core/Miscellaneous/Collations/Program.cs index 04657c5023..098f18d1d8 100644 --- a/samples/core/Miscellaneous/Collations/Program.cs +++ b/samples/core/Miscellaneous/Collations/Program.cs @@ -1,24 +1,25 @@ using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFCollations; public class Program { - public static void Main(string[] args) + public static async Task Main(string[] args) { using (var db = new CustomerContext()) { - db.Database.EnsureDeleted(); - db.Database.EnsureCreated(); + await db.Database.EnsureDeletedAsync(); + await db.Database.EnsureCreatedAsync(); } using (var context = new CustomerContext()) { #region SimpleQueryCollation - var customers = context.Customers + var customers = await context.Customers .Where(c => EF.Functions.Collate(c.Name, "SQL_Latin1_General_CP1_CS_AS") == "John") - .ToList(); + .ToListAsync(); #endregion } } @@ -30,7 +31,7 @@ public class CustomerContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { - optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCollations;Trusted_Connection=True"); + optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCollations;Trusted_Connection=True;ConnectRetryCount=0"); } protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -50,4 +51,4 @@ public class Customer { public int Id { get; set; } public string Name { get; set; } -} \ No newline at end of file +} diff --git a/samples/core/Miscellaneous/CommandInterception/Program.cs b/samples/core/Miscellaneous/CommandInterception/Program.cs index 379eb8c822..0adff74e27 100644 --- a/samples/core/Miscellaneous/CommandInterception/Program.cs +++ b/samples/core/Miscellaneous/CommandInterception/Program.cs @@ -1,28 +1,29 @@ using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; public class Program { - public static void Main() + public static async Task Main() { using (var context = new TaggedQueryCommandInterceptorContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); context.AddRange( new Blog { Name = "Blog1" }, new Blog { Name = "Blog2" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new TaggedQueryCommandInterceptorContext()) { #region TaggedQuery - var blogs1 = context.Blogs.TagWith("Use hint: robust plan").ToList(); + var blogs1 = await context.Blogs.TagWith("Use hint: robust plan").ToListAsync(); #endregion - var blogs2 = context.Blogs.ToList(); + var blogs2 = await context.Blogs.ToListAsync(); } } } diff --git a/samples/core/Miscellaneous/CommandLine/CustomTools.cs b/samples/core/Miscellaneous/CommandLine/CustomTools.cs index d4e20448a1..8450b1c463 100644 --- a/samples/core/Miscellaneous/CommandLine/CustomTools.cs +++ b/samples/core/Miscellaneous/CommandLine/CustomTools.cs @@ -1,7 +1,11 @@ -using System.IO; +using System; +using System.IO; +using System.Reflection; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; +using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations.Design; +using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.DependencyInjection; namespace CommandLine; @@ -12,19 +16,27 @@ public static void AddMigration(string migrationName) { var projectDir = Directory.GetCurrentDirectory(); var rootNamespace = "ConsoleApp1"; - var outputDir = "Migraitons"; + var outputDir = "Migrations"; #region CustomTools - var db = new MyDbContext(); + using var db = new MyDbContext(); // Create design-time services var serviceCollection = new ServiceCollection(); - serviceCollection.AddEntityFrameworkDesignTimeServices(); serviceCollection.AddDbContextDesignTimeServices(db); + + var provider = db.GetService().Name; + var providerAssembly = Assembly.Load(new AssemblyName(provider)); + var providerServicesAttribute = providerAssembly.GetCustomAttribute(); + var designTimeServicesType = providerAssembly.GetType(providerServicesAttribute.TypeName, throwOnError: true); + ((IDesignTimeServices)Activator.CreateInstance(designTimeServicesType)!).ConfigureDesignTimeServices(serviceCollection); + + serviceCollection.AddEntityFrameworkDesignTimeServices(); + var serviceProvider = serviceCollection.BuildServiceProvider(); // Add a migration - var migrationsScaffolder = serviceProvider.GetService(); + var migrationsScaffolder = serviceProvider.GetRequiredService(); var migration = migrationsScaffolder.ScaffoldMigration(migrationName, rootNamespace); migrationsScaffolder.Save(projectDir, migration, outputDir); #endregion @@ -33,4 +45,16 @@ public static void AddMigration(string migrationName) internal class MyDbContext : DbContext { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseSqlite(@"Data Source=test.db"); + } + + public DbSet Blogs { get; set; } +} + +internal class Blog +{ + public int Id { get; set; } + public string Title { get; set; } } \ No newline at end of file diff --git a/samples/core/Miscellaneous/CommandLine/Properties/launchSettings.json b/samples/core/Miscellaneous/CommandLine/Properties/launchSettings.json new file mode 100644 index 0000000000..b26cc61c35 --- /dev/null +++ b/samples/core/Miscellaneous/CommandLine/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "CommandLine": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:58213;http://localhost:58218" + } + } +} \ No newline at end of file diff --git a/samples/core/Miscellaneous/CompiledModels/Program.cs b/samples/core/Miscellaneous/CompiledModels/Program.cs index 6f3e96d108..08a6c80975 100644 --- a/samples/core/Miscellaneous/CompiledModels/Program.cs +++ b/samples/core/Miscellaneous/CompiledModels/Program.cs @@ -1,17 +1,18 @@ using System; using System.Linq; +using System.Threading.Tasks; using BenchmarkDotNet.Running; using CompiledModelTest; public class Program { - public static void Main(string[] args) + public static async Task Main(string[] args) { - PrintSomeStuff(); + await PrintSomeStuff(); BenchmarkRunner.Run(); } - public static void PrintSomeStuff() + public static async Task PrintSomeStuff() { using var context = new BlogsContext(); var model = context.Model; @@ -21,7 +22,7 @@ public static void PrintSomeStuff() Console.WriteLine($" {model.GetEntityTypes().SelectMany(e => e.GetProperties()).Count()} properties"); Console.WriteLine($" {model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()).Count()} relationships"); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } } diff --git a/samples/core/Miscellaneous/CompiledModels/Test.cs b/samples/core/Miscellaneous/CompiledModels/Test.cs index a2ac2ba5b4..980c26c7d4 100644 --- a/samples/core/Miscellaneous/CompiledModels/Test.cs +++ b/samples/core/Miscellaneous/CompiledModels/Test.cs @@ -1,14 +1,16 @@ using System.Linq; +using System.Threading.Tasks; using BenchmarkDotNet.Attributes; using CompiledModelTest; +using Microsoft.EntityFrameworkCore; [SimpleJob(invocationCount: 1, targetCount: 50)] public class Test { [Benchmark] - public void TimeToFirstQuery() + public async Task TimeToFirstQuery() { using var context = new BlogsContext(); - var results = context.Set().ToList(); + var results = await context.Set().ToListAsync(); } } diff --git a/samples/core/Miscellaneous/CompiledModels/dotnet-tools.json b/samples/core/Miscellaneous/CompiledModels/dotnet-tools.json index 5be8f02ac2..e3cadb92fc 100644 --- a/samples/core/Miscellaneous/CompiledModels/dotnet-tools.json +++ b/samples/core/Miscellaneous/CompiledModels/dotnet-tools.json @@ -3,10 +3,10 @@ "isRoot": true, "tools": { "dotnet-ef": { - "version": "6.0.0-rc.1.21452.10", + "version": "8.0.0", "commands": [ "dotnet-ef" ] } } -} +} \ No newline at end of file diff --git a/samples/core/Miscellaneous/ConfiguringDbContext/AdditionalConfiguration/ApplicationDbContext.cs b/samples/core/Miscellaneous/ConfiguringDbContext/AdditionalConfiguration/ApplicationDbContext.cs index cac31036b8..52136616b7 100644 --- a/samples/core/Miscellaneous/ConfiguringDbContext/AdditionalConfiguration/ApplicationDbContext.cs +++ b/samples/core/Miscellaneous/ConfiguringDbContext/AdditionalConfiguration/ApplicationDbContext.cs @@ -9,7 +9,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Test"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Test;ConnectRetryCount=0"); } } -#endregion \ No newline at end of file +#endregion diff --git a/samples/core/Miscellaneous/ConfiguringDbContext/ConfiguringDbContext.csproj b/samples/core/Miscellaneous/ConfiguringDbContext/ConfiguringDbContext.csproj index fb34b81e0b..5c4f6ce07a 100644 --- a/samples/core/Miscellaneous/ConfiguringDbContext/ConfiguringDbContext.csproj +++ b/samples/core/Miscellaneous/ConfiguringDbContext/ConfiguringDbContext.csproj @@ -1,11 +1,15 @@ - + net8.0 + enable + + + diff --git a/samples/core/Miscellaneous/ConfiguringDbContext/Properties/launchSettings.json b/samples/core/Miscellaneous/ConfiguringDbContext/Properties/launchSettings.json new file mode 100644 index 0000000000..a2507be0b6 --- /dev/null +++ b/samples/core/Miscellaneous/ConfiguringDbContext/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "ConfiguringDbContext": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:58221;http://localhost:58223" + } + } +} \ No newline at end of file diff --git a/samples/core/Miscellaneous/ConfiguringDbContext/WebApp/Program.cs b/samples/core/Miscellaneous/ConfiguringDbContext/WebApp/Program.cs index 5b331a6ad7..3bad2b496f 100644 --- a/samples/core/Miscellaneous/ConfiguringDbContext/WebApp/Program.cs +++ b/samples/core/Miscellaneous/ConfiguringDbContext/WebApp/Program.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; -using WebApp; + +namespace WebApp; public class Program { diff --git a/samples/core/Miscellaneous/ConfiguringDbContext/WebApp/UseNewForWebApp.cs b/samples/core/Miscellaneous/ConfiguringDbContext/WebApp/UseNewForWebApp.cs index a106307a90..27a4aa1f3e 100644 --- a/samples/core/Miscellaneous/ConfiguringDbContext/WebApp/UseNewForWebApp.cs +++ b/samples/core/Miscellaneous/ConfiguringDbContext/WebApp/UseNewForWebApp.cs @@ -8,10 +8,10 @@ public static void Example() { #region UseNewForWebApp var contextOptions = new DbContextOptionsBuilder() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Test") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Test;ConnectRetryCount=0") .Options; using var context = new ApplicationDbContext(contextOptions); #endregion } -} \ No newline at end of file +} diff --git a/samples/core/Miscellaneous/ConfiguringDbContext/WebApp9/Program9.cs b/samples/core/Miscellaneous/ConfiguringDbContext/WebApp9/Program9.cs new file mode 100644 index 0000000000..d78296f09d --- /dev/null +++ b/samples/core/Miscellaneous/ConfiguringDbContext/WebApp9/Program9.cs @@ -0,0 +1,43 @@ +using Microsoft.AspNetCore.Identity; +using Microsoft.EntityFrameworkCore; +using WebApp; + +var builder = WebApplication.CreateBuilder(args); +// +var connectionString = + builder.Configuration.GetConnectionString("DefaultConnection") + ?? throw new InvalidOperationException("Connection string" + + "'DefaultConnection' not found."); + +builder.Services.AddDbContext(options => + options.UseSqlServer(connectionString)); +// + +builder.Services.AddDatabaseDeveloperPageExceptionFilter(); + +builder.Services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true) + .AddEntityFrameworkStores(); +builder.Services.AddRazorPages(); + +var app = builder.Build(); + +if (app.Environment.IsDevelopment()) +{ + app.UseMigrationsEndPoint(); +} +else +{ + app.UseExceptionHandler("/Error"); + app.UseHsts(); +} + +app.UseHttpsRedirection(); +app.UseStaticFiles(); + +app.UseRouting(); + +app.UseAuthorization(); + +app.MapRazorPages(); + +app.Run(); diff --git a/samples/core/Miscellaneous/ConfiguringDbContext/WithContextFactory/FactoryServicesExample.cs b/samples/core/Miscellaneous/ConfiguringDbContext/WithContextFactory/FactoryServicesExample.cs index f7222c3385..c31dcf6616 100644 --- a/samples/core/Miscellaneous/ConfiguringDbContext/WithContextFactory/FactoryServicesExample.cs +++ b/samples/core/Miscellaneous/ConfiguringDbContext/WithContextFactory/FactoryServicesExample.cs @@ -10,8 +10,8 @@ public class FactoryServicesExample public void ConfigureServices(IServiceCollection services) { services.AddDbContextFactory( - options => - options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Test")); + options => options.UseSqlServer( + @"Server=(localdb)\mssqllocaldb;Database=Test;ConnectRetryCount=0")); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Miscellaneous/ConfiguringDbContext/WithContextFactory/MyController.cs b/samples/core/Miscellaneous/ConfiguringDbContext/WithContextFactory/MyController.cs index 579091ae46..8734218872 100644 --- a/samples/core/Miscellaneous/ConfiguringDbContext/WithContextFactory/MyController.cs +++ b/samples/core/Miscellaneous/ConfiguringDbContext/WithContextFactory/MyController.cs @@ -3,6 +3,8 @@ namespace WithContextFactory; +#pragma warning disable CS1998 // This async method lacks 'await' operators and will run synchronously. + public class MyController { #region Construct @@ -15,7 +17,7 @@ public MyController(IDbContextFactory contextFactory) #endregion #region DoSomething - public void DoSomething() + public async Task DoSomething() { using (var context = _contextFactory.CreateDbContext()) { @@ -23,4 +25,4 @@ public void DoSomething() } } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Miscellaneous/ConfiguringDbContext/WithNew/ApplicationDbContext.cs b/samples/core/Miscellaneous/ConfiguringDbContext/WithNew/ApplicationDbContext.cs index 4c719ac005..29e3b9c2f5 100644 --- a/samples/core/Miscellaneous/ConfiguringDbContext/WithNew/ApplicationDbContext.cs +++ b/samples/core/Miscellaneous/ConfiguringDbContext/WithNew/ApplicationDbContext.cs @@ -7,7 +7,8 @@ public class ApplicationDbContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { - optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Test"); + optionsBuilder.UseSqlServer( + @"Server=(localdb)\mssqllocaldb;Database=Test;ConnectRetryCount=0"); } } -#endregion \ No newline at end of file +#endregion diff --git a/samples/core/Miscellaneous/ConnectionInterception/BlogsContext.cs b/samples/core/Miscellaneous/ConnectionInterception/BlogsContext.cs index a1f0650967..1fce0ff8a5 100644 --- a/samples/core/Miscellaneous/ConnectionInterception/BlogsContext.cs +++ b/samples/core/Miscellaneous/ConnectionInterception/BlogsContext.cs @@ -4,7 +4,7 @@ public class BlogsContext : DbContext { - private const string ConnectionString = @"Server=(localdb)\mssqllocaldb;Database=InterceptionTest;Trusted_Connection=True"; + private const string ConnectionString = @"Server=(localdb)\mssqllocaldb;Database=InterceptionTest;Trusted_Connection=True;ConnectRetryCount=0"; private static readonly AadAuthenticationInterceptor _interceptor = new AadAuthenticationInterceptor(); diff --git a/samples/core/Miscellaneous/ConnectionResiliency/Program.cs b/samples/core/Miscellaneous/ConnectionResiliency/Program.cs index de75f7fc6b..f56f9158a5 100644 --- a/samples/core/Miscellaneous/ConnectionResiliency/Program.cs +++ b/samples/core/Miscellaneous/ConnectionResiliency/Program.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Threading.Tasks; using System.Transactions; using Microsoft.EntityFrameworkCore; @@ -7,49 +8,49 @@ namespace EFConnectionResiliency; public class Program { - public static void Main(string[] args) + public static async Task Main(string[] args) { using (var db = new BloggingContext()) { - db.Database.EnsureDeleted(); - db.Database.EnsureCreated(); + await db.Database.EnsureDeletedAsync(); + await db.Database.EnsureCreatedAsync(); } - ExecuteWithManualTransaction(); + await ExecuteWithManualTransaction(); - ExecuteWithManualAmbientTransaction(); + await ExecuteWithManualAmbientTransaction(); - ExecuteInTransactionWithVerification(); + await ExecuteInTransactionWithVerification(); - ExecuteInTransactionWithTracking(); + await ExecuteInTransactionWithTracking(); } - private static void ExecuteWithManualTransaction() + private static async Task ExecuteWithManualTransaction() { #region ManualTransaction using var db = new BloggingContext(); var strategy = db.Database.CreateExecutionStrategy(); - strategy.Execute( - () => + await strategy.ExecuteAsync( + async () => { using var context = new BloggingContext(); - using var transaction = context.Database.BeginTransaction(); + await using var transaction = await context.Database.BeginTransactionAsync(); context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); - context.SaveChanges(); + await context.SaveChangesAsync(); context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/visualstudio" }); - context.SaveChanges(); + await context.SaveChangesAsync(); - transaction.Commit(); + await transaction.CommitAsync(); }); #endregion } - private static void ExecuteWithManualAmbientTransaction() + private static async Task ExecuteWithManualAmbientTransaction() { #region AmbientTransaction @@ -58,16 +59,16 @@ private static void ExecuteWithManualAmbientTransaction() var strategy = context1.Database.CreateExecutionStrategy(); - strategy.Execute( - () => + await strategy.ExecuteAsync( + async () => { using var context2 = new BloggingContext(); using var transaction = new TransactionScope(); context2.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); - context2.SaveChanges(); + await context2.SaveChangesAsync(); - context1.SaveChanges(); + await context1.SaveChangesAsync(); transaction.Complete(); }); @@ -75,7 +76,7 @@ private static void ExecuteWithManualAmbientTransaction() #endregion } - private static void ExecuteInTransactionWithVerification() + private static async Task ExecuteInTransactionWithVerification() { #region Verification @@ -85,17 +86,17 @@ private static void ExecuteInTransactionWithVerification() var blogToAdd = new Blog { Url = "http://blogs.msdn.com/dotnet" }; db.Blogs.Add(blogToAdd); - strategy.ExecuteInTransaction( + await strategy.ExecuteInTransactionAsync( db, - operation: context => { context.SaveChanges(acceptAllChangesOnSuccess: false); }, - verifySucceeded: context => context.Blogs.AsNoTracking().Any(b => b.BlogId == blogToAdd.BlogId)); + operation: (context, cancellationToken) => context.SaveChangesAsync(acceptAllChangesOnSuccess: false, cancellationToken), + verifySucceeded: (context, cancellationToken) => context.Blogs.AsNoTracking().AnyAsync(b => b.BlogId == blogToAdd.BlogId, cancellationToken)); db.ChangeTracker.AcceptAllChanges(); #endregion } - private static void ExecuteInTransactionWithTracking() + private static async Task ExecuteInTransactionWithTracking() { #region Tracking @@ -107,14 +108,14 @@ private static void ExecuteInTransactionWithTracking() var transaction = new TransactionRow { Id = Guid.NewGuid() }; db.Transactions.Add(transaction); - strategy.ExecuteInTransaction( + await strategy.ExecuteInTransactionAsync( db, - operation: context => { context.SaveChanges(acceptAllChangesOnSuccess: false); }, - verifySucceeded: context => context.Transactions.AsNoTracking().Any(t => t.Id == transaction.Id)); + operation: (context, cancellationToken) => context.SaveChangesAsync(acceptAllChangesOnSuccess: false, cancellationToken), + verifySucceeded: (context, cancellationToken) => context.Transactions.AsNoTracking().AnyAsync(t => t.Id == transaction.Id, cancellationToken)); db.ChangeTracker.AcceptAllChanges(); db.Transactions.Remove(transaction); - db.SaveChanges(); + await db.SaveChangesAsync(); #endregion } @@ -130,7 +131,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFMiscellanous.ConnectionResiliency;Trusted_Connection=True", + @"Server=(localdb)\mssqllocaldb;Database=EFMiscellanous.ConnectionResiliency;Trusted_Connection=True;ConnectRetryCount=0", options => options.EnableRetryOnFailure()); } #endregion diff --git a/samples/core/Miscellaneous/DiagnosticListeners/Program.cs b/samples/core/Miscellaneous/DiagnosticListeners/Program.cs index 1938fd312b..b61e0b113f 100644 --- a/samples/core/Miscellaneous/DiagnosticListeners/Program.cs +++ b/samples/core/Miscellaneous/DiagnosticListeners/Program.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -53,7 +54,7 @@ public void OnNext(KeyValuePair value) public class Program { #region Program - public static void Main() + public static async Task Main() { #region RegisterDiagnosticListener DiagnosticListener.AllListeners.Subscribe(new DiagnosticObserver()); @@ -61,24 +62,24 @@ public static void Main() using (var context = new BlogsContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); context.Add( new Blog { Name = "EF Blog", Posts = { new Post { Title = "EF Core 3.1!" }, new Post { Title = "EF Core 5.0!" } } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new BlogsContext()) { - var blog = context.Blogs.Include(e => e.Posts).Single(); + var blog = await context.Blogs.Include(e => e.Posts).SingleAsync(); blog.Name = "EF Core Blog"; context.Remove(blog.Posts.First()); blog.Posts.Add(new Post { Title = "EF Core 6.0!" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion } diff --git a/samples/core/Miscellaneous/Events/Program.cs b/samples/core/Miscellaneous/Events/Program.cs index c14a9bb0ce..2a34131c9f 100644 --- a/samples/core/Miscellaneous/Events/Program.cs +++ b/samples/core/Miscellaneous/Events/Program.cs @@ -2,18 +2,19 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; public class Program { - public static void Main() + public static async Task Main() { #region Demonstration using (var context = new BlogsContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); context.Add( new Blog @@ -23,18 +24,18 @@ public static void Main() Posts = { new Post { Id = 1, Title = "EF Core 3.1!" }, new Post { Id = 2, Title = "EF Core 5.0!" } } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new BlogsContext()) { - var blog = context.Blogs.Include(e => e.Posts).Single(); + var blog = await context.Blogs.Include(e => e.Posts).SingleAsync(); blog.Name = "EF Core Blog"; context.Remove(blog.Posts.First()); blog.Posts.Add(new Post { Id = 3, Title = "EF Core 6.0!" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion } diff --git a/samples/core/Miscellaneous/Logging/Logging/BloggingContext.cs b/samples/core/Miscellaneous/Logging/Logging/BloggingContext.cs index 216b54b04e..16283d63f9 100644 --- a/samples/core/Miscellaneous/Logging/Logging/BloggingContext.cs +++ b/samples/core/Miscellaneous/Logging/Logging/BloggingContext.cs @@ -17,7 +17,7 @@ public static readonly ILoggerFactory MyLoggerFactory protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .UseLoggerFactory(MyLoggerFactory) - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0"); #endregion } @@ -65,4 +65,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .ConfigureWarnings(b => b.Throw(RelationalEventId.QueryPossibleUnintendedUseOfEqualsWarning)); #endregion -} \ No newline at end of file +} diff --git a/samples/core/Miscellaneous/Logging/Logging/BloggingContextWithFiltering.cs b/samples/core/Miscellaneous/Logging/Logging/BloggingContextWithFiltering.cs index 2f5a7daf0b..164b647265 100644 --- a/samples/core/Miscellaneous/Logging/Logging/BloggingContextWithFiltering.cs +++ b/samples/core/Miscellaneous/Logging/Logging/BloggingContextWithFiltering.cs @@ -26,6 +26,6 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time .UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0"); #endregion -} \ No newline at end of file +} diff --git a/samples/core/Miscellaneous/Logging/Logging/Program.cs b/samples/core/Miscellaneous/Logging/Logging/Program.cs index 558099dd81..a1f0f238dc 100644 --- a/samples/core/Miscellaneous/Logging/Logging/Program.cs +++ b/samples/core/Miscellaneous/Logging/Logging/Program.cs @@ -1,16 +1,17 @@ using System; +using System.Threading.Tasks; namespace EFLogging; public class Program { - public static void Main() + public static async Task Main() { using (var db = new BloggingContext()) { - db.Database.EnsureCreated(); + await db.Database.EnsureCreatedAsync(); db.Blogs.Add(new Blog { Url = "http://sample.com/" }); - db.SaveChanges(); + await db.SaveChangesAsync(); } using (var db = new BloggingContext()) @@ -23,9 +24,9 @@ public static void Main() using (var db = new BloggingContextWithFiltering()) { - db.Database.EnsureCreated(); + await db.Database.EnsureCreatedAsync(); db.Blogs.Add(new Blog { Url = "http://sample.com/" }); - db.SaveChanges(); + await db.SaveChangesAsync(); } using (var db = new BloggingContextWithFiltering()) @@ -36,4 +37,4 @@ public static void Main() } } } -} \ No newline at end of file +} diff --git a/samples/core/Miscellaneous/Logging/SimpleLogging/Program.cs b/samples/core/Miscellaneous/Logging/SimpleLogging/Program.cs index 24b066adc0..8b919a71c8 100755 --- a/samples/core/Miscellaneous/Logging/SimpleLogging/Program.cs +++ b/samples/core/Miscellaneous/Logging/SimpleLogging/Program.cs @@ -8,43 +8,43 @@ public class Program { - public static void Main() + public static async Task Main() { - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestCode(); - TestDatabaseLog(); - - static void TestCode() + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestCode(); + await TestDatabaseLog(); + + static async Task TestCode() where TContext : BlogsContext, new() { using var context = new TContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - static void TestDatabaseLog() + static async Task TestDatabaseLog() { using var context = new DatabaseLogContext(); - context.Database.EnsureDeleted(); + await context.Database.EnsureDeletedAsync(); context.Log = Console.WriteLine; - context.Database.EnsureCreated(); + await context.Database.EnsureCreatedAsync(); } } } diff --git a/samples/core/Miscellaneous/Multitenancy/MultiDb/ContactContext.cs b/samples/core/Miscellaneous/Multitenancy/MultiDb/ContactContext.cs index 143a94918e..4613b0a6f0 100644 --- a/samples/core/Miscellaneous/Multitenancy/MultiDb/ContactContext.cs +++ b/samples/core/Miscellaneous/Multitenancy/MultiDb/ContactContext.cs @@ -16,13 +16,13 @@ public ContactContext( { _tenantService = service; _configuration = config; - } + } public DbSet Contacts { get; set; } = null!; - public void CheckAndSeed() + public async Task CheckAndSeed() { - if (Database.EnsureCreated()) + if (await Database.EnsureCreatedAsync()) { foreach (var contact in Contact.GeneratedContacts) { @@ -33,7 +33,7 @@ public void CheckAndSeed() } } - SaveChanges(); + await SaveChangesAsync(); } } diff --git a/samples/core/Miscellaneous/Multitenancy/MultiDb/Program.cs b/samples/core/Miscellaneous/Multitenancy/MultiDb/Program.cs index 0624d8c56c..2404cfad07 100644 --- a/samples/core/Miscellaneous/Multitenancy/MultiDb/Program.cs +++ b/samples/core/Miscellaneous/Multitenancy/MultiDb/Program.cs @@ -24,7 +24,7 @@ { tenantService.SetTenant(tenant); using var ctx = factory.CreateDbContext(); - ctx.CheckAndSeed(); + await ctx.CheckAndSeed(); } } diff --git a/samples/core/Miscellaneous/Multitenancy/MultiDb/Properties/launchSettings.json b/samples/core/Miscellaneous/Multitenancy/MultiDb/Properties/launchSettings.json new file mode 100644 index 0000000000..0ae2ccadcf --- /dev/null +++ b/samples/core/Miscellaneous/Multitenancy/MultiDb/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "MultiDb": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:58210;http://localhost:58219" + } + } +} \ No newline at end of file diff --git a/samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Data/ContactContext.cs b/samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Data/ContactContext.cs index f3441ab646..8765ad8806 100644 --- a/samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Data/ContactContext.cs +++ b/samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Data/ContactContext.cs @@ -1,5 +1,6 @@ using Common; using Microsoft.EntityFrameworkCore; +using System.Threading.Tasks; namespace SingleDbSingleTable.Data { @@ -14,9 +15,9 @@ public ContactContext( public DbSet Contacts { get; set; } = null!; - public void CheckAndSeed() + public async Task CheckAndSeedAsync() { - if (Database.EnsureCreated()) + if (await Database.EnsureCreatedAsync()) { foreach (var contact in Contact.GeneratedContacts) { @@ -24,7 +25,7 @@ public void CheckAndSeed() Contacts.Add(new MultitenantContact(contact, tenant)); } - SaveChanges(); + await SaveChangesAsync(); } } diff --git a/samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Program.cs b/samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Program.cs index 74ee6ffa03..ebcad63b98 100644 --- a/samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Program.cs +++ b/samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Program.cs @@ -17,7 +17,7 @@ // seed the database so demo is simple and doesn't require migrations using var ctx = app.Services.CreateScope().ServiceProvider.GetRequiredService(); -ctx.CheckAndSeed(); +await ctx.CheckAndSeedAsync(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) diff --git a/samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Properties/launchSettings.json b/samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Properties/launchSettings.json new file mode 100644 index 0000000000..d273faadba --- /dev/null +++ b/samples/core/Miscellaneous/Multitenancy/SingleDbSingleTable/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "SingleDbSingleTable": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:58209;http://localhost:58217" + } + } +} \ No newline at end of file diff --git a/samples/core/Miscellaneous/NewInEFCore6.Cosmos/.config/dotnet-tools.json b/samples/core/Miscellaneous/NewInEFCore6.Cosmos/.config/dotnet-tools.json index c85ec343f7..e3cadb92fc 100644 --- a/samples/core/Miscellaneous/NewInEFCore6.Cosmos/.config/dotnet-tools.json +++ b/samples/core/Miscellaneous/NewInEFCore6.Cosmos/.config/dotnet-tools.json @@ -1,9 +1,9 @@ -.{ +{ "version": 1, "isRoot": true, "tools": { "dotnet-ef": { - "version": "6.0.0-preview.6.21352.1", + "version": "8.0.0", "commands": [ "dotnet-ef" ] diff --git a/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosDiagnosticsSample.cs b/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosDiagnosticsSample.cs index c237fe17e3..3942e95ee8 100644 --- a/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosDiagnosticsSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosDiagnosticsSample.cs @@ -1,18 +1,18 @@ using System; using System.Collections.Generic; -using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class CosmosDiagnosticsSample { - public static void Cosmos_diagnostics() + public static async Task Cosmos_diagnostics() { Console.WriteLine($">>>> Sample: {nameof(Cosmos_diagnostics)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new ShapesContext(); @@ -30,7 +30,7 @@ public static void Cosmos_diagnostics() InsertedOn = DateTime.UtcNow }; context.Add(triangle); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); @@ -38,7 +38,7 @@ public static void Cosmos_diagnostics() Console.WriteLine(); #region QueryEvents - var equilateral = context.Triangles.Single(e => e.Name == "Equilateral"); + var equilateral = await context.Triangles.SingleAsync(e => e.Name == "Equilateral"); #endregion Console.WriteLine(); @@ -46,7 +46,7 @@ public static void Cosmos_diagnostics() Console.WriteLine(); #region FindEvents - var isosceles = context.Triangles.Find("Isosceles", "TrianglesPartition"); + var isosceles = await context.Triangles.FindAsync("Isosceles", "TrianglesPartition"); #endregion Console.WriteLine(); @@ -55,7 +55,7 @@ public static void Cosmos_diagnostics() #region UpdateEvents triangle.Angle2 = 89; - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); @@ -64,7 +64,7 @@ public static void Cosmos_diagnostics() #region DeleteEvents context.Remove(triangle); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); @@ -72,15 +72,15 @@ public static void Cosmos_diagnostics() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new ShapesContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new ShapesContext(quiet: true); @@ -94,7 +94,7 @@ public static void PopulateDatabase() }; context.AddRange(triangles); - context.SaveChanges(); + await context.SaveChangesAsync(); } } diff --git a/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosImplicitOwnershipSample.cs b/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosImplicitOwnershipSample.cs index 66e5ae80f1..54592e885c 100644 --- a/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosImplicitOwnershipSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosImplicitOwnershipSample.cs @@ -2,20 +2,21 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json.Serialization; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class CosmosImplicitOwnershipSample { - public static void Cosmos_models_use_implicit_ownership_by_default() + public static async Task Cosmos_models_use_implicit_ownership_by_default() { Console.WriteLine($">>>> Sample: {nameof(Cosmos_models_use_implicit_ownership_by_default)}"); Console.WriteLine(); using (var context = new FamilyContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); context.AddRange( new Family @@ -44,7 +45,7 @@ public static void Cosmos_models_use_implicit_ownership_by_default() LastName = "Wakefield", Parents = { - new() { FamilyName = "Wakefield", FirstName = "Robin" }, + new() { FamilyName = "Wakefield", FirstName = "Robin" }, new() { FamilyName = "Miller", FirstName = "Ben" } }, Children = @@ -69,14 +70,14 @@ public static void Cosmos_models_use_implicit_ownership_by_default() IsRegistered = true }); - context.SaveChanges(); + await context.SaveChangesAsync(); } Console.WriteLine(); using (var context = new FamilyContext()) { - var families = context.Families.ToList(); + var families = await context.Families.ToListAsync(); Console.WriteLine(); @@ -96,10 +97,10 @@ public class Family { [JsonPropertyName("id")] public string Id { get; set; } - + public string LastName { get; set; } public bool IsRegistered { get; set; } - + public Address Address { get; set; } public IList Parents { get; } = new List(); @@ -153,7 +154,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilder.Entity().HasPartitionKey(e => e.LastName); #endregion } - + // Never called; just for documentation. private void OldOnModelCreating(ModelBuilder modelBuilder) { @@ -167,7 +168,7 @@ private void OldOnModelCreating(ModelBuilder modelBuilder) .OwnsMany(c => c.Pets); modelBuilder.Entity() - .OwnsOne(f => f.Address); + .OwnsOne(f => f.Address); #endregion } diff --git a/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosPrimitiveTypesSample.cs b/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosPrimitiveTypesSample.cs index 6934aaebeb..9613eeb2ee 100644 --- a/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosPrimitiveTypesSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6.Cosmos/CosmosPrimitiveTypesSample.cs @@ -1,17 +1,18 @@ using System; using System.Collections.Generic; using System.Net.Http; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class CosmosPrimitiveTypesSample { - public static void Collections_and_dictionaries_of_primitive_types() + public static async Task Collections_and_dictionaries_of_primitive_types() { Console.WriteLine($">>>> Sample: {nameof(Collections_and_dictionaries_of_primitive_types)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); #region Insert using var context = new BooksContext(); @@ -35,14 +36,14 @@ public static void Collections_and_dictionaries_of_primitive_types() }; context.Add(book); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion #region Updates book.Quotes.Add("Pressing the emergency button lowered the rods again."); book.Notes["48"] = "Chiesa d'Oro"; - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); @@ -50,12 +51,12 @@ public static void Collections_and_dictionaries_of_primitive_types() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BooksContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } } diff --git a/samples/core/Miscellaneous/NewInEFCore6.Cosmos/Program.cs b/samples/core/Miscellaneous/NewInEFCore6.Cosmos/Program.cs index c914a3af48..a7fe86192e 100644 --- a/samples/core/Miscellaneous/NewInEFCore6.Cosmos/Program.cs +++ b/samples/core/Miscellaneous/NewInEFCore6.Cosmos/Program.cs @@ -5,12 +5,12 @@ public class Program public static async Task Main() { // Note: These samples requires the Cosmos DB emulator to be installed and running - CosmosPrimitiveTypesSample.Collections_and_dictionaries_of_primitive_types(); + await CosmosPrimitiveTypesSample.Collections_and_dictionaries_of_primitive_types(); await CosmosQueriesSample.Cosmos_queries(); - CosmosDiagnosticsSample.Cosmos_diagnostics(); + await CosmosDiagnosticsSample.Cosmos_diagnostics(); CosmosModelConfigurationSample.Cosmos_configure_time_to_live(); await CosmosModelConfigurationSample.Cosmos_configure_time_to_live_per_instance(); - CosmosImplicitOwnershipSample.Cosmos_models_use_implicit_ownership_by_default(); + await CosmosImplicitOwnershipSample.Cosmos_models_use_implicit_ownership_by_default(); CosmosMinimalApiSample.Add_a_DbContext_and_provider(); } } diff --git a/samples/core/Miscellaneous/NewInEFCore6/.config/dotnet-tools.json b/samples/core/Miscellaneous/NewInEFCore6/.config/dotnet-tools.json index ae6b953178..e3cadb92fc 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/.config/dotnet-tools.json +++ b/samples/core/Miscellaneous/NewInEFCore6/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "dotnet-ef": { - "version": "6.0.0-rc.1.21452.10", + "version": "8.0.0", "commands": [ "dotnet-ef" ] diff --git a/samples/core/Miscellaneous/NewInEFCore6/ArrayParametersSample.cs b/samples/core/Miscellaneous/NewInEFCore6/ArrayParametersSample.cs index 959883e652..e2e55ee04c 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/ArrayParametersSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/ArrayParametersSample.cs @@ -1,23 +1,24 @@ using System; using System.Data; +using System.Threading.Tasks; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class ArrayParametersSample { - public static void Array_parameters_are_logged_in_readable_form() + public static async Task Array_parameters_are_logged_in_readable_form() { Console.WriteLine($">>>> Sample: {nameof(Array_parameters_are_logged_in_readable_form)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using var context = new SomeDbContext(); try { - context.Database.ExecuteSqlRaw( + await context.Database.ExecuteSqlRawAsync( "SELECT * FROM Blogs WHERE Data = {0}", new SqlParameter { @@ -39,12 +40,12 @@ public static void Array_parameters_are_logged_in_readable_form() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new IsNullOrWhitespaceSample.BooksContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } } @@ -61,7 +62,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/BoolToStringTranslationSample.cs b/samples/core/Miscellaneous/NewInEFCore6/BoolToStringTranslationSample.cs index 889a3cf209..707257b5c6 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/BoolToStringTranslationSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/BoolToStringTranslationSample.cs @@ -1,21 +1,22 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class BoolToStringTranslationSample { - public static void Translate_bool_to_string_on_SQL_Server() + public static async Task Translate_bool_to_string_on_SQL_Server() { Console.WriteLine($">>>> Sample: {nameof(Translate_bool_to_string_on_SQL_Server)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new CustomersContext(); - var results1 = context.Customers.Select(c => new { c.Name, IsActive = c.IsActive.ToString() }).ToList(); + var results1 = await context.Customers.Select(c => new { c.Name, IsActive = c.IsActive.ToString() }).ToListAsync(); Console.WriteLine(); @@ -26,7 +27,7 @@ public static void Translate_bool_to_string_on_SQL_Server() Console.WriteLine(); - var results2 = context.Customers.Where(b => b.IsActive.ToString() == "true").ToList(); + var results2 = await context.Customers.Where(b => b.IsActive.ToString() == "true").ToListAsync(); Console.WriteLine(); @@ -40,15 +41,15 @@ public static void Translate_bool_to_string_on_SQL_Server() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new CustomersContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new CustomersContext(quiet: true); @@ -69,7 +70,7 @@ public static void PopulateDatabase() IsActive = true }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -95,7 +96,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/ColumnOrderSample.cs b/samples/core/Miscellaneous/NewInEFCore6/ColumnOrderSample.cs index 87c0814783..7cc616bde1 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/ColumnOrderSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/ColumnOrderSample.cs @@ -1,20 +1,21 @@ using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class ColumnOrderSample { - public static void Can_use_ColumnAttribute_to_set_column_order() + public static async Task Can_use_ColumnAttribute_to_set_column_order() { Console.WriteLine($">>>> Sample: {nameof(Can_use_ColumnAttribute_to_set_column_order)}"); Console.WriteLine(); using var context = new EmployeeContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); Console.WriteLine(); } @@ -153,7 +154,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/CommandSourceSample.cs b/samples/core/Miscellaneous/NewInEFCore6/CommandSourceSample.cs index af4c4a551a..bbc7b304a5 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/CommandSourceSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/CommandSourceSample.cs @@ -1,20 +1,21 @@ using System; using System.Data.Common; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class CommandSourceSample { - public static void Interceptors_get_the_source_of_the_command() + public static async Task Interceptors_get_the_source_of_the_command() { Console.WriteLine($">>>> Sample: {nameof(Interceptors_get_the_source_of_the_command)}"); Console.WriteLine(); using var context = new CustomersContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); context.Add( new Customer @@ -22,11 +23,11 @@ public static void Interceptors_get_the_source_of_the_command() Name = "Sam Vimes" }); - context.SaveChanges(); - + await context.SaveChangesAsync(); + context.ChangeTracker.Clear(); - var customers = context.Customers.ToList(); + var customers = await context.Customers.ToListAsync(); Console.WriteLine(); } @@ -64,7 +65,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder .EnableSensitiveDataLogging() .AddInterceptors(new CommandSourceInterceptor()) - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); } } } diff --git a/samples/core/Miscellaneous/NewInEFCore6/ContainsFreeTextSample.cs b/samples/core/Miscellaneous/NewInEFCore6/ContainsFreeTextSample.cs index a2f0c3df7b..2bebe40d74 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/ContainsFreeTextSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/ContainsFreeTextSample.cs @@ -1,24 +1,25 @@ using System; using System.Linq; using System.Text.Json; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class ContainsFreeTextSample { - public static void Contains_with_non_string() + public static async Task Contains_with_non_string() { Console.WriteLine($">>>> Sample: {nameof(Contains_with_non_string)}"); Console.WriteLine($">>>> Note: does not work with SQL Server LocalDb"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new CustomerContext(); #region Query - var result = context.Customers.Where(e => EF.Functions.Contains(e.Name, "Martin")).ToList(); + var result = await context.Customers.Where(e => EF.Functions.Contains(e.Name, "Martin")).ToListAsync(); #endregion Console.WriteLine(); @@ -26,19 +27,19 @@ public static void Contains_with_non_string() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new CustomerContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); - context.Database.ExecuteSqlRaw( + await context.Database.ExecuteSqlRawAsync( @"CREATE FULLTEXT CATALOG CustomersAndNames AS DEFAULT; CREATE FULLTEXT INDEX ON Customers (Name) KEY INDEX IX_Names;"); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new CustomerContext(quiet: true); @@ -78,7 +79,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -124,7 +125,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/ConvertNullsSample.cs b/samples/core/Miscellaneous/NewInEFCore6/ConvertNullsSample.cs index c889ed0d85..df8c33847f 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/ConvertNullsSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/ConvertNullsSample.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -9,12 +10,12 @@ public static class ConvertNullsSample { - public static void Value_converters_can_convert_nulls() + public static async Task Value_converters_can_convert_nulls() { Console.WriteLine($">>>> Sample: {nameof(Value_converters_can_convert_nulls)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using (var context = new CatsContext()) { @@ -24,7 +25,7 @@ public static void Value_converters_can_convert_nulls() new Cat { Name = "Clippy", Breed = Breed.Burmese }, new Cat { Name = "Sid", Breed = Breed.Tonkinese }); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); @@ -32,7 +33,7 @@ public static void Value_converters_can_convert_nulls() using (var context = new CatsContext()) { - var cats = context.Cats.ToList(); + var cats = await context.Cats.ToListAsync(); Console.WriteLine(); @@ -45,12 +46,12 @@ public static void Value_converters_can_convert_nulls() Console.WriteLine(); } - public static void Value_converters_can_convert_nulls_in_FKs() + public static async Task Value_converters_can_convert_nulls_in_FKs() { Console.WriteLine($">>>> Sample: {nameof(Value_converters_can_convert_nulls_in_FKs)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using (var context = new CarsContext()) { @@ -65,7 +66,7 @@ public static void Value_converters_can_convert_nulls_in_FKs() Model = "Kia Soul" }); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } @@ -73,7 +74,7 @@ public static void Value_converters_can_convert_nulls_in_FKs() using (var context = new CarsContext()) { // Not currently working - var cars = context.Cars.Where(e => e.OwnerId == null).ToList(); + var cars = await context.Cars.Where(e => e.OwnerId == null).ToListAsync(); Console.WriteLine(); @@ -88,18 +89,18 @@ public static void Value_converters_can_convert_nulls_in_FKs() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using (var context = new CarsContext(quiet: true)) { - context.Database.EnsureDeleted(); - context.Database.Migrate(); + await context.Database.EnsureDeletedAsync(); + await context.Database.MigrateAsync(); } using (var context = new CatsContext(quiet: true)) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } } } @@ -151,7 +152,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { @@ -214,7 +215,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/DbContextFactorySample.cs b/samples/core/Miscellaneous/NewInEFCore6/DbContextFactorySample.cs index 3f0b23bf7d..ea1b5229fb 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/DbContextFactorySample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/DbContextFactorySample.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; @@ -12,7 +13,7 @@ public static void Ignore_parameterless_constructor_when_creating_DbContext_from var services = new ServiceCollection() .AddDbContextFactory( - builder => builder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample")) + builder => builder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0")) .BuildServiceProvider(); var factory = services.GetService>(); @@ -32,7 +33,7 @@ public static void AddDbContextFactory_also_registers_scoped_DbContext_instance( #region Registration var container = services .AddDbContextFactory( - builder => builder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample")) + builder => builder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0")) .BuildServiceProvider(); #endregion @@ -67,9 +68,9 @@ public MyController1(SomeDbContext context) _context = context; } - public void DoSomething() + public async Task DoSomething() { - var results = _context.Blogs.ToList(); + var results = await _context.Blogs.ToListAsync(); // Injected context is disposed when the request scope is disposed } @@ -86,14 +87,14 @@ public MyController2(IDbContextFactory contextFactory) _contextFactory = contextFactory; } - public void DoSomething() + public async Task DoSomething() { using var context1 = _contextFactory.CreateDbContext(); using var context2 = _contextFactory.CreateDbContext(); - var results1 = context1.Blogs.ToList(); - var results2 = context2.Blogs.ToList(); - + var results1 = await context1.Blogs.ToListAsync(); + var results2 = await context2.Blogs.ToListAsync(); + // Contexts obtained from the factory must be explicitly disposed } } @@ -115,7 +116,7 @@ public SomeDbContext(DbContextOptions options) : base(options) { } - + public DbSet Blogs { get; set; } } #endregion diff --git a/samples/core/Miscellaneous/NewInEFCore6/EntityTypeConfigurationAttributeSample.cs b/samples/core/Miscellaneous/NewInEFCore6/EntityTypeConfigurationAttributeSample.cs index c0d1e6d30d..041f79840f 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/EntityTypeConfigurationAttributeSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/EntityTypeConfigurationAttributeSample.cs @@ -1,44 +1,45 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Metadata.Builders; public static class EntityTypeConfigurationAttributeSample { - public static void Using_EntityTypeConfigurationAttribute() + public static async Task Using_EntityTypeConfigurationAttribute() { Console.WriteLine($">>>> Sample: {nameof(Using_EntityTypeConfigurationAttribute)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BooksContext(); - var book = context.Books.Single(e => e.Id == 1); + var book = await context.Books.SingleAsync(e => e.Id == 1); Console.WriteLine(); } public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BooksContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BooksContext(); context.Add( new Book() { Isbn = "978-0-39-481823-8", Title = "What Do People Do All Day?" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -84,7 +85,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/GroupBySample.cs b/samples/core/Miscellaneous/NewInEFCore6/GroupBySample.cs index 8825686d6b..016264ded5 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/GroupBySample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/GroupBySample.cs @@ -1,31 +1,32 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class GroupBySample { - public static void Translate_GroupBy_followed_by_FirstOrDefault_over_group() + public static async Task Translate_GroupBy_followed_by_FirstOrDefault_over_group() { Console.WriteLine($">>>> Sample: {nameof(Translate_GroupBy_followed_by_FirstOrDefault_over_group)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); // Example 1. From #12088 using (var context = new ShoesContext()) { #region GroupBy1 - var people = context.People + var people = await context.People .Include(e => e.Shoes) .GroupBy(e => e.FirstName) .Select( g => g.OrderBy(e => e.FirstName) .ThenBy(e => e.LastName) .FirstOrDefault()) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); @@ -42,7 +43,7 @@ public static void Translate_GroupBy_followed_by_FirstOrDefault_over_group() using (var context = new ShoesContext()) { #region GroupBy2 - var group = context.People + var group = await context.People .Select( p => new { @@ -51,7 +52,7 @@ public static void Translate_GroupBy_followed_by_FirstOrDefault_over_group() }) .GroupBy(p => p.FirstName) .Select(g => g.First()) - .First(); + .FirstAsync(); #endregion Console.WriteLine(); @@ -63,12 +64,12 @@ public static void Translate_GroupBy_followed_by_FirstOrDefault_over_group() using (var context = new ShoesContext()) { #region GroupBy3 - var people = context.People + var people = await context.People .Where(e => e.MiddleInitial == "Q" && e.Age == 20) .GroupBy(e => e.LastName) .Select(g => g.First().LastName) .OrderBy(e => e.Length) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); @@ -85,7 +86,7 @@ public static void Translate_GroupBy_followed_by_FirstOrDefault_over_group() using (var context = new ShoesContext()) { #region GroupBy4 - var results = (from person in context.People + var results = await (from person in context.People join shoes in context.Shoes on person.Age equals shoes.Age group shoes by shoes.Style into people @@ -95,7 +96,7 @@ into people Style = people.Select(p => p.Style).FirstOrDefault(), Count = people.Count() }) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); @@ -112,11 +113,11 @@ into people using (var context = new ShoesContext()) { #region GroupBy5 - var results = context.People + var results = await context.People .GroupBy(e => e.FirstName) .Select(g => g.First().LastName) .OrderBy(e => e) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); @@ -133,11 +134,12 @@ into people using (var context = new ShoesContext()) { #region GroupBy6 - var results = context.People.Where(e => e.Age == 20) + var results = await context.People + .Where(e => e.Age == 20) .GroupBy(e => e.Id) .Select(g => g.First().MiddleInitial) .OrderBy(e => e) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); @@ -156,7 +158,7 @@ into people #region GroupBy7 var size = 11; var results - = context.People + = await context.People .Where( p => p.Feet.Size == size && p.MiddleInitial != null @@ -174,7 +176,7 @@ var results g.Key.Size, Min = g.Min(p => p.Feet.Size), }) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); @@ -191,7 +193,7 @@ var results using (var context = new ShoesContext()) { #region GroupBy8 - var result = context.People + var result = await context.People .Include(x => x.Shoes) .Include(x => x.Feet) .GroupBy( @@ -209,7 +211,7 @@ var results SumOver60 = x.Sum(el => el.Id) / (decimal)60, TotalCallOutCharges = x.Sum(el => el.Feet.Size == 11 ? 1 : 0) }) - .Count(); + .CountAsync(); #endregion Console.WriteLine(); @@ -221,14 +223,14 @@ var results using (var context = new ShoesContext()) { #region GroupBy9 - var results = context.People + var results = await context.People .GroupBy(n => n.FirstName) .Select(g => new { Feet = g.Key, Total = g.Sum(n => n.Feet.Size) }) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); @@ -280,7 +282,7 @@ in temp Console.WriteLine(); - foreach (var result in results) + await foreach (var result in results.AsAsyncEnumerable()) { Console.WriteLine($"{result.Id}: {result.Age} year old {result.Style}"); foreach (var value in result.Values) @@ -296,11 +298,11 @@ in temp using (var context = new ShoesContext()) { #region GroupBy11 - var grouping = context.People + var grouping = await context.People .GroupBy(i => i.LastName) .Select(g => new { LastName = g.Key, Count = g.Count() , First = g.FirstOrDefault(), Take = g.Take(2)}) .OrderByDescending(e => e.LastName) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); @@ -322,13 +324,13 @@ in temp using (var context = new ShoesContext()) { #region GroupBy12 - var grouping = context.People + var grouping = await context.People .Include(e => e.Shoes) .OrderBy(e => e.FirstName) .ThenBy(e => e.LastName) .GroupBy(e => e.FirstName) .Select(g => new { Name = g.Key, People = g.ToList()}) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); @@ -348,14 +350,14 @@ in temp using (var context = new ShoesContext()) { #region GroupBy13 - var grouping = context.People + var grouping = await context.People .GroupBy(m => new {m.FirstName, m.MiddleInitial }) .Select(am => new { Key = am.Key, Items = am.ToList() }) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); @@ -376,15 +378,15 @@ in temp public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new ShoesContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new ShoesContext(quiet: true); @@ -498,7 +500,7 @@ public static void PopulateDatabase() Shoes = { new() { Style = "Sneakers", Age = 20 }, new() { Style = "Dress", Age = 21 } } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -547,7 +549,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/HasConversionSample.cs b/samples/core/Miscellaneous/NewInEFCore6/HasConversionSample.cs index d674780a98..b8aa5881f1 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/HasConversionSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/HasConversionSample.cs @@ -1,32 +1,33 @@ using System; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; public static class HasConversionSample { - public static void Can_set_value_converter_type_using_generic_method() + public static async Task Can_set_value_converter_type_using_generic_method() { Console.WriteLine($">>>> Sample: {nameof(Can_set_value_converter_type_using_generic_method)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); Console.WriteLine(); } public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new CurrencyContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new CurrencyContext(); @@ -68,7 +69,7 @@ public static void PopulateDatabase() Currency = Currency.PoundsSterling }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -124,7 +125,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/InMemoryRequiredPropertiesSample.cs b/samples/core/Miscellaneous/NewInEFCore6/InMemoryRequiredPropertiesSample.cs index a5b54b720c..caf9a2d9e1 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/InMemoryRequiredPropertiesSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/InMemoryRequiredPropertiesSample.cs @@ -1,11 +1,12 @@ using System; using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class InMemoryRequiredPropertiesSample { - public static void Required_properties_validated_with_in_memory_database() + public static async Task Required_properties_validated_with_in_memory_database() { Console.WriteLine($">>>> Sample: {nameof(Required_properties_validated_with_in_memory_database)}"); Console.WriteLine(); @@ -16,7 +17,7 @@ public static void Required_properties_validated_with_in_memory_database() try { - context.SaveChanges(); + await context.SaveChangesAsync(); } catch (Exception e) { @@ -26,7 +27,7 @@ public static void Required_properties_validated_with_in_memory_database() Console.WriteLine(); } - public static void Required_property_validation_with_in_memory_database_can_be_disabled() + public static async Task Required_property_validation_with_in_memory_database_can_be_disabled() { Console.WriteLine($">>>> Sample: {nameof(Required_property_validation_with_in_memory_database_can_be_disabled)}"); Console.WriteLine(); @@ -35,7 +36,7 @@ public static void Required_property_validation_with_in_memory_database_can_be_d context.Add(new User()); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } diff --git a/samples/core/Miscellaneous/NewInEFCore6/IsNullOrWhitespaceSample.cs b/samples/core/Miscellaneous/NewInEFCore6/IsNullOrWhitespaceSample.cs index 28e65299fa..647d6a9907 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/IsNullOrWhitespaceSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/IsNullOrWhitespaceSample.cs @@ -1,24 +1,25 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class IsNullOrWhitespaceSample { - public static void Translate_IsNullOrWhitespace() + public static async Task Translate_IsNullOrWhitespace() { Console.WriteLine($">>>> Sample: {nameof(Translate_IsNullOrWhitespace)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BooksContext(); #region Query - var users = context.Users.Where( + var users = await context.Users.Where( e => string.IsNullOrWhiteSpace(e.FirstName) - || string.IsNullOrWhiteSpace(e.LastName)).ToList(); + || string.IsNullOrWhiteSpace(e.LastName)).ToListAsync(); #endregion foreach (var user in users) @@ -31,15 +32,15 @@ public static void Translate_IsNullOrWhitespace() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BooksContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BooksContext(quiet: true); @@ -69,7 +70,7 @@ public static void PopulateDatabase() LastName = "\t" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -98,7 +99,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/ManyToManyConfigurationSample.cs b/samples/core/Miscellaneous/NewInEFCore6/ManyToManyConfigurationSample.cs index d865977e40..4e27a760b8 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/ManyToManyConfigurationSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/ManyToManyConfigurationSample.cs @@ -1,25 +1,26 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class ManyToManyConfigurationSample { - public static void Many_to_many_relationships_may_need_less_configuration() + public static async Task Many_to_many_relationships_may_need_less_configuration() { Console.WriteLine($">>>> Sample: {nameof(Many_to_many_relationships_may_need_less_configuration)}"); Console.WriteLine(); - ManyToManyTest(); - ManyToManyTest(); - ManyToManyTest(); - ManyToManyTest(); - // ManyToManyTest(); - ManyToManyTest(); + await ManyToManyTest(); + await ManyToManyTest(); + await ManyToManyTest(); + await ManyToManyTest(); + // await ManyToManyTest(); + await ManyToManyTest(); } - public static void ManyToManyTest() + public static async Task ManyToManyTest() where TContext : BaseContext, new() { Console.WriteLine($"{typeof(TContext).Name}: "); @@ -27,13 +28,13 @@ public static void ManyToManyTest() using (var context = new TContext()) { - context.Database.EnsureDeleted(); + await context.Database.EnsureDeletedAsync(); Console.WriteLine(context.Model.ToDebugString()); Console.WriteLine(); - + context.Log = true; - context.Database.EnsureCreated(); + await context.Database.EnsureCreatedAsync(); context.Log = false; var cats = new List @@ -48,14 +49,14 @@ public static void ManyToManyTest() new() { Name = "Arthur", Cats = { cats[0], cats[1] } } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } - + Console.WriteLine(); using (var context = new TContext()) { - var cats = context.Cats.Include(e => e.Humans).ToList(); + var cats = await context.Cats.Include(e => e.Humans).ToListAsync(); foreach (var cat in cats) { Console.WriteLine($"{cat.Name} has {cat.Humans.Count} humans."); @@ -77,7 +78,7 @@ public class Human public string Name { get; set; } public ICollection Cats { get; } = new List(); } - + public class CatHuman { public int CatsId { get; set; } @@ -168,7 +169,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); optionsBuilder.LogTo( s => diff --git a/samples/core/Miscellaneous/NewInEFCore6/MathFTranslationSample.cs b/samples/core/Miscellaneous/NewInEFCore6/MathFTranslationSample.cs index d758826e78..64d32baadd 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/MathFTranslationSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/MathFTranslationSample.cs @@ -1,29 +1,30 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class MathFTranslationSample { - public static void Translate_MathF_methods() + public static async Task Translate_MathF_methods() { Console.WriteLine($">>>> Sample: {nameof(Translate_MathF_methods)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new CustomersContext(); // Fails; see #25421 - // var result = context.Reviews + // var result = await context.Reviews // .Select(e => new // { // e.Title, // Rating = MathF.Truncate(e.Rating) // }) // .OrderBy(e => e.Rating) - // .First(); + // .FirstAsync(); Console.WriteLine(); // Console.WriteLine($"Found {result.Title} with rating {result.Rating}."); @@ -32,15 +33,15 @@ public static void Translate_MathF_methods() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new CustomersContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new CustomersContext(quiet: true); @@ -64,7 +65,7 @@ public static void PopulateDatabase() Rating = 3.5f }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -91,7 +92,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/MinimalApiSample.cs b/samples/core/Miscellaneous/NewInEFCore6/MinimalApiSample.cs index 792de7a29e..8d6729ceee 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/MinimalApiSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/MinimalApiSample.cs @@ -7,10 +7,10 @@ public static class MinimalApiSample public static void Add_a_DbContext_and_provider() { Console.WriteLine($">>>> Sample: {nameof(Add_a_DbContext_and_provider)}"); - + SqliteMinimal(null); SqliteNormal(null); - + SqlServerMinimal(null); SqlServerNormal(null); } @@ -49,7 +49,7 @@ private static void SqlServerNormal(string[] args) var builder = WebApplication.CreateBuilder(args); builder.Services.AddDbContext( - options => options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=MyDatabase")); + options => options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=MyDatabase;ConnectRetryCount=0")); #endregion } diff --git a/samples/core/Miscellaneous/NewInEFCore6/OptionalDependentsSample.cs b/samples/core/Miscellaneous/NewInEFCore6/OptionalDependentsSample.cs index 17efe88e49..b9d9c92f2d 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/OptionalDependentsSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/OptionalDependentsSample.cs @@ -1,17 +1,18 @@ using System; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; public static class OptionalDependentsSample { - public static void Optional_dependents_with_a_required_property() + public static async Task Optional_dependents_with_a_required_property() { Console.WriteLine($">>>> Sample: {nameof(Optional_dependents_with_a_required_property)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using (var context = new SomeDbContext()) { @@ -35,13 +36,13 @@ public static void Optional_dependents_with_a_required_property() }); #endregion - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SomeDbContext()) { #region CheckForNullAddress - foreach (var customer in context.Customers1) + await foreach (var customer in context.Customers1.AsAsyncEnumerable()) { Console.Write(customer.Name); @@ -60,12 +61,12 @@ public static void Optional_dependents_with_a_required_property() Console.WriteLine(); } - public static void Optional_dependents_without_a_required_property() + public static async Task Optional_dependents_without_a_required_property() { Console.WriteLine($">>>> Sample: {nameof(Optional_dependents_without_a_required_property)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using (var context = new SomeDbContext()) { @@ -85,7 +86,7 @@ public static void Optional_dependents_without_a_required_property() #endregion - context.SaveChanges(); + await context.SaveChangesAsync(); } Console.WriteLine(); @@ -93,15 +94,15 @@ public static void Optional_dependents_without_a_required_property() using (var context = new SomeDbContext()) { var connection = context.Database.GetDbConnection(); - connection.Open(); + await connection.OpenAsync(); - using var command = connection.CreateCommand(); + await using var command = connection.CreateCommand(); command.CommandText = "SELECT Id, Name, Address_House, Address_Street, Address_City, Address_Postcode FROM Customers2"; Console.WriteLine($"Id Name House Street City Postcode"); - using var reader = command.ExecuteReader(); - while (reader.Read()) + await using var reader = await command.ExecuteReaderAsync(); + while (await reader.ReadAsync()) { Console.Write($"{reader.GetInt32(0)} {reader.GetString(1).PadRight(17)} "); for (int i = 2; i <= 5; i++) @@ -111,18 +112,18 @@ public static void Optional_dependents_without_a_required_property() Console.WriteLine(); } - connection.Close(); + await connection.CloseAsync(); } Console.WriteLine(); } - public static void Handling_optional_dependents_sharing_table_with_principal_1() + public static async Task Handling_optional_dependents_sharing_table_with_principal_1() { Console.WriteLine($">>>> Sample: {nameof(Handling_optional_dependents_sharing_table_with_principal_1)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using (var context = new SomeDbContext()) { @@ -134,12 +135,12 @@ public static void Handling_optional_dependents_sharing_table_with_principal_1() Console.WriteLine($" Dependent with only required properties is {(principal.DependentWithOnlyRequiredProperties != null ? "not " : "")}null."); Console.WriteLine($" Dependent with both optional and required properties is {(principal.DependentWithOptionalAndRequiredProperties != null ? "not " : "")}null."); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SomeDbContext()) { - var principal = context.PrincipalsWithOptionalDependents.Single(); + var principal = await context.PrincipalsWithOptionalDependents.SingleAsync(); Console.WriteLine("After querying back principal and dependents saved above:"); Console.WriteLine($" Dependent with only optional properties is {(principal.DependentWithOnlyOptionalProperties != null ? "not " : "")}null."); Console.WriteLine($" Dependent with only required properties is {(principal.DependentWithOnlyRequiredProperties != null ? "not " : "")}null."); @@ -149,12 +150,12 @@ public static void Handling_optional_dependents_sharing_table_with_principal_1() Console.WriteLine(); } - public static void Handling_optional_dependents_sharing_table_with_principal_2() + public static async Task Handling_optional_dependents_sharing_table_with_principal_2() { Console.WriteLine($">>>> Sample: {nameof(Handling_optional_dependents_sharing_table_with_principal_2)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using (var context = new SomeDbContext()) { @@ -175,13 +176,13 @@ public static void Handling_optional_dependents_sharing_table_with_principal_2() Console.WriteLine(); Console.WriteLine("SaveChanges will warn:"); Console.WriteLine(); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } using (var context = new SomeDbContext()) { - var principal = context.PrincipalsWithOptionalDependents.Single(); + var principal = await context.PrincipalsWithOptionalDependents.SingleAsync(); Console.WriteLine("After querying back principal and dependents saved above:"); Console.WriteLine($" Dependent with only optional properties is {(principal.DependentWithOnlyOptionalProperties != null ? "not " : "")}null. <-- Note dependent is null here."); Console.WriteLine($" Dependent with only required properties is {(principal.DependentWithOnlyRequiredProperties != null ? "not " : "")}null."); @@ -191,12 +192,12 @@ public static void Handling_optional_dependents_sharing_table_with_principal_2() Console.WriteLine(); } - public static void Handling_required_dependents_sharing_table_with_principal() + public static async Task Handling_required_dependents_sharing_table_with_principal() { Console.WriteLine($">>>> Sample: {nameof(Handling_required_dependents_sharing_table_with_principal)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using (var context = new SomeDbContext()) { @@ -213,12 +214,12 @@ public static void Handling_required_dependents_sharing_table_with_principal() Console.WriteLine($" Dependent with only required properties is {(principal.DependentWithOnlyRequiredProperties != null ? "not " : "")}null."); Console.WriteLine($" Dependent with both optional and required properties is {(principal.DependentWithOptionalAndRequiredProperties != null ? "not " : "")}null."); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SomeDbContext()) { - var principal = context.PrincipalsWithRequiredDependents.Single(); + var principal = await context.PrincipalsWithRequiredDependents.SingleAsync(); Console.WriteLine("After querying back principal and dependents saved above:"); Console.WriteLine($" Dependent with only optional properties is {(principal.DependentWithOnlyOptionalProperties != null ? "not " : "")}null."); Console.WriteLine($" Dependent with only required properties is {(principal.DependentWithOnlyRequiredProperties != null ? "not " : "")}null."); @@ -228,12 +229,12 @@ public static void Handling_required_dependents_sharing_table_with_principal() Console.WriteLine(); } - public static void Handling_nested_optional_dependents_sharing_table_with_principal() + public static async Task Handling_nested_optional_dependents_sharing_table_with_principal() { Console.WriteLine($">>>> Sample: {nameof(Handling_nested_optional_dependents_sharing_table_with_principal)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using (var context = new SomeDbContext()) { @@ -255,13 +256,13 @@ public static void Handling_nested_optional_dependents_sharing_table_with_princi Console.WriteLine(); Console.WriteLine("SaveChanges will warn:"); Console.WriteLine(); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); } using (var context = new SomeDbContext()) { - var principal = context.PrincipalsWithNestedOptionalDependents.Single(); + var principal = await context.PrincipalsWithNestedOptionalDependents.SingleAsync(); Console.WriteLine("After querying back principal and dependents saved above:"); Console.WriteLine($" Dependent with only optional properties is {(principal.DependentWithOptionalNestedDependents != null ? "not " : "")}null."); Console.WriteLine($" Nested dependent with only optional properties is {(principal.DependentWithOptionalNestedDependents?.Nested != null ? "not " : "")}null. <-- Note nested dependent is null here."); @@ -270,12 +271,12 @@ public static void Handling_nested_optional_dependents_sharing_table_with_princi Console.WriteLine(); } - public static void Handling_nested_required_dependents_sharing_table_with_principal() + public static async Task Handling_nested_required_dependents_sharing_table_with_principal() { Console.WriteLine($">>>> Sample: {nameof(Handling_nested_required_dependents_sharing_table_with_principal)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using (var context = new SomeDbContext()) { @@ -293,12 +294,12 @@ public static void Handling_nested_required_dependents_sharing_table_with_princi Console.WriteLine($" Dependent with only optional properties is {(principal.DependentWithRequiredNestedDependents != null ? "not " : "")}null."); Console.WriteLine($" Nested dependent with only optional properties is {(principal.DependentWithRequiredNestedDependents?.Nested != null ? "not " : "")}null."); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SomeDbContext()) { - var principal = context.PrincipalsWithNestedRequiredDependents.Single(); + var principal = await context.PrincipalsWithNestedRequiredDependents.SingleAsync(); Console.WriteLine("After querying back principal and dependents saved above:"); Console.WriteLine($" Dependent with only optional properties is {(principal.DependentWithRequiredNestedDependents != null ? "not " : "")}null."); Console.WriteLine($" Nested dependent with only optional properties is {(principal.DependentWithRequiredNestedDependents?.Nested != null ? "not " : "")}null."); @@ -309,12 +310,12 @@ public static void Handling_nested_required_dependents_sharing_table_with_princi public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new SomeDbContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } } @@ -580,7 +581,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/PreConventionModelConfigurationSample.cs b/samples/core/Miscellaneous/NewInEFCore6/PreConventionModelConfigurationSample.cs index 7cc8837703..20bde36622 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/PreConventionModelConfigurationSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/PreConventionModelConfigurationSample.cs @@ -2,19 +2,20 @@ using System.Collections.Generic; using System.Text.Json; using System.Text.Json.Serialization; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; public static class PreConventionModelConfigurationSample { - public static void Configure_property_types_and_value_converter_in_one_place() + public static async Task Configure_property_types_and_value_converter_in_one_place() { Console.WriteLine($">>>> Sample: {nameof(Configure_property_types_and_value_converter_in_one_place)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new CustomersContext(); @@ -23,15 +24,15 @@ public static void Configure_property_types_and_value_converter_in_one_place() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new CustomersContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new CustomersContext(quiet: true); @@ -69,7 +70,7 @@ public static void PopulateDatabase() Name = "Andrew", }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -144,7 +145,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); //if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/PrecisionAttributeSample.cs b/samples/core/Miscellaneous/NewInEFCore6/PrecisionAttributeSample.cs index 2d9e953987..e33b510d39 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/PrecisionAttributeSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/PrecisionAttributeSample.cs @@ -1,42 +1,43 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class PrecisionAttributeSample { - public static void Using_PrecisionAttribute() + public static async Task Using_PrecisionAttribute() { Console.WriteLine($">>>> Sample: {nameof(Using_PrecisionAttribute)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BooksContext(); - _ = context.Products.Single(e => e.Id == 1); + _ = await context.Products.SingleAsync(e => e.Id == 1); Console.WriteLine(); } public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BooksContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BooksContext(); context.Add(new Product { Price = 3.99m }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -65,7 +66,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/Program.cs b/samples/core/Miscellaneous/NewInEFCore6/Program.cs index 29d230a70f..baed816a8e 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/Program.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/Program.cs @@ -1,52 +1,54 @@ -public class Program +using System.Threading.Tasks; + +public class Program { - public static void Main() + public static async Task Main() { - EntityTypeConfigurationAttributeSample.Using_EntityTypeConfigurationAttribute(); - UnicodeAttributeSample.Using_UnicodeAttribute(); - PrecisionAttributeSample.Using_PrecisionAttribute(); - ToStringTranslationSample.Using_ToString_in_queries(); - RandomFunctionSample.Call_EF_Functions_Random(); - SparseColumnsSample.Use_sparse_columns(); - InMemoryRequiredPropertiesSample.Required_properties_validated_with_in_memory_database(); - InMemoryRequiredPropertiesSample.Required_property_validation_with_in_memory_database_can_be_disabled(); - IsNullOrWhitespaceSample.Translate_IsNullOrWhitespace(); - StringConcatSample.Concat_with_multiple_args(); - ArrayParametersSample.Array_parameters_are_logged_in_readable_form(); - TemporaryValuesSample.Explicit_temporary_values_can_be_stored_in_entity_instance_1(); - TemporaryValuesSample.Explicit_temporary_values_can_be_stored_in_entity_instance_2(); - TrailingUnderscoresSample.Backing_fields_with_trailing_underscores_are_matched(); - OptionalDependentsSample.Optional_dependents_with_a_required_property(); - OptionalDependentsSample.Optional_dependents_without_a_required_property(); - OptionalDependentsSample.Handling_optional_dependents_sharing_table_with_principal_1(); - OptionalDependentsSample.Handling_optional_dependents_sharing_table_with_principal_2(); - OptionalDependentsSample.Handling_required_dependents_sharing_table_with_principal(); - OptionalDependentsSample.Handling_nested_optional_dependents_sharing_table_with_principal(); - OptionalDependentsSample.Handling_nested_required_dependents_sharing_table_with_principal(); + await EntityTypeConfigurationAttributeSample.Using_EntityTypeConfigurationAttribute(); + await UnicodeAttributeSample.Using_UnicodeAttribute(); + await PrecisionAttributeSample.Using_PrecisionAttribute(); + await ToStringTranslationSample.Using_ToString_in_queries(); + await RandomFunctionSample.Call_EF_Functions_Random(); + await SparseColumnsSample.Use_sparse_columns(); + await InMemoryRequiredPropertiesSample.Required_properties_validated_with_in_memory_database(); + await InMemoryRequiredPropertiesSample.Required_property_validation_with_in_memory_database_can_be_disabled(); + await IsNullOrWhitespaceSample.Translate_IsNullOrWhitespace(); + await StringConcatSample.Concat_with_multiple_args(); + await ArrayParametersSample.Array_parameters_are_logged_in_readable_form(); + await TemporaryValuesSample.Explicit_temporary_values_can_be_stored_in_entity_instance_1(); + await TemporaryValuesSample.Explicit_temporary_values_can_be_stored_in_entity_instance_2(); + await TrailingUnderscoresSample.Backing_fields_with_trailing_underscores_are_matched(); + await OptionalDependentsSample.Optional_dependents_with_a_required_property(); + await OptionalDependentsSample.Optional_dependents_without_a_required_property(); + await OptionalDependentsSample.Handling_optional_dependents_sharing_table_with_principal_1(); + await OptionalDependentsSample.Handling_optional_dependents_sharing_table_with_principal_2(); + await OptionalDependentsSample.Handling_required_dependents_sharing_table_with_principal(); + await OptionalDependentsSample.Handling_nested_optional_dependents_sharing_table_with_principal(); + await OptionalDependentsSample.Handling_nested_required_dependents_sharing_table_with_principal(); PublicPooledDbContextFactorySample.Can_create_pooled_DbContext_factory(); DbContextFactorySample.Ignore_parameterless_constructor_when_creating_DbContext_from_factory(); DbContextFactorySample.AddDbContextFactory_also_registers_scoped_DbContext_instance(); - SplitQuerySample.Split_query_for_non_navigation_collections(); - SplitQuerySample.Last_column_in_ORDER_BY_removed_when_joining_for_collection(); - SubstringTranslationSample.Translate_Substring_with_single_parameter(); - BoolToStringTranslationSample.Translate_bool_to_string_on_SQL_Server(); - TagWithFileAndLineSample.Queries_can_be_tagged_with_filename_and_line_number(); - PreConventionModelConfigurationSample.Configure_property_types_and_value_converter_in_one_place(); - MathFTranslationSample.Translate_MathF_methods(); - TemporalTablesSample.Use_SQL_Server_temporal_tables(); - GroupBySample.Translate_GroupBy_followed_by_FirstOrDefault_over_group(); - HasConversionSample.Can_set_value_converter_type_using_generic_method(); + await SplitQuerySample.Split_query_for_non_navigation_collections(); + await SplitQuerySample.Last_column_in_ORDER_BY_removed_when_joining_for_collection(); + await SubstringTranslationSample.Translate_Substring_with_single_parameter(); + await BoolToStringTranslationSample.Translate_bool_to_string_on_SQL_Server(); + await TagWithFileAndLineSample.Queries_can_be_tagged_with_filename_and_line_number(); + await PreConventionModelConfigurationSample.Configure_property_types_and_value_converter_in_one_place(); + await MathFTranslationSample.Translate_MathF_methods(); + await TemporalTablesSample.Use_SQL_Server_temporal_tables(); + await GroupBySample.Translate_GroupBy_followed_by_FirstOrDefault_over_group(); + await HasConversionSample.Can_set_value_converter_type_using_generic_method(); MinimalApiSample.Add_a_DbContext_and_provider(); - ToInMemoryQuerySample.Can_query_keyless_types_from_in_memory_database(); - CommandSourceSample.Interceptors_get_the_source_of_the_command(); - ScaffoldingSample.Reverse_engineer_from_database(); - ManyToManyConfigurationSample.Many_to_many_relationships_may_need_less_configuration(); - ConvertNullsSample.Value_converters_can_convert_nulls(); - ColumnOrderSample.Can_use_ColumnAttribute_to_set_column_order(); + await ToInMemoryQuerySample.Can_query_keyless_types_from_in_memory_database(); + await CommandSourceSample.Interceptors_get_the_source_of_the_command(); + await ScaffoldingSample.Reverse_engineer_from_database(); + await ManyToManyConfigurationSample.Many_to_many_relationships_may_need_less_configuration(); + await ConvertNullsSample.Value_converters_can_convert_nulls(); + await ColumnOrderSample.Can_use_ColumnAttribute_to_set_column_order(); - SqliteSamples.SavepointsApi(); - SqliteSamples.ConnectionPooling(); - SqliteSamples.DateOnly_and_TimeOnly(); + await SqliteSamples.SavepointsApi(); + await SqliteSamples.ConnectionPooling(); + await SqliteSamples.DateOnly_and_TimeOnly(); // Note: this sample requires a full version of SQL Server. It does not work with LocalDb // ContainsFreeTextSample.Contains_with_non_string(); diff --git a/samples/core/Miscellaneous/NewInEFCore6/PublicPooledDbContextFactorySample.cs b/samples/core/Miscellaneous/NewInEFCore6/PublicPooledDbContextFactorySample.cs index 62ab79d87f..2ffad55c0f 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/PublicPooledDbContextFactorySample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/PublicPooledDbContextFactorySample.cs @@ -12,7 +12,7 @@ public static void Can_create_pooled_DbContext_factory() #region CreatePool var options = new DbContextOptionsBuilder() .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0") .Options; var factory = new PooledDbContextFactory(options); diff --git a/samples/core/Miscellaneous/NewInEFCore6/RandomFunctionSample.cs b/samples/core/Miscellaneous/NewInEFCore6/RandomFunctionSample.cs index 5720b7e4bf..4716ce75cd 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/RandomFunctionSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/RandomFunctionSample.cs @@ -1,22 +1,23 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class RandomFunctionSample { - public static void Call_EF_Functions_Random() + public static async Task Call_EF_Functions_Random() { Console.WriteLine($">>>> Sample: {nameof(Call_EF_Functions_Random)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BooksContext(); #region Query - var users = context.Users.Where(u => u.Popularity == (int)(EF.Functions.Random() * 4.0) + 1).ToList(); + var users = await context.Users.Where(u => u.Popularity == (int)(EF.Functions.Random() * 4.0) + 1).ToListAsync(); #endregion foreach (var user in users) @@ -29,15 +30,15 @@ public static void Call_EF_Functions_Random() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BooksContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BooksContext(quiet: true); @@ -51,7 +52,7 @@ public static void PopulateDatabase() new User { Popularity = 2, Username = "olive" }, new User { Popularity = 3, Username = "toast" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -79,7 +80,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/ScaffoldingSample.cs b/samples/core/Miscellaneous/NewInEFCore6/ScaffoldingSample.cs index 8a3f68a2d3..58f39d147a 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/ScaffoldingSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/ScaffoldingSample.cs @@ -1,22 +1,23 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; #nullable enable public static class ScaffoldingSample { - public static void Reverse_engineer_from_database() + public static async Task Reverse_engineer_from_database() { Console.WriteLine($">>>> Sample: {nameof(Reverse_engineer_from_database)}"); Console.WriteLine(); using var context = new BloggingWithNRTsContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - + // The code below was scaffolded from an existing database. // To replicate this, run this sample to create the database and then use the command line as documented in the text. diff --git a/samples/core/Miscellaneous/NewInEFCore6/SparseColumnsSample.cs b/samples/core/Miscellaneous/NewInEFCore6/SparseColumnsSample.cs index 31947e78ce..f99bf969c5 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/SparseColumnsSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/SparseColumnsSample.cs @@ -1,22 +1,23 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class SparseColumnsSample { - public static void Use_sparse_columns() + public static async Task Use_sparse_columns() { Console.WriteLine($">>>> Sample: {nameof(Use_sparse_columns)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BooksContext(); #region Query - _ = context.Users.ToList(); + _ = await context.Users.ToListAsync(); #endregion Console.WriteLine(); @@ -24,15 +25,15 @@ public static void Use_sparse_columns() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BooksContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BooksContext(); @@ -46,7 +47,7 @@ public static void PopulateDatabase() new ForumUser { Username = "olive" }, new ForumUser { Username = "toast" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -78,7 +79,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/SplitQuerySample.cs b/samples/core/Miscellaneous/NewInEFCore6/SplitQuerySample.cs index 2f8584379e..3acf64a32d 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/SplitQuerySample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/SplitQuerySample.cs @@ -1,18 +1,19 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class SplitQuerySample { - public static void Split_query_for_non_navigation_collections() + public static async Task Split_query_for_non_navigation_collections() { Console.WriteLine($">>>> Sample: {nameof(Split_query_for_non_navigation_collections)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new CustomersContext(); @@ -21,7 +22,7 @@ public static void Split_query_for_non_navigation_collections() Console.WriteLine("Executed as a single query:"); #region SplitQuery1 - context.Customers + await context.Customers .Select( c => new { @@ -29,12 +30,12 @@ public static void Split_query_for_non_navigation_collections() Orders = c.Orders .Where(o => o.Id > 1) }) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); Console.WriteLine("Executed as split queries:"); - context.Customers.AsSplitQuery().Select(c => new { c, Orders = c.Orders.Where(o => o.Id > 1) }).ToList(); + await context.Customers.AsSplitQuery().Select(c => new { c, Orders = c.Orders.Where(o => o.Id > 1) }).ToListAsync(); Console.WriteLine(); Console.WriteLine("LINQ query: 'context.Customers.Select(c => new { c, OrderDates = c.Orders.Where(o => o.Id > 1).Select(o => o.OrderDate) })'"); @@ -42,7 +43,7 @@ public static void Split_query_for_non_navigation_collections() Console.WriteLine("Executed as a single query:"); #region SplitQuery2 - context.Customers + await context.Customers .Select( c => new { @@ -51,12 +52,12 @@ public static void Split_query_for_non_navigation_collections() .Where(o => o.Id > 1) .Select(o => o.OrderDate) }) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); Console.WriteLine("Executed as split queries:"); - context.Customers.AsSplitQuery().Select(c => new { c, OrderDates = c.Orders.Where(o => o.Id > 1).Select(o => o.OrderDate) }).ToList(); + await context.Customers.AsSplitQuery().Select(c => new { c, OrderDates = c.Orders.Where(o => o.Id > 1).Select(o => o.OrderDate) }).ToListAsync(); Console.WriteLine(); Console.WriteLine("LINQ query: 'context.Customers.Select(c => new { c, OrderDates = c.Orders.Where(o => o.Id > 1).Select(o => o.OrderDate).Distinct() })'"); @@ -64,7 +65,7 @@ public static void Split_query_for_non_navigation_collections() Console.WriteLine("Executed as a single query:"); #region SplitQuery3 - context.Customers + await context.Customers .Select( c => new { @@ -74,35 +75,35 @@ public static void Split_query_for_non_navigation_collections() .Select(o => o.OrderDate) .Distinct() }) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); Console.WriteLine("Executed as split queries:"); - context.Customers.AsSplitQuery().Select(c => new { c, OrderDates = c.Orders.Where(o => o.Id > 1).Select(o => o.OrderDate).Distinct() }).ToList(); + await context.Customers.AsSplitQuery().Select(c => new { c, OrderDates = c.Orders.Where(o => o.Id > 1).Select(o => o.OrderDate).Distinct() }).ToListAsync(); Console.WriteLine(); } - public static void Last_column_in_ORDER_BY_removed_when_joining_for_collection() + public static async Task Last_column_in_ORDER_BY_removed_when_joining_for_collection() { Console.WriteLine($">>>> Sample: {nameof(Last_column_in_ORDER_BY_removed_when_joining_for_collection)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new CustomersContext(); #region OrderBy - context.Customers + await context.Customers .Select( e => new { e.Id, FirstOrder = e.Orders.Where(i => i.Id == 1).ToList() }) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); @@ -110,15 +111,15 @@ public static void Last_column_in_ORDER_BY_removed_when_joining_for_collection() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new CustomersContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new CustomersContext(quiet: true); @@ -142,7 +143,7 @@ public static void PopulateDatabase() } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -176,7 +177,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/SqliteSamples.cs b/samples/core/Miscellaneous/NewInEFCore6/SqliteSamples.cs index 228062f305..cf37803dea 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/SqliteSamples.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/SqliteSamples.cs @@ -1,57 +1,58 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class SqliteSamples { - public static void SavepointsApi() + public static async Task SavepointsApi() { Console.WriteLine($">>>> Sample: {nameof(SavepointsApi)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); Console.WriteLine("Before update:"); using (var context = new UsersContext()) { - foreach (var user in context.Users) + await foreach (var user in context.Users.AsAsyncEnumerable()) { Console.WriteLine($" Found '{user.Username}'"); } } - PerformUpdates(); + await PerformUpdates(); Console.WriteLine(); Console.WriteLine("After update:"); using (var context = new UsersContext()) { - foreach (var user in context.Users) + await foreach (var user in context.Users.AsAsyncEnumerable()) { Console.WriteLine($" Found '{user.Username}'"); } } } - public static void DateOnly_and_TimeOnly() + public static async Task DateOnly_and_TimeOnly() { Console.WriteLine($">>>> Sample: {nameof(DateOnly_and_TimeOnly)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new UsersContext(); #region DateOnlyQuery - var users = context.Users.Where(u => u.Birthday < new DateOnly(1900, 1, 1)).ToList(); + var users = await context.Users.Where(u => u.Birthday < new DateOnly(1900, 1, 1)).ToListAsync(); #endregion - + Console.WriteLine(); foreach (var user in users) @@ -59,47 +60,47 @@ public static void DateOnly_and_TimeOnly() Console.WriteLine($" Found '{user.Username}'"); user.Birthday = new(user.Birthday.Year + 100, user.Birthday.Month, user.Birthday.Day); } - + Console.WriteLine(); - context.SaveChanges(); + await context.SaveChangesAsync(); } - private static void PerformUpdates() + private static async Task PerformUpdates() { #region PerformUpdates using var connection = new SqliteConnection("Command Timeout=60;DataSource=test.db"); - connection.Open(); + await connection.OpenAsync(); - using var transaction = connection.BeginTransaction(); + await using var transaction = await connection.BeginTransactionAsync(); using (var command = connection.CreateCommand()) { command.CommandText = @"UPDATE Users SET Username = 'ajcvickers' WHERE Id = 1"; - command.ExecuteNonQuery(); + await command.ExecuteNonQueryAsync(); } - transaction.Save("MySavepoint"); + await transaction.SaveAsync("MySavepoint"); using (var command = connection.CreateCommand()) { command.CommandText = @"UPDATE Users SET Username = 'wfvickers' WHERE Id = 2"; - command.ExecuteNonQuery(); + await command.ExecuteNonQueryAsync(); } - transaction.Rollback("MySavepoint"); + await transaction.RollbackAsync("MySavepoint"); - transaction.Commit(); + await transaction.CommitAsync(); #endregion } - public static void ConnectionPooling() + public static async Task ConnectionPooling() { Console.WriteLine($">>>> Sample: {nameof(ConnectionPooling)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using (var context = new UsersContext(quiet: false, connectionEvents: true)) { @@ -107,7 +108,7 @@ public static void ConnectionPooling() Console.WriteLine("Starting query..."); Console.WriteLine(); - var users = context.Users.ToList(); + var users = await context.Users.ToListAsync(); Console.WriteLine(); Console.WriteLine("Query finished."); @@ -122,7 +123,7 @@ public static void ConnectionPooling() Console.WriteLine("Starting SaveChanges..."); Console.WriteLine(); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); Console.WriteLine("SaveChanges finished."); @@ -136,42 +137,42 @@ public static void ConnectionPooling() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new UsersContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new UsersContext(quiet: true); context.AddRange( new User { - Username = "arthur", + Username = "arthur", Birthday = new(1869, 9, 3), - TokensRenewed = new(16, 30) + TokensRenewed = new(16, 30) }, new User { Username = "wendy", Birthday = new(1873, 8, 3), - TokensRenewed = new(9, 25) + TokensRenewed = new(9, 25) }, new User { Username = "microsoft", Birthday = new(1975, 4, 4), - TokensRenewed = new(0, 0) + TokensRenewed = new(0, 0) }); - context.SaveChanges(); + await context.SaveChangesAsync(); context.ChangeTracker.Entries().First().Entity.Username = "ajcvickers"; - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -180,7 +181,7 @@ public class User { public int Id { get; set; } public string Username { get; set; } - + public DateOnly Birthday { get; set; } public TimeOnly TokensRenewed { get; set; } } diff --git a/samples/core/Miscellaneous/NewInEFCore6/StringConcatSample.cs b/samples/core/Miscellaneous/NewInEFCore6/StringConcatSample.cs index 0997acd2fa..aef1a414cb 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/StringConcatSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/StringConcatSample.cs @@ -1,24 +1,25 @@ using System; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class StringConcatSample { - public static void Concat_with_multiple_args() + public static async Task Concat_with_multiple_args() { Console.WriteLine($">>>> Sample: {nameof(Concat_with_multiple_args)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BooksContext(); #region StringConcat - var shards = context.Shards - .Where(e => string.Concat(e.Token1, e.Token2, e.Token3) != e.TokensProcessed).ToList(); + var shards = await context.Shards + .Where(e => string.Concat(e.Token1, e.Token2, e.Token3) != e.TokensProcessed).ToListAsync(); #endregion foreach (var shard in shards) @@ -31,15 +32,15 @@ public static void Concat_with_multiple_args() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BooksContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BooksContext(quiet: true); @@ -79,7 +80,7 @@ public static void PopulateDatabase() TokensProcessed = "JAM" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -116,7 +117,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/SubstringTranslationSample.cs b/samples/core/Miscellaneous/NewInEFCore6/SubstringTranslationSample.cs index 00d3fbe39b..b8aadeb298 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/SubstringTranslationSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/SubstringTranslationSample.cs @@ -1,24 +1,25 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class SubstringTranslationSample { - public static void Translate_Substring_with_single_parameter() + public static async Task Translate_Substring_with_single_parameter() { Console.WriteLine($">>>> Sample: {nameof(Translate_Substring_with_single_parameter)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new CustomersContext(); #region Substring - var result = context.Customers + var result = await context.Customers .Select(a => new { Name = a.Name.Substring(3) }) - .FirstOrDefault(a => a.Name == "hur"); + .FirstOrDefaultAsync(a => a.Name == "hur"); #endregion Console.WriteLine(); @@ -28,15 +29,15 @@ public static void Translate_Substring_with_single_parameter() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new CustomersContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new CustomersContext(quiet: true); @@ -54,7 +55,7 @@ public static void PopulateDatabase() Name = "Andrew" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -79,7 +80,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/TagWithFileAndLineSample.cs b/samples/core/Miscellaneous/NewInEFCore6/TagWithFileAndLineSample.cs index e2a0e4ea38..4ea6644323 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/TagWithFileAndLineSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/TagWithFileAndLineSample.cs @@ -1,51 +1,52 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class TagWithFileAndLineSample { - public static void Queries_can_be_tagged_with_filename_and_line_number() + public static async Task Queries_can_be_tagged_with_filename_and_line_number() { Console.WriteLine($">>>> Sample: {nameof(Queries_can_be_tagged_with_filename_and_line_number)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new CustomersContext(); #region TagWithCallSite - var results1 = context + var results1 = await context .Customers .TagWithCallSite() .Where(c => c.Name.StartsWith("A")) - .ToList(); + .ToListAsync(); #endregion Console.WriteLine(); - var results2 = context + var results2 = await context .Customers .OrderBy(c => c.Name) .TagWith("Ordering query") .TagWithCallSite() - .ToList(); + .ToListAsync(); Console.WriteLine(); } public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new CustomersContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new CustomersContext(quiet: true); @@ -63,7 +64,7 @@ public static void PopulateDatabase() Name = "Andrew", }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -88,7 +89,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/TemporalTablesSample.cs b/samples/core/Miscellaneous/NewInEFCore6/TemporalTablesSample.cs index cb531ffdfa..fcaf5f9362 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/TemporalTablesSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/TemporalTablesSample.cs @@ -1,17 +1,18 @@ using System; using System.Linq; using System.Threading; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class TemporalTablesSample { - public static void Use_SQL_Server_temporal_tables() + public static async Task Use_SQL_Server_temporal_tables() { Console.WriteLine($">>>> Sample: {nameof(Use_SQL_Server_temporal_tables)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); DateTime timeStamp1; DateTime timeStamp2; @@ -47,7 +48,7 @@ public static void Use_SQL_Server_temporal_tables() AnnualSalary = 30.0m }); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion } @@ -56,7 +57,7 @@ public static void Use_SQL_Server_temporal_tables() Console.WriteLine(); Console.WriteLine("Starting data:"); - var employees = context.Employees.ToList(); + var employees = await context.Employees.ToListAsync(); foreach (var employee in employees) { var employeeEntry = context.Entry(employee); @@ -76,23 +77,23 @@ public static void Use_SQL_Server_temporal_tables() timeStamp1 = DateTime.UtcNow; Thread.Sleep(millisecondsDelay); - var employee = context.Employees.Single(e => e.Name == "Rainbow Dash"); + var employee = await context.Employees.SingleAsync(e => e.Name == "Rainbow Dash"); employee.Position = "Wonderbolt Trainee"; - context.SaveChanges(); + await context.SaveChangesAsync(); Thread.Sleep(millisecondsDelay); timeStamp2 = DateTime.UtcNow; Thread.Sleep(millisecondsDelay); employee.Position = "Wonderbolt Reservist"; - context.SaveChanges(); + await context.SaveChangesAsync(); Thread.Sleep(millisecondsDelay); timeStamp3 = DateTime.UtcNow; Thread.Sleep(millisecondsDelay); employee.Position = "Wonderbolt"; - context.SaveChanges(); + await context.SaveChangesAsync(); Thread.Sleep(millisecondsDelay); timeStamp4 = DateTime.UtcNow; @@ -102,9 +103,9 @@ public static void Use_SQL_Server_temporal_tables() using (var context = new EmployeeContext(quiet: true)) { #region NormalQuery - var employee = context.Employees.Single(e => e.Name == "Rainbow Dash"); + var employee = await context.Employees.SingleAsync(e => e.Name == "Rainbow Dash"); context.Remove(employee); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion } @@ -114,7 +115,7 @@ public static void Use_SQL_Server_temporal_tables() Console.WriteLine("After updates and delete:"); #region TrackingQuery - var employees = context.Employees.ToList(); + var employees = await context.Employees.ToListAsync(); foreach (var employee in employees) { var employeeEntry = context.Entry(employee); @@ -129,7 +130,7 @@ public static void Use_SQL_Server_temporal_tables() Console.WriteLine("Historical data for Rainbow Dash:"); #region TemporalAll - var history = context + var history = await context .Employees .TemporalAll() .Where(e => e.Name == "Rainbow Dash") @@ -141,7 +142,7 @@ public static void Use_SQL_Server_temporal_tables() ValidFrom = EF.Property(e, "ValidFrom"), ValidTo = EF.Property(e, "ValidTo") }) - .ToList(); + .ToListAsync(); foreach (var pointInTime in history) { @@ -157,7 +158,7 @@ public static void Use_SQL_Server_temporal_tables() Console.WriteLine($"Historical data for Rainbow Dash between {timeStamp2} and {timeStamp3}:"); #region TemporalBetween - var history = context + var history = await context .Employees .TemporalBetween(timeStamp2, timeStamp3) .Where(e => e.Name == "Rainbow Dash") @@ -169,7 +170,7 @@ public static void Use_SQL_Server_temporal_tables() ValidFrom = EF.Property(e, "ValidFrom"), ValidTo = EF.Property(e, "ValidTo") }) - .ToList(); + .ToListAsync(); #endregion foreach (var pointInTime in history) @@ -184,7 +185,7 @@ public static void Use_SQL_Server_temporal_tables() Console.WriteLine(); Console.WriteLine($"Historical data for Rainbow Dash as of {timeStamp2}:"); - var history = context + var history = await context .Employees .TemporalAsOf(timeStamp2) .Where(e => e.Name == "Rainbow Dash") @@ -196,7 +197,7 @@ public static void Use_SQL_Server_temporal_tables() ValidFrom = EF.Property(e, "ValidFrom"), ValidTo = EF.Property(e, "ValidTo") }) - .ToList(); + .ToListAsync(); foreach (var pointInTime in history) { @@ -211,19 +212,19 @@ public static void Use_SQL_Server_temporal_tables() Console.WriteLine($"Restoring Rainbow Dash from {timeStamp2}..."); #region RestoreData - var employee = context + var employee = await context .Employees .TemporalAsOf(timeStamp2) - .Single(e => e.Name == "Rainbow Dash"); + .SingleAsync(e => e.Name == "Rainbow Dash"); context.Add(employee); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion Console.WriteLine(); Console.WriteLine($"Historical data for Rainbow Dash between:"); - var history = context + var history = await context .Employees .TemporalAll() .Where(e => e.Name == "Rainbow Dash") @@ -235,7 +236,7 @@ public static void Use_SQL_Server_temporal_tables() ValidFrom = EF.Property(e, "ValidFrom"), ValidTo = EF.Property(e, "ValidTo") }) - .ToList(); + .ToListAsync(); foreach (var pointInTime in history) { @@ -249,16 +250,16 @@ public static void Use_SQL_Server_temporal_tables() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using (var context = new EmployeeContext(quiet: true)) { - context.Database.EnsureDeleted(); + await context.Database.EnsureDeletedAsync(); } using (var context = new EmployeeContext()) { - context.Database.EnsureCreated(); + await context.Database.EnsureCreatedAsync(); } } } @@ -290,7 +291,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/TemporaryValuesSample.cs b/samples/core/Miscellaneous/NewInEFCore6/TemporaryValuesSample.cs index d59bd7e204..d64e42180d 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/TemporaryValuesSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/TemporaryValuesSample.cs @@ -1,16 +1,17 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; public static class TemporaryValuesSample { - public static void Explicit_temporary_values_can_be_stored_in_entity_instance_1() + public static async Task Explicit_temporary_values_can_be_stored_in_entity_instance_1() { Console.WriteLine($">>>> Sample: {nameof(Explicit_temporary_values_can_be_stored_in_entity_instance_1)}"); Console.WriteLine(">>>> Shows using explicit temporary values with FK values to relate posts to a blog."); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using var context = new SomeDbContext(); @@ -30,7 +31,7 @@ public static void Explicit_temporary_values_can_be_stored_in_entity_instance_1( Console.WriteLine(); Console.WriteLine("SavingChanges..."); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); Console.WriteLine($"Blog has ID = {blog.Id}"); @@ -40,13 +41,13 @@ public static void Explicit_temporary_values_can_be_stored_in_entity_instance_1( Console.WriteLine(); } - public static void Explicit_temporary_values_can_be_stored_in_entity_instance_2() + public static async Task Explicit_temporary_values_can_be_stored_in_entity_instance_2() { Console.WriteLine($">>>> Sample: {nameof(Explicit_temporary_values_can_be_stored_in_entity_instance_2)}"); Console.WriteLine(">>>> Shows taking generated temporary values and setting them into entity instances."); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using var context = new SomeDbContext(); @@ -87,7 +88,7 @@ public static void Explicit_temporary_values_can_be_stored_in_entity_instance_2( Console.WriteLine(); Console.WriteLine("SavingChanges..."); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); Console.WriteLine($"Blog has ID = {blog.Id}"); @@ -99,12 +100,12 @@ public static void Explicit_temporary_values_can_be_stored_in_entity_instance_2( public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new SomeDbContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } } @@ -140,7 +141,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/ToInMemoryQuerySample.cs b/samples/core/Miscellaneous/NewInEFCore6/ToInMemoryQuerySample.cs index 4ae762f70f..83311eff9d 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/ToInMemoryQuerySample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/ToInMemoryQuerySample.cs @@ -1,20 +1,21 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; public static class ToInMemoryQuerySample { - public static void Can_query_keyless_types_from_in_memory_database() + public static async Task Can_query_keyless_types_from_in_memory_database() { Console.WriteLine($">>>> Sample: {nameof(Can_query_keyless_types_from_in_memory_database)}"); Console.WriteLine(); - Helpers.PopulateDatabase(); + await Helpers.PopulateDatabase(); using var context = new CustomerContext(); #region Query - var results = context.CustomerDensities.ToList(); + var results = await context.CustomerDensities.ToListAsync(); #endregion foreach (var customerDensity in results) @@ -27,7 +28,7 @@ public static void Can_query_keyless_types_from_in_memory_database() public static class Helpers { - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new CustomerContext(); @@ -109,7 +110,7 @@ public static void PopulateDatabase() Postcode = "MK3 2ND", } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -120,7 +121,7 @@ public class CustomerDensity public int CustomerCount { get; set; } } #endregion - + #region EntityTypes public class Customer { diff --git a/samples/core/Miscellaneous/NewInEFCore6/ToStringTranslationSample.cs b/samples/core/Miscellaneous/NewInEFCore6/ToStringTranslationSample.cs index a6c55ee0a1..bdc513cf97 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/ToStringTranslationSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/ToStringTranslationSample.cs @@ -1,22 +1,23 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class ToStringTranslationSample { - public static void Using_ToString_in_queries() + public static async Task Using_ToString_in_queries() { Console.WriteLine($">>>> Sample: {nameof(Using_ToString_in_queries)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BooksContext(); #region Query - var users = context.Users.Where(u => EF.Functions.Like(u.PhoneNumber.ToString(), "%555%")).ToList(); + var users = await context.Users.Where(u => EF.Functions.Like(u.PhoneNumber.ToString(), "%555%")).ToListAsync(); #endregion foreach (var user in users) @@ -29,15 +30,15 @@ public static void Using_ToString_in_queries() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BooksContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BooksContext(quiet: true); @@ -46,7 +47,7 @@ public static void PopulateDatabase() new User { PhoneNumber = 5155552234, Username = "wendy" }, new User { PhoneNumber = 18005525123, Username = "microsoft" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } diff --git a/samples/core/Miscellaneous/NewInEFCore6/TrailingUnderscoresSample.cs b/samples/core/Miscellaneous/NewInEFCore6/TrailingUnderscoresSample.cs index 6ab07bc8d7..13f3520cb8 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/TrailingUnderscoresSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/TrailingUnderscoresSample.cs @@ -1,14 +1,15 @@ using System; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; public static class TrailingUnderscoresSample { - public static void Backing_fields_with_trailing_underscores_are_matched() + public static async Task Backing_fields_with_trailing_underscores_are_matched() { Console.WriteLine($">>>> Sample: {nameof(Backing_fields_with_trailing_underscores_are_matched)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); + await Helpers.RecreateCleanDatabase(); using var context = new SomeDbContext(); @@ -25,12 +26,12 @@ public static void Backing_fields_with_trailing_underscores_are_matched() public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new SomeDbContext(quiet: true); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } } @@ -74,7 +75,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore6/UnicodeAttributeSample.cs b/samples/core/Miscellaneous/NewInEFCore6/UnicodeAttributeSample.cs index 41658176fd..273ec9c6fe 100644 --- a/samples/core/Miscellaneous/NewInEFCore6/UnicodeAttributeSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore6/UnicodeAttributeSample.cs @@ -1,44 +1,45 @@ using System; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public static class UnicodeAttributeSample { - public static void Using_UnicodeAttribute() + public static async Task Using_UnicodeAttribute() { Console.WriteLine($">>>> Sample: {nameof(Using_UnicodeAttribute)}"); Console.WriteLine(); - Helpers.RecreateCleanDatabase(); - Helpers.PopulateDatabase(); + await Helpers.RecreateCleanDatabase(); + await Helpers.PopulateDatabase(); using var context = new BooksContext(); - var book = context.Books.Single(e => e.Id == 1); + var book = await context.Books.SingleAsync(e => e.Id == 1); Console.WriteLine(); } public static class Helpers { - public static void RecreateCleanDatabase() + public static async Task RecreateCleanDatabase() { using var context = new BooksContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - public static void PopulateDatabase() + public static async Task PopulateDatabase() { using var context = new BooksContext(); context.Add( new Book() { Isbn = "978-0-39-481823-8", Title = "What Do People Do All Day?" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -69,7 +70,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreSample;ConnectRetryCount=0"); if (!_quiet) { diff --git a/samples/core/Miscellaneous/NewInEFCore7/.config/dotnet-tools.json b/samples/core/Miscellaneous/NewInEFCore7/.config/dotnet-tools.json index 492c27696d..c03564f970 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/.config/dotnet-tools.json +++ b/samples/core/Miscellaneous/NewInEFCore7/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "dotnet-ef": { - "version": "7.0.0-rc.1.22408.1", + "version": "8.0.0", "commands": [ "dotnet-ef" ] diff --git a/samples/core/Miscellaneous/NewInEFCore7/BlogsContext.cs b/samples/core/Miscellaneous/NewInEFCore7/BlogsContext.cs index a8baa0c521..64e04e5a06 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/BlogsContext.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/BlogsContext.cs @@ -185,7 +185,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}", + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0", sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseNetTopologySuite())) .EnableSensitiveDataLogging() .LogTo( diff --git a/samples/core/Miscellaneous/NewInEFCore7/DocumentsContext.cs b/samples/core/Miscellaneous/NewInEFCore7/DocumentsContext.cs index 5fda832e45..4b0127bffa 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/DocumentsContext.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/DocumentsContext.cs @@ -81,7 +81,7 @@ public abstract class DocumentsContext : DbContext public DbSet People => Set(); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}") + => optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0") .EnableSensitiveDataLogging() .LogTo( s => diff --git a/samples/core/Miscellaneous/NewInEFCore7/GroupByEntityTypeSample.cs b/samples/core/Miscellaneous/NewInEFCore7/GroupByEntityTypeSample.cs index 31f9b4c48e..3b22c4ae7f 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/GroupByEntityTypeSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/GroupByEntityTypeSample.cs @@ -90,7 +90,7 @@ public class BookContextSqlServer : BookContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => base.OnConfiguring( - optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Books")); + optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Books;ConnectRetryCount=0")); } public class BookContextSqlite : BookContext diff --git a/samples/core/Miscellaneous/NewInEFCore7/GroupByFinalOperatorSample.cs b/samples/core/Miscellaneous/NewInEFCore7/GroupByFinalOperatorSample.cs index 9afd5c7016..dafe9ba50e 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/GroupByFinalOperatorSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/GroupByFinalOperatorSample.cs @@ -75,7 +75,7 @@ public class BookContextSqlServer : BookContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => base.OnConfiguring( - optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Books")); + optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Books;ConnectRetryCount=0")); } public class BookContextSqlite : BookContext diff --git a/samples/core/Miscellaneous/NewInEFCore7/GroupJoinFinalOperatorSample.cs b/samples/core/Miscellaneous/NewInEFCore7/GroupJoinFinalOperatorSample.cs index e81526c6a9..56bb973af2 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/GroupJoinFinalOperatorSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/GroupJoinFinalOperatorSample.cs @@ -104,7 +104,7 @@ public class GroupJoinContextSqlServer : GroupJoinContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => base.OnConfiguring( - optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Customers")); + optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Customers;ConnectRetryCount=0")); } public class GroupJoinContextSqlite : GroupJoinContext diff --git a/samples/core/Miscellaneous/NewInEFCore7/ModelBuildingConventionsSample.cs b/samples/core/Miscellaneous/NewInEFCore7/ModelBuildingConventionsSample.cs index acf4fcf933..8e8c34c3b5 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/ModelBuildingConventionsSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/ModelBuildingConventionsSample.cs @@ -66,10 +66,10 @@ private static async Task ConventionsTest() Console.WriteLine(context.Model.ToDebugString()); - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts).ThenInclude(post => post.Author) .Include(blog => blog.Posts).ThenInclude(post => post.Tags) - .ToList(); + .ToListAsync(); blogs[0].Name += "Changed"; blogs[1].Posts[2].Content += "Changed"; @@ -259,7 +259,7 @@ public class LaundryContext : DbContext public DbSet LaundryBaskets => Set(); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}"); + => optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0"); #region ReplaceConvention protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) @@ -386,7 +386,7 @@ public class TenantIdValidatingContext : DbContext public DbSet LaundryBaskets => Set(); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}"); + => optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0"); protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) { diff --git a/samples/core/Miscellaneous/NewInEFCore7/ModelBuildingSample.cs b/samples/core/Miscellaneous/NewInEFCore7/ModelBuildingSample.cs index 979d833dcb..073b6420fc 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/ModelBuildingSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/ModelBuildingSample.cs @@ -305,7 +305,7 @@ public class BlogsContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database=Blogs") + .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database=Blogs;ConnectRetryCount=0") .LogTo(Console.WriteLine, LogLevel.Information) .EnableSensitiveDataLogging(); @@ -401,7 +401,7 @@ public class AnimalsTptContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database=AnimalsTpt") + .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database=AnimalsTpt;ConnectRetryCount=0") .LogTo(Console.WriteLine, LogLevel.Information) .EnableSensitiveDataLogging(); @@ -427,7 +427,7 @@ public class AnimalsTpcContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database=AnimalsTpc") + .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database=AnimalsTpc;ConnectRetryCount=0") .LogTo(Console.WriteLine, LogLevel.Information) .EnableSensitiveDataLogging(); @@ -485,7 +485,7 @@ public DbSet Employees protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database=Images") + .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database=Images;ConnectRetryCount=0") .LogTo(Console.WriteLine, LogLevel.Information) .EnableSensitiveDataLogging(); diff --git a/samples/core/Miscellaneous/NewInEFCore7/QueryStatisticsLoggerSample.cs b/samples/core/Miscellaneous/NewInEFCore7/QueryStatisticsLoggerSample.cs index 0f31bb5839..d01287061a 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/QueryStatisticsLoggerSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/QueryStatisticsLoggerSample.cs @@ -15,7 +15,7 @@ public static async Task Executing_commands_after_consuming_a_result_set() var serviceProvider = new ServiceCollection() .AddDbContext( b => b.UseLoggerFactory(loggerFactory) - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ConsumedDataReaderSample")) + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ConsumedDataReaderSample;ConnectRetryCount=0")) .BuildServiceProvider(); using (var scope = serviceProvider.CreateScope()) diff --git a/samples/core/Miscellaneous/NewInEFCore7/ReadOnlySetQuerySample.cs b/samples/core/Miscellaneous/NewInEFCore7/ReadOnlySetQuerySample.cs index 1fba3603c7..7423cce829 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/ReadOnlySetQuerySample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/ReadOnlySetQuerySample.cs @@ -114,7 +114,7 @@ public class ReadOnlySetContextSqlServer : ReadOnlySetContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => base.OnConfiguring( - optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Customers")); + optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Customers;ConnectRetryCount=0")); } public class ReadOnlySetContextSqlite : ReadOnlySetContext diff --git a/samples/core/Miscellaneous/NewInEFCore7/SaveChangesPerformanceSample.cs b/samples/core/Miscellaneous/NewInEFCore7/SaveChangesPerformanceSample.cs index 467a0ce693..2daca432ff 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/SaveChangesPerformanceSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/SaveChangesPerformanceSample.cs @@ -147,7 +147,7 @@ public class PerfContextSqlServer : PerfContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => base.OnConfiguring( - optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=SaveChangesPerf")); + optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=SaveChangesPerf;ConnectRetryCount=0")); } public class PerfContextSqlite : PerfContext diff --git a/samples/core/Miscellaneous/NewInEFCore7/StatisticalAggregateFunctionsSample.cs b/samples/core/Miscellaneous/NewInEFCore7/StatisticalAggregateFunctionsSample.cs index 4ff3b2139c..9bd247f1b7 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/StatisticalAggregateFunctionsSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/StatisticalAggregateFunctionsSample.cs @@ -60,7 +60,7 @@ public class StatisticsContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Downloads") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Downloads;ConnectRetryCount=0") .LogTo(Console.WriteLine, LogLevel.Information) .EnableSensitiveDataLogging(); } diff --git a/samples/core/Miscellaneous/NewInEFCore7/TpcInheritanceSample.cs b/samples/core/Miscellaneous/NewInEFCore7/TpcInheritanceSample.cs index e1e9288d39..436316a1a0 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/TpcInheritanceSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/TpcInheritanceSample.cs @@ -115,7 +115,7 @@ public static async Task ManyToManyTest() context.Remove(context.Animals.Local.Single(e => e.Name == "Christi")); context.Humans.Local.Single(e => e.Name == "Wendy").Food = new HumanFood("White pizza", 400); - var sushi = context.Foods.OfType().Single(e => e.Name == "Sushi"); + var sushi = await context.Foods.OfType().SingleAsync(e => e.Name == "Sushi"); sushi.Calories -= 100; await context.SaveChangesAsync(); @@ -397,7 +397,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .EnableSensitiveDataLogging() - .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}"); + .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0"); optionsBuilder.LogTo(Console.WriteLine, LogLevel.Information); } diff --git a/samples/core/Miscellaneous/NewInEFCore7/UngroupedColumnsQuerySample.cs b/samples/core/Miscellaneous/NewInEFCore7/UngroupedColumnsQuerySample.cs index f5996fdb23..d81ff01d85 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/UngroupedColumnsQuerySample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/UngroupedColumnsQuerySample.cs @@ -72,7 +72,7 @@ public class InvoiceContextSqlServer : InvoiceContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => base.OnConfiguring( - optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Invoices")); + optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Invoices;ConnectRetryCount=0")); } public class InvoiceContextSqlite : InvoiceContext diff --git a/samples/core/Miscellaneous/NewInEFCore7/ValueGenerationSample.cs b/samples/core/Miscellaneous/NewInEFCore7/ValueGenerationSample.cs index b8afb2905d..64380bee68 100644 --- a/samples/core/Miscellaneous/NewInEFCore7/ValueGenerationSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore7/ValueGenerationSample.cs @@ -47,7 +47,7 @@ public class ProductsContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database=Products") + .UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database=Products;ConnectRetryCount=0") .LogTo(Console.WriteLine, LogLevel.Information) .EnableSensitiveDataLogging(); diff --git a/samples/core/Miscellaneous/NewInEFCore8/.config/dotnet-tools.json b/samples/core/Miscellaneous/NewInEFCore8/.config/dotnet-tools.json index 92ce373d53..c03564f970 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/.config/dotnet-tools.json +++ b/samples/core/Miscellaneous/NewInEFCore8/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "dotnet-ef": { - "version": "8.0.0-alpha.1.23062.6", + "version": "8.0.0", "commands": [ "dotnet-ef" ] diff --git a/samples/core/Miscellaneous/NewInEFCore8/BlogsContext.cs b/samples/core/Miscellaneous/NewInEFCore8/BlogsContext.cs index c8a72ccc41..ebf2ce026d 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/BlogsContext.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/BlogsContext.cs @@ -210,7 +210,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}", + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0", sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseNetTopologySuite())) .EnableSensitiveDataLogging() .LogTo( diff --git a/samples/core/Miscellaneous/NewInEFCore8/ComplexTypesSample.cs b/samples/core/Miscellaneous/NewInEFCore8/ComplexTypesSample.cs index 885e532457..7f53c731b2 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/ComplexTypesSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/ComplexTypesSample.cs @@ -110,7 +110,7 @@ public abstract class CustomerContextBase(bool useSqlite = false) : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") - : optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}")) + : optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) .EnableSensitiveDataLogging() .LogTo( s => diff --git a/samples/core/Miscellaneous/NewInEFCore8/DateOnlyTimeOnlySample.cs b/samples/core/Miscellaneous/NewInEFCore8/DateOnlyTimeOnlySample.cs index d7a1b3edc0..8e5eae9baa 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/DateOnlyTimeOnlySample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/DateOnlyTimeOnlySample.cs @@ -156,7 +156,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}", + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0", sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseNetTopologySuite())) .EnableSensitiveDataLogging() .LogTo( diff --git a/samples/core/Miscellaneous/NewInEFCore8/DefaultConstraintSample.cs b/samples/core/Miscellaneous/NewInEFCore8/DefaultConstraintSample.cs index f070317aa8..ca37df95f7 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/DefaultConstraintSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/DefaultConstraintSample.cs @@ -173,7 +173,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}", + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0", sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseNetTopologySuite())) .EnableSensitiveDataLogging() .LogTo(Console.WriteLine, LogLevel.Information); diff --git a/samples/core/Miscellaneous/NewInEFCore8/DocumentsContext.cs b/samples/core/Miscellaneous/NewInEFCore8/DocumentsContext.cs index 629f951356..80e72eefb3 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/DocumentsContext.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/DocumentsContext.cs @@ -80,7 +80,7 @@ public abstract class DocumentsContext : DbContext public DbSet People => Set(); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}") + => optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0") .EnableSensitiveDataLogging() .LogTo( s => diff --git a/samples/core/Miscellaneous/NewInEFCore8/ExecuteUpdateDeleteSample.cs b/samples/core/Miscellaneous/NewInEFCore8/ExecuteUpdateDeleteSample.cs index 8957425a1f..b668184b6a 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/ExecuteUpdateDeleteSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/ExecuteUpdateDeleteSample.cs @@ -157,7 +157,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}", + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0", sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseNetTopologySuite())) .EnableSensitiveDataLogging() .LogTo(Console.WriteLine, LogLevel.Information); diff --git a/samples/core/Miscellaneous/NewInEFCore8/HierarchyIdSample.cs b/samples/core/Miscellaneous/NewInEFCore8/HierarchyIdSample.cs index 2769b9f85a..f319ce386e 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/HierarchyIdSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/HierarchyIdSample.cs @@ -230,7 +230,7 @@ public class FamilyTreeContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}", + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0", sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseHierarchyId()) .EnableSensitiveDataLogging() .LogTo( diff --git a/samples/core/Miscellaneous/NewInEFCore8/ImmutableComplexTypesSample.cs b/samples/core/Miscellaneous/NewInEFCore8/ImmutableComplexTypesSample.cs index 2f113f4fa6..2b43a775dc 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/ImmutableComplexTypesSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/ImmutableComplexTypesSample.cs @@ -100,7 +100,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}")) + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) //sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseCompatibilityLevel(120))) .EnableSensitiveDataLogging() .LogTo( diff --git a/samples/core/Miscellaneous/NewInEFCore8/ImmutableStructComplexTypesSample.cs b/samples/core/Miscellaneous/NewInEFCore8/ImmutableStructComplexTypesSample.cs index b5987b86da..8bfb3ed97b 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/ImmutableStructComplexTypesSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/ImmutableStructComplexTypesSample.cs @@ -106,7 +106,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}")) + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) //sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseCompatibilityLevel(120))) .EnableSensitiveDataLogging() .LogTo( diff --git a/samples/core/Miscellaneous/NewInEFCore8/NestedComplexTypesSample.cs b/samples/core/Miscellaneous/NewInEFCore8/NestedComplexTypesSample.cs index 5b71bafe06..ed49aadd21 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/NestedComplexTypesSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/NestedComplexTypesSample.cs @@ -206,7 +206,7 @@ public abstract class CustomerContextBase(bool useSqlite = false) : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") - : optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}")) + : optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) .EnableSensitiveDataLogging() .LogTo( s => diff --git a/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionToTableSample.cs b/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionToTableSample.cs index 29d4eb3ea2..ede3b7e5d1 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionToTableSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionToTableSample.cs @@ -108,7 +108,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}")) + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) .EnableSensitiveDataLogging() .LogTo( s => diff --git a/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionsInJsonSample.cs b/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionsInJsonSample.cs index 986785287c..042ac034b8 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionsInJsonSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionsInJsonSample.cs @@ -190,7 +190,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}")) + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) //sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseCompatibilityLevel(120))) .EnableSensitiveDataLogging() .LogTo( diff --git a/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionsSample.cs b/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionsSample.cs index 61dbac5a5e..ffdd96204b 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionsSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/PrimitiveCollectionsSample.cs @@ -248,7 +248,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}")) + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) //sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseCompatibilityLevel(120))) .EnableSensitiveDataLogging() .LogTo( diff --git a/samples/core/Miscellaneous/NewInEFCore8/RecordComplexTypesSample.cs b/samples/core/Miscellaneous/NewInEFCore8/RecordComplexTypesSample.cs index a779f32d92..d495f148dc 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/RecordComplexTypesSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/RecordComplexTypesSample.cs @@ -93,7 +93,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}")) + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) //sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseCompatibilityLevel(120))) .EnableSensitiveDataLogging() .LogTo( @@ -245,7 +245,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}")) + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) //sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseCompatibilityLevel(120))) .EnableSensitiveDataLogging() .LogTo( diff --git a/samples/core/Miscellaneous/NewInEFCore8/StructComplexTypesSample.cs b/samples/core/Miscellaneous/NewInEFCore8/StructComplexTypesSample.cs index c117f56d4b..8380456fcb 100644 --- a/samples/core/Miscellaneous/NewInEFCore8/StructComplexTypesSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore8/StructComplexTypesSample.cs @@ -107,7 +107,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (UseSqlite ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") : optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}")) + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) //sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseCompatibilityLevel(120))) .EnableSensitiveDataLogging() .LogTo( diff --git a/samples/core/Miscellaneous/NewInEFCore9.CompiledModels/App/App.csproj b/samples/core/Miscellaneous/NewInEFCore9.CompiledModels/App/App.csproj index 20df067599..d0893b1f77 100644 --- a/samples/core/Miscellaneous/NewInEFCore9.CompiledModels/App/App.csproj +++ b/samples/core/Miscellaneous/NewInEFCore9.CompiledModels/App/App.csproj @@ -9,7 +9,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/samples/core/Miscellaneous/NewInEFCore9.CompiledModels/Model/Model.csproj b/samples/core/Miscellaneous/NewInEFCore9.CompiledModels/Model/Model.csproj index 92369134bc..66c2064a9a 100644 --- a/samples/core/Miscellaneous/NewInEFCore9.CompiledModels/Model/Model.csproj +++ b/samples/core/Miscellaneous/NewInEFCore9.CompiledModels/Model/Model.csproj @@ -15,13 +15,13 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - + + + diff --git a/samples/core/Miscellaneous/NewInEFCore9.Cosmos/CosmosPrimitiveTypesSample.cs b/samples/core/Miscellaneous/NewInEFCore9.Cosmos/CosmosPrimitiveTypesSample.cs new file mode 100644 index 0000000000..37c3a4bd7d --- /dev/null +++ b/samples/core/Miscellaneous/NewInEFCore9.Cosmos/CosmosPrimitiveTypesSample.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; + +public static class CosmosPrimitiveTypesSample +{ + public static async Task Collections_and_dictionaries_of_primitive_types() + { + Console.WriteLine($">>>> Sample: {nameof(Collections_and_dictionaries_of_primitive_types)}"); + Console.WriteLine(); + + await Helpers.RecreateCleanDatabase(); + + using var context = new BooksContext(); + + var book = new Book + { + Title = "How It Works: Incredible History", + Quotes = new List + { + "Thomas (Tommy) Flowers was the British engineer behind the design of the Colossus computer.", + "Invented originally for Guinness, plastic widgets are nitrogen-filled spheres.", + "For 20 years after its introduction in 1979, the Walkman dominated the personal stereo market." + }, + Notes = new Dictionary + { + { "121", "Fridges" }, + { "144", "Peter Higgs" }, + { "48", "Saint Mark's Basilica" }, + { "36", "The Terracotta Army" } + } + }; + + context.Add(book); + await context.SaveChangesAsync(); + + book.Quotes.Add("Pressing the emergency button lowered the rods again."); + book.Notes["48"] = "Chiesa d'Oro"; + + await context.SaveChangesAsync(); + + Console.WriteLine(); + } + + public static class Helpers + { + public static async Task RecreateCleanDatabase() + { + await using var context = new BooksContext(quiet: true); + + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + } + } + + public class Book + { + public Guid Id { get; set; } + public string Title { get; set; } + public IList Quotes { get; set; } + public IDictionary Notes { get; set; } + } + + public class BooksContext : DbContext + { + public DbSet Books { get; set; } + + private readonly bool _quiet; + + public BooksContext(bool quiet = false) + { + _quiet = quiet; + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToContainer("Shapes"); + + #region ConfigureCollection + modelBuilder.Entity() + .PrimitiveCollection(e => e.Quotes) + .ElementType(b => b.IsRequired()); + #endregion + } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder + .EnableSensitiveDataLogging() + .UseCosmos( + "https://localhost:8081/", + "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", + "PrimitiveCollections", + cosmosOptionsBuilder => + { + cosmosOptionsBuilder.HttpClientFactory( + () => new HttpClient( + new HttpClientHandler + { + ServerCertificateCustomValidationCallback = + HttpClientHandler.DangerousAcceptAnyServerCertificateValidator + })); + }); + + if (!_quiet) + { + optionsBuilder.LogTo( + Console.WriteLine, + new[] { CosmosEventId.ExecutedCreateItem, CosmosEventId.ExecutingSqlQuery, CoreEventId.SaveChangesCompleted }); + } + } + } +} diff --git a/samples/core/Miscellaneous/NewInEFCore9.Cosmos/CosmosSyncApisSample.cs b/samples/core/Miscellaneous/NewInEFCore9.Cosmos/CosmosSyncApisSample.cs new file mode 100644 index 0000000000..5a19643cdc --- /dev/null +++ b/samples/core/Miscellaneous/NewInEFCore9.Cosmos/CosmosSyncApisSample.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.Extensions.Logging; + +public static class CosmosSyncApisSample +{ + public static void Cosmos_provider_blocks_sync_APIs() + { + Console.WriteLine($">>>> Sample: {nameof(Cosmos_provider_blocks_sync_APIs)}"); + Console.WriteLine(); + + Helpers.RecreateCleanDatabase(); + Helpers.PopulateDatabase(); + + using var context = new ShapesContext(); + + var triangle = new Triangle + { + Name = "Impossible", + PartitionKey = "TrianglesPartition", + Angle1 = 90, + Angle2 = 90, + InsertedOn = DateTime.UtcNow + }; + context.Add(triangle); + context.SaveChanges(); + + var equilateral = context.Triangles.Single(e => e.Name == "Equilateral"); + var isosceles = context.Triangles.Find("Isosceles", "TrianglesPartition"); + + triangle.Angle2 = 89; + context.SaveChanges(); + + context.Remove(triangle); + context.SaveChanges(); + } + + public static class Helpers + { + public static void RecreateCleanDatabase() + { + using var context = new ShapesContext(quiet: true); + + context.Database.EnsureDeleted(); + context.Database.EnsureCreated(); + } + + public static void PopulateDatabase() + { + using var context = new ShapesContext(quiet: true); + + var triangles = new List + { + new() { Name = "Acute", PartitionKey = "TrianglesPartition", Angle1 = 75, Angle2 = 85, InsertedOn = DateTime.UtcNow }, + new() { Name = " Obtuse ", PartitionKey = "TrianglesPartition", Angle1 = 110, Angle2 = 35, InsertedOn = DateTime.UtcNow }, + new() { Name = "Right", PartitionKey = "TrianglesPartition", Angle1 = 90, Angle2 = 45, InsertedOn = DateTime.UtcNow }, + new() { Name = "Isosceles", PartitionKey = "TrianglesPartition", Angle1 = 75, Angle2 = 75, InsertedOn = DateTime.UtcNow }, + new() { Name = "Equilateral", PartitionKey = "TrianglesPartition", Angle1 = 60, Angle2 = 60, InsertedOn = DateTime.UtcNow } + }; + + context.AddRange(triangles); + context.SaveChanges(); + } + } + + public class Triangle + { + public string PartitionKey { get; set; } + public string Name { get; set; } + public double Angle1 { get; set; } + public double Angle2 { get; set; } + public DateTime InsertedOn { get; set; } + } + + public class ShapesContext(bool quiet = false) : DbContext + { + public DbSet Triangles { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity( + b => + { + b.ToContainer("Shapes"); + b.HasPartitionKey(e => e.PartitionKey); + b.HasKey(e => new { e.Name, e.PartitionKey }); + b.Property(c => c.Name).ToJsonProperty("id"); + b.Property(c => c.PartitionKey).ToJsonProperty("pk"); + }); + } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder = optionsBuilder + .ConfigureWarnings(b => b.Log(CosmosEventId.SyncNotSupported)) + .EnableSensitiveDataLogging() + .UseCosmos( + "https://localhost:8081/", + "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", + "Triangles"); + + if (!quiet) + { + optionsBuilder.LogTo(Console.WriteLine, LogLevel.Information); + } + } + } +} diff --git a/samples/core/Miscellaneous/NewInEFCore9.Cosmos/HierarchicalPartitionKeysSample.cs b/samples/core/Miscellaneous/NewInEFCore9.Cosmos/HierarchicalPartitionKeysSample.cs new file mode 100644 index 0000000000..e4448501e0 --- /dev/null +++ b/samples/core/Miscellaneous/NewInEFCore9.Cosmos/HierarchicalPartitionKeysSample.cs @@ -0,0 +1,247 @@ +using System; +using System.Linq; +using System.Net.Http; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; + +public static class HierarchicalPartitionKeysSample +{ + public static async Task UseHierarchicalPartitionKeys() + { + Console.WriteLine($">>>> Sample: {nameof(UseHierarchicalPartitionKeys)}"); + Console.WriteLine(); + + await Helpers.RecreateCleanDatabase(); + + Guid userSessionId; + + using (var context = new UserSessionContext()) + { + #region Inserts + var tenantId = "Microsoft"; + var sessionId = 7; + + context.AddRange( + new UserSession + { + TenantId = tenantId, + UserId = new Guid("99A410D7-E467-4CC5-92DE-148F3FC53F4C"), + SessionId = sessionId, + Username = "mac" + }, + new UserSession + { + TenantId = tenantId, + UserId = new Guid("ADAE5DDE-8A67-432D-9DEC-FD7EC86FD9F6"), + SessionId = sessionId, + Username = "toast" + }, + new UserSession + { + TenantId = tenantId, + UserId = new Guid("61967254-AFF8-493A-B7F8-E62DA36D8367"), + SessionId = sessionId, + Username = "willow" + }, + new UserSession + { + TenantId = tenantId, + UserId = new Guid("BC0150CF-5147-44B8-8823-865F4F2323E1"), + SessionId = sessionId, + Username = "alice" + }); + + await context.SaveChangesAsync(); + #endregion + + userSessionId = context.ChangeTracker.Entries().Single(e => e.Entity.Username == "willow").Entity.Id; + } + + Console.WriteLine(); + Console.WriteLine("Use Find to create a point-read:"); + Console.WriteLine(); + + using (var context = new UserSessionContext()) + { + #region FindAsync + var tenantId = "Microsoft"; + var sessionId = 7; + var userId = new Guid("99A410D7-E467-4CC5-92DE-148F3FC53F4C"); + + var session = await context.Sessions.FindAsync( + userSessionId, tenantId, userId, sessionId); + #endregion + } + + Console.WriteLine(); + Console.WriteLine("Execute a query with full hierarchical partition key info:"); + Console.WriteLine(); + + using (var context = new UserSessionContext()) + { + #region FullPartitionKey + var tenantId = "Microsoft"; + var sessionId = 7; + var userId = new Guid("99A410D7-E467-4CC5-92DE-148F3FC53F4C"); + + var sessions = await context.Sessions + .Where( + e => e.TenantId == tenantId + && e.UserId == userId + && e.SessionId == sessionId + && e.Username.Contains("a")) + .ToListAsync(); + #endregion + } + + Console.WriteLine(); + Console.WriteLine("Execute a query with only top two levels of hierarchical partition key:"); + Console.WriteLine(); + + using (var context = new UserSessionContext()) + { + #region TopTwoPartitionKey + var tenantId = "Microsoft"; + var userId = new Guid("99A410D7-E467-4CC5-92DE-148F3FC53F4C"); + + var sessions = await context.Sessions + .Where( + e => e.TenantId == tenantId + && e.UserId == userId + && e.Username.Contains("a")) + .ToListAsync(); + #endregion + } + + Console.WriteLine(); + Console.WriteLine("Execute a query with only top level of hierarchical partition key:"); + Console.WriteLine(); + + using (var context = new UserSessionContext()) + { + #region TopOnePartitionKey + var tenantId = "Microsoft"; + + var sessions = await context.Sessions + .Where( + e => e.TenantId == tenantId + && e.Username.Contains("a")) + .ToListAsync(); + #endregion + } + + Console.WriteLine(); + Console.WriteLine("Execute a queries with incomplete subkey values:"); + Console.WriteLine(); + + using (var context = new UserSessionContext()) + { + var sessionId = 7; + var userId = new Guid("99A410D7-E467-4CC5-92DE-148F3FC53F4C"); + + #region BottomPartitionKey + var sessions1 = await context.Sessions + .Where( + e => e.SessionId == sessionId + && e.Username.Contains("a")) + .ToListAsync(); + #endregion + + #region MiddlePartitionKey + var sessions2 = await context.Sessions + .Where( + e => e.UserId == userId + && e.Username.Contains("a")) + .ToListAsync(); + #endregion + + #region BottomTwoPartitionKey + var sessions3 = await context.Sessions + .Where( + e => e.SessionId == sessionId + && e.UserId == userId + && e.Username.Contains("a")) + .ToListAsync(); + #endregion + } + } + + public static class Helpers + { + public static async Task RecreateCleanDatabase() + { + await using var context = new UserSessionContext(quiet: true); + + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + } + } + + #region UserSession + public class UserSession + { + // Item ID + public Guid Id { get; set; } + + // Partition Key + public string TenantId { get; set; } = null!; + public Guid UserId { get; set; } + public int SessionId { get; set; } + + // Other members + public string Username { get; set; } = null!; + } + #endregion + + public class UserSessionContext : DbContext + { + public DbSet Sessions { get; set; } + + private readonly bool _quiet; + + public UserSessionContext(bool quiet = false) + { + _quiet = quiet; + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + #region HasPartitionKey + modelBuilder + .Entity() + .HasPartitionKey(e => new { e.TenantId, e.UserId, e.SessionId }); + #endregion + + // See https://github.com/dotnet/efcore/issues/33961 + modelBuilder + .Entity() + .Property(e => e.Id).ValueGeneratedOnAdd(); + } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder + .EnableSensitiveDataLogging() + .UseCosmos( + "https://localhost:8081/", + "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", + "HierarchicalPartitionKeys", + cosmosOptionsBuilder => + { + cosmosOptionsBuilder.HttpClientFactory( + () => new HttpClient( + new HttpClientHandler + { + ServerCertificateCustomValidationCallback = + HttpClientHandler.DangerousAcceptAnyServerCertificateValidator + })); + }); + + if (!_quiet) + { + optionsBuilder.LogTo(Console.WriteLine, LogLevel.Information); + } + } + } +} diff --git a/samples/core/Miscellaneous/NewInEFCore9.Cosmos/NewInEFCore9.Cosmos.csproj b/samples/core/Miscellaneous/NewInEFCore9.Cosmos/NewInEFCore9.Cosmos.csproj new file mode 100644 index 0000000000..0e4ad15bea --- /dev/null +++ b/samples/core/Miscellaneous/NewInEFCore9.Cosmos/NewInEFCore9.Cosmos.csproj @@ -0,0 +1,13 @@ + + + + Exe + net8.0 + + + + + + + + diff --git a/samples/core/Miscellaneous/NewInEFCore9.Cosmos/Program.cs b/samples/core/Miscellaneous/NewInEFCore9.Cosmos/Program.cs new file mode 100644 index 0000000000..95a17c33f8 --- /dev/null +++ b/samples/core/Miscellaneous/NewInEFCore9.Cosmos/Program.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; + +public class Program +{ + public static async Task Main() + { + // Note: These samples requires the Cosmos DB emulator to be installed and running + CosmosSyncApisSample.Cosmos_provider_blocks_sync_APIs(); + await CosmosPrimitiveTypesSample.Collections_and_dictionaries_of_primitive_types(); + await HierarchicalPartitionKeysSample.UseHierarchicalPartitionKeys(); + } +} diff --git a/samples/core/Miscellaneous/NewInEFCore9/BlogsContext.cs b/samples/core/Miscellaneous/NewInEFCore9/BlogsContext.cs index 27f45592d4..b88e3baa71 100644 --- a/samples/core/Miscellaneous/NewInEFCore9/BlogsContext.cs +++ b/samples/core/Miscellaneous/NewInEFCore9/BlogsContext.cs @@ -13,11 +13,25 @@ public Blog(string name) public int Id { get; private set; } public string Name { get; set; } + public Language Language { get; set; } + public virtual Uri SiteUri { get; set; } = null!; public virtual Website Site { get; set; } = null!; public virtual List Posts { get; } = new(); } + +public enum Language +{ + English, + MandarinChinese, + Hindi, + Spanish, + French, + ModernStandardArabic, + Other, +} + public class Website { public Website(Uri uri, string email) @@ -34,11 +48,12 @@ public Website(Uri uri, string email) public class Post { - public Post(string title, string content, DateOnly publishedOn) + public Post(string title, string content, DateOnly publishedOn, decimal rating) { Title = title; Content = content; PublishedOn = publishedOn; + Rating = rating; } public int Id { get; private set; } @@ -47,6 +62,7 @@ public Post(string title, string content, DateOnly publishedOn) public DateOnly PublishedOn { get; set; } public bool Archived { get; set; } public int BlogId { get; set; } + public decimal Rating { get; set; } public virtual Blog Blog { get; set; } = null!; public virtual List Tags { get; } = new(); public virtual Author? Author { get; set; } @@ -55,8 +71,8 @@ public Post(string title, string content, DateOnly publishedOn) public class FeaturedPost : Post { - public FeaturedPost(string title, string content, DateOnly publishedOn, string promoText) - : base(title, content, publishedOn) + public FeaturedPost(string title, string content, DateOnly publishedOn, decimal rating, string promoText) + : base(title, content, publishedOn, rating) { PromoText = promoText; } @@ -299,13 +315,16 @@ public async Task Seed() new Post( "Productivity comes to .NET MAUI in Visual Studio 2022", "Visual Studio 2022 17.3 is now available and...", - new DateOnly(2022, 8, 9)) { Tags = { tagDotNetMaui, tagDotNet }, Author = maddy, Metadata = BuildPostMetadata() }, + new DateOnly(2022, 8, 9), + 4.0M) { Tags = { tagDotNetMaui, tagDotNet }, Author = maddy, Metadata = BuildPostMetadata() }, new Post( "Announcing .NET 7 Preview 7", ".NET 7 Preview 7 is now available with improvements to System.LINQ, Unix...", - new DateOnly(2022, 8, 9)) { Tags = { tagDotNet }, Author = jeremy, Metadata = BuildPostMetadata() }, + new DateOnly(2022, 8, 9), + 4.2M) { Tags = { tagDotNet }, Author = jeremy, Metadata = BuildPostMetadata() }, new Post( "ASP.NET Core updates in .NET 7 Preview 7", ".NET 7 Preview 7 is now available! Check out what's new in...", - new DateOnly(2022, 8, 9)) + new DateOnly(2022, 8, 9), + 4.1M) { Tags = { tagDotNet, tagAspDotNet, tagAspDotNetCore }, Author = dan, Metadata = BuildPostMetadata() }, @@ -313,12 +332,14 @@ public async Task Seed() "Announcing Entity Framework 7 Preview 7: Interceptors!", "Announcing EF7 Preview 7 with new and improved interceptors, and...", new DateOnly(2022, 8, 9), + 4.5M, "Loads of runnable code!") { Tags = { tagEntityFramework, tagDotNet, tagDotNetCore }, Author = arthur, Metadata = BuildPostMetadata() } }, - Site = new(new("https://devblogs.microsoft.com/dotnet/"), "dotnet@example.com") + Site = new(new("https://devblogs.microsoft.com/dotnet/"), "dotnet@example.com"), + Language = Language.English, }, new("1unicorn2") { @@ -327,20 +348,25 @@ public async Task Seed() new Post( "Hacking my Sixth Form College network in 1991", "Back in 1991 I was a student at Franklin Sixth Form College...", - new DateOnly(2020, 4, 10)) { Tags = { tagHacking }, Author = arthur, Metadata = BuildPostMetadata() }, + new DateOnly(2020, 4, 10), + 4.5M) { Tags = { tagHacking }, Author = arthur, Metadata = BuildPostMetadata() }, new FeaturedPost( "All your versions are belong to us", "Totally made up conversations about choosing Entity Framework version numbers...", new DateOnly(2020, 3, 26), + 3.9M, "Way funny!") { Tags = { tagEntityFramework }, Author = arthur, Metadata = BuildPostMetadata() }, new Post( "Moving to Linux", "A few weeks ago, I decided to move from Windows to Linux as...", - new DateOnly(2020, 3, 7)) { Tags = { tagLinux }, Author = arthur, Metadata = BuildPostMetadata(), Archived = true }, + new DateOnly(2020, 3, 7), + 3.5M) { Tags = { tagLinux }, Author = arthur, Metadata = BuildPostMetadata(), Archived = true }, new Post( "Welcome to One Unicorn 2.0!", "I created my first blog back in 2011..", - new DateOnly(2020, 2, 29)) { Tags = { tagEntityFramework }, Author = arthur, Metadata = BuildPostMetadata() } + new DateOnly(2020, 2, 29), + 4.8M) { Tags = { tagEntityFramework }, Author = arthur, Metadata = BuildPostMetadata() } }, - Site = new(new("https://blog.oneunicorn.com/"), "unicorn@example.com") + Site = new(new("https://blog.oneunicorn.com/"), "unicorn@example.com"), + Language = Language.English, }, new("Brice's Blog") { @@ -348,25 +374,29 @@ public async Task Seed() { new FeaturedPost( "SQLite in Visual Studio 2022", "A couple of years ago, I was thinking of ways...", - new DateOnly(2022, 7, 26), "Love for VS!") + new DateOnly(2022, 7, 26), 4.5M, "Love for VS!") { Tags = { tagSqlite, tagVisualStudio }, Author = brice, Metadata = BuildPostMetadata() }, new Post( "On .NET - Entity Framework Migrations Explained", "This week, @JamesMontemagno invited me onto the On .NET show...", - new DateOnly(2022, 5, 4)) + new DateOnly(2022, 5, 4), + 4.7M) { Tags = { tagEntityFramework, tagDotNet }, Author = brice, Metadata = BuildPostMetadata() }, new Post( "Dear DBA: A silly idea", "We have fun on the Entity Framework team...", - new DateOnly(2022, 3, 31)) { Tags = { tagEntityFramework }, Author = brice, Metadata = BuildPostMetadata(), Archived = true }, + new DateOnly(2022, 3, 31), + 3.5M) { Tags = { tagEntityFramework }, Author = brice, Metadata = BuildPostMetadata(), Archived = true }, new Post( "Microsoft.Data.Sqlite 6", "It’s that time of year again. Microsoft.Data.Sqlite version...", - new DateOnly(2021, 11, 8)) { Tags = { tagSqlite, tagDotNet }, Author = brice, Metadata = BuildPostMetadata() } + new DateOnly(2021, 11, 8), + 4.2M) { Tags = { tagSqlite, tagDotNet }, Author = brice, Metadata = BuildPostMetadata() } }, - Site = new(new("https://www.bricelam.net/"), "brice@example.com") + Site = new(new("https://www.bricelam.net/"), "brice@example.com"), + Language = Language.English, }, new("Developer for Life") { @@ -374,7 +404,7 @@ public async Task Seed() { new Post( "GraphQL for .NET Developers", "A comprehensive overview of GraphQL as...", - new DateOnly(2021, 7, 1)) + new DateOnly(2021, 7, 1), 4.1M) { Tags = { tagDotNet, tagGraphQl, tagAspDotNetCore }, Author = jeremy, Metadata = BuildPostMetadata() }, @@ -382,6 +412,7 @@ public async Task Seed() "Azure Cosmos DB With EF Core on Blazor Server", "Learn how to build Azure Cosmos DB apps using Entity Framework Core...", new DateOnly(2021, 5, 16), + 4.5M, "Blazor FTW!") { Tags = @@ -398,7 +429,8 @@ public async Task Seed() new Post( "Multi-tenancy with EF Core in Blazor Server Apps", "Learn several ways to implement multi-tenant databases in Blazor Server apps...", - new DateOnly(2021, 4, 29)) + new DateOnly(2021, 4, 29), + 3.8M) { Tags = { tagDotNet, tagEntityFramework, tagAspDotNetCore, tagBlazor }, Author = jeremy, @@ -406,13 +438,15 @@ public async Task Seed() }, new Post( "An Easier Blazor Debounce", "Where I propose a simple method to debounce input without...", - new DateOnly(2021, 4, 12)) + new DateOnly(2021, 4, 12), + 4.5M) { Tags = { tagDotNet, tagAspDotNetCore, tagBlazor }, Author = jeremy, Metadata = BuildPostMetadata() } }, - Site = new(new("https://blog.jeremylikness.com/"), "jeremy@example.com") - } + Site = new(new("https://blog.jeremylikness.com/"), "jeremy@example.com"), + Language = Language.English, + } }; await AddRangeAsync(blogs); diff --git a/samples/core/Miscellaneous/NewInEFCore9/ComplexTypesSample.cs b/samples/core/Miscellaneous/NewInEFCore9/ComplexTypesSample.cs new file mode 100644 index 0000000000..3ced347a37 --- /dev/null +++ b/samples/core/Miscellaneous/NewInEFCore9/ComplexTypesSample.cs @@ -0,0 +1,148 @@ +namespace NewInEfCore9; + +public static class ComplexTypesSample +{ + public static Task GropupBy_complex_type_instances() + => ExecuteQueries(sqlite: false); + + public static Task GropupBy_complex_type_instances_on_SQLite() + => ExecuteQueries(sqlite: true); + + public static async Task ExecuteQueries(bool sqlite) + { + PrintSampleName(); + + await using var context = new CustomerContext(useSqlite: sqlite); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + + context.AddRange( + new Store + { + Customers = { new CustomerWithStores { Name = "Smokey", Region = "Germany" } }, + Region = "Germany", + StoreAddress = new("L1", null, "Ci1", "Co1", "P1") + }, + new Customer + { + Name = "Smokey", + CustomerInfo = new("EF") + { + HomeAddress = new("L2", null, "Ci2", "Co2", "P2"), WorkAddress = new("L3", null, "Ci3", "Co3", "P3") + }, + }, + new CustomerTpt + { + Name = "Willow", + CustomerInfo = new("EF") + { + HomeAddress = new("L5", null, "Ci5", "Co5", "P5"), WorkAddress = new("L6", null, "Ci6", "Co6", "P6") + }, + }, + new SpecialCustomerTpt + { + Name = "Olive", + CustomerInfo = new("EF") + { + HomeAddress = new("L7", null, "Ci7", "Co7", "P7"), WorkAddress = new("L8", null, "Ci8", "Co8", "P8") + } + }); + + await context.SaveChangesAsync(); + context.ChangeTracker.Clear(); + + Console.WriteLine(); + Console.WriteLine("GroupBy complex type:"); + Console.WriteLine(); + + #region GroupByComplexType + var groupedAddresses = await context.Stores + .GroupBy(b => b.StoreAddress) + .Select(g => new { g.Key, Count = g.Count() }) + .ToListAsync(); + #endregion + + foreach (var groupedAddress in groupedAddresses) + { + Console.WriteLine($"{groupedAddress.Key.PostCode}: {groupedAddress.Count}"); + } + } + + private static void PrintSampleName([CallerMemberName] string? methodName = null) + { + Console.WriteLine($">>>> Sample: {methodName}"); + Console.WriteLine(); + } + + [Table("TptSpecialCustomers")] + public class SpecialCustomerTpt : CustomerTpt + { + public string? Note { get; set; } + } + + [Table("TptCustomers")] + public class CustomerTpt + { + public int Id { get; set; } + public required string Name { get; set; } + public required CustomerInfo CustomerInfo { get; set; } + } + + public class Customer + { + public int Id { get; set; } + public required string Name { get; set; } + public required CustomerInfo CustomerInfo { get; set; } + } + + public record struct CustomerInfo(string? Tag) + { + public required Address HomeAddress { get; init; } + public required Address WorkAddress { get; init; } + } + + [ComplexType] + public record class Address(string Line1, string? Line2, string City, string Country, string PostCode); + + public class CustomerWithStores + { + public int Id { get; set; } + public required string Name { get; set; } + public string? Region { get; set; } + public string? Tag { get; set; } + } + + public class Store + { + public int Id { get; set; } + public List Customers { get; } = new(); + public string? Region { get; set; } + public required Address StoreAddress { get; set; } + } + + public class CustomerContext(bool useSqlite = false) : DbContext + { + public bool UseSqlite { get; } = useSqlite; + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => (UseSqlite + ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db", + sqliteOptionsBuilder => sqliteOptionsBuilder.UseNetTopologySuite()) + : optionsBuilder.UseSqlServer( + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0", + sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseNetTopologySuite())) + .EnableSensitiveDataLogging() + .LogTo(Console.WriteLine, LogLevel.Information); + + protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) + { + configurationBuilder.ComplexProperties(); + } + + public DbSet Customers => Set(); + public DbSet CustomersWithStores => Set(); + public DbSet Stores => Set(); + public DbSet TptCustomers => Set(); + public DbSet TptSpecialCustomers => Set(); + } +} diff --git a/samples/core/Miscellaneous/NewInEFCore9/DateOnlyTimeOnlySample.cs b/samples/core/Miscellaneous/NewInEFCore9/DateOnlyTimeOnlySample.cs new file mode 100644 index 0000000000..6a792c8b3a --- /dev/null +++ b/samples/core/Miscellaneous/NewInEFCore9/DateOnlyTimeOnlySample.cs @@ -0,0 +1,251 @@ +namespace NewInEfCore9; + +public static class DateOnlyTimeOnlySample +{ + public static Task Can_use_DateOnly_TimeOnly_on_SQL_Server() + { + PrintSampleName(); + return DateOnlyTimeOnlyTest(); + } + + public static Task Can_use_DateOnly_TimeOnly_on_SQL_Server_with_JSON() + { + PrintSampleName(); + return DateOnlyTimeOnlyTest(); + } + + public static Task Can_use_DateOnly_TimeOnly_on_SQLite() + { + PrintSampleName(); + return DateOnlyTimeOnlyTest(); + } + + private static async Task DateOnlyTimeOnlyTest() + where TContext : BritishSchoolsContextBase, new() + { + await using var context = new TContext(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + await context.Seed(); + + context.LoggingEnabled = true; + context.ChangeTracker.Clear(); + + Console.WriteLine(); + + // Issue https://github.com/dotnet/efcore/issues/25103 + if (!context.UseSqlite) + { + #region FromDateTime + var visitedTime = new TimeOnly(12, 0); + var visited = await context.Schools + .Where(p => TimeOnly.FromDateTime(p.LastVisited) >= visitedTime) + .ToListAsync(); + #endregion + } + + Console.WriteLine(); + + // Issue https://github.com/dotnet/efcore/issues/25103 + if (!context.UseSqlite) + { + #region FromTimeSpan + var visitedTime = new TimeOnly(12, 0); + var visited = await context.Schools + .Where(p => TimeOnly.FromTimeSpan(p.LegacyTime) >= visitedTime) + .ToListAsync(); + #endregion + } + + Console.WriteLine(); + + // Issue https://github.com/dotnet/efcore/issues/25103 + if (!context.UseSqlite) + { + var visitedAt = DateTime.UtcNow; + var visitedSchools = await context.Schools + .AsNoTracking() + .SelectMany(e => e.OpeningHours) + .Where(e => e.OpensAt <= TimeOnly.FromDateTime(visitedAt) && e.OpensAt > TimeOnly.FromDateTime(visitedAt)) + .ToListAsync(); + } + + // Issue https://github.com/dotnet/efcore/issues/33937 + // // Issue https://github.com/dotnet/efcore/issues/30223 + // if (!context.UsesJson + // && !context.UseSqlite) + // { + // await context.Schools + // .SelectMany(e => e.OpeningHours) + // .Where(e => e.DayOfWeek == DayOfWeek.Friday) + // .ExecuteUpdateAsync(s => s.SetProperty(t => t.OpensAt, t => t.OpensAt!.Value.AddHours(-1))); + // } + + Console.WriteLine(); + } + + private static void PrintSampleName([CallerMemberName] string? methodName = null) + { + Console.WriteLine($">>>> Sample: {methodName}"); + Console.WriteLine(); + } + + public abstract class BritishSchoolsContextBase : DbContext + { + protected BritishSchoolsContextBase(bool useSqlite = false) + { + UseSqlite = useSqlite; + } + + public bool UseSqlite { get; } + public virtual bool UsesJson => false; + public bool LoggingEnabled { get; set; } + + public DbSet Schools => Set(); + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => (UseSqlite + ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") + : optionsBuilder.UseSqlServer( + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0", + sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseNetTopologySuite())) + .EnableSensitiveDataLogging() + .LogTo( + s => + { + if (LoggingEnabled) + { + Console.WriteLine(s); + } + }, LogLevel.Information); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + } + + protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) + { + } + + public async Task Seed() + { + AddRange( + new School + { + Name = "Stowe School", + Founded = new(1923, 5, 11), + Terms = + { + new() { Name = "Michaelmas", FirstDay = new(2022, 9, 7), LastDay = new(2022, 12, 16) }, + new() { Name = "Lent", FirstDay = new(2023, 1, 8), LastDay = new(2023, 3, 24) }, + new() { Name = "Summer", FirstDay = new(2023, 4, 18), LastDay = new(2023, 7, 8) } + }, + OpeningHours = + { + new(DayOfWeek.Sunday, null, null), + new(DayOfWeek.Monday, new(8, 00), new(18, 00)), + new(DayOfWeek.Tuesday, new(8, 00), new(18, 00)), + new(DayOfWeek.Wednesday, new(8, 00), new(18, 00)), + new(DayOfWeek.Thursday, new(8, 00), new(18, 00)), + new(DayOfWeek.Friday, new(8, 00), new(18, 00)), + new(DayOfWeek.Saturday, new(8, 00), new(17, 00)) + } + }, + new School + { + Name = "Farr High School", + Founded = new(1964, 5, 1), + Terms = + { + new() { Name = "Autumn", FirstDay = new(2022, 8, 16), LastDay = new(2022, 12, 23) }, + new() { Name = "Winter", FirstDay = new(2023, 1, 9), LastDay = new(2023, 3, 31) }, + new() { Name = "Summer", FirstDay = new(2023, 4, 17), LastDay = new(2023, 6, 29) } + }, + OpeningHours = + { + new(DayOfWeek.Sunday, null, null), + new(DayOfWeek.Monday, new(8, 45), new(15, 35)), + new(DayOfWeek.Tuesday, new(8, 45), new(15, 35)), + new(DayOfWeek.Wednesday, new(8, 45), new(15, 35)), + new(DayOfWeek.Thursday, new(8, 45), new(15, 35)), + new(DayOfWeek.Friday, new(8, 45), new(12, 50)), + new(DayOfWeek.Saturday, null, null) + } + }); + + await SaveChangesAsync(); + } + } + + public class BritishSchoolsContext : BritishSchoolsContextBase + { + } + + public class BritishSchoolsContextJson : BritishSchoolsContextBase + { + + public override bool UsesJson => true; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity().OwnsMany(e => e.OpeningHours).ToJson(); + } + } + + public class BritishSchoolsContextSqlite : BritishSchoolsContextBase + { + public BritishSchoolsContextSqlite() + : base(useSqlite: true) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity().OwnsMany( + e => e.OpeningHours, b => + { + b.Property("Id"); + b.HasKey("Id"); + }); + } + } + + public class School + { + public int Id { get; set; } + public string Name { get; set; } = null!; + public DateOnly Founded { get; set; } + public DateTime LastVisited { get; set; } + public TimeSpan LegacyTime { get; set; } + public List Terms { get; } = new(); + public List OpeningHours { get; } = new(); + } + + public class Term + { + public int Id { get; set; } + public string Name { get; set; } = null!; + public DateOnly FirstDay { get; set; } + public DateOnly LastDay { get; set; } + public School School { get; set; } = null!; + } + + [Owned] + public class OpeningHours + { + public OpeningHours(DayOfWeek dayOfWeek, TimeOnly? opensAt, TimeOnly? closesAt) + { + DayOfWeek = dayOfWeek; + OpensAt = opensAt; + ClosesAt = closesAt; + } + + public DayOfWeek DayOfWeek { get; private set; } + public TimeOnly? OpensAt { get; set; } + public TimeOnly? ClosesAt { get; set; } + } +} diff --git a/samples/core/Miscellaneous/NewInEFCore9/ModelBuildingSample.cs b/samples/core/Miscellaneous/NewInEFCore9/ModelBuildingSample.cs index 487cc5ea22..5555917b6a 100644 --- a/samples/core/Miscellaneous/NewInEFCore9/ModelBuildingSample.cs +++ b/samples/core/Miscellaneous/NewInEFCore9/ModelBuildingSample.cs @@ -56,22 +56,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasFillFactor(80); #endregion - #region UseCache - modelBuilder.HasSequence("MyCachedSequence") - .HasMin(10).HasMax(255000) - .IsCyclic() - .StartsAt(11).IncrementsBy(2) - .UseCache(3); - #endregion - - #region UseNoCache - modelBuilder.HasSequence("MyUncachedSequence") - .HasMin(10).HasMax(255000) - .IsCyclic() - .StartsAt(11).IncrementsBy(2) - .UseNoCache(); - #endregion - #region DefaultCache modelBuilder.HasSequence("MySequence") .HasMin(10).HasMax(255000) diff --git a/samples/core/Miscellaneous/NewInEFCore9/NewInEFCore9.csproj b/samples/core/Miscellaneous/NewInEFCore9/NewInEFCore9.csproj index 45bacb8f74..02b03bce32 100644 --- a/samples/core/Miscellaneous/NewInEFCore9/NewInEFCore9.csproj +++ b/samples/core/Miscellaneous/NewInEFCore9/NewInEFCore9.csproj @@ -10,16 +10,17 @@ - - - - - - - - - + + + + + + + + + + diff --git a/samples/core/Miscellaneous/NewInEFCore9/NullSemanticsSample.cs b/samples/core/Miscellaneous/NewInEFCore9/NullSemanticsSample.cs new file mode 100644 index 0000000000..69225c523c --- /dev/null +++ b/samples/core/Miscellaneous/NewInEFCore9/NullSemanticsSample.cs @@ -0,0 +1,156 @@ +namespace NewInEfCore9; + +public static class NullSemanticsSample +{ + public static Task Null_semantics_improvements_in_EF9() + { + PrintSampleName(); + return NullSemanticsInComparisonTest(); + } + + public static Task Null_semantics_improvements_in_EF9_on_SQLite() + { + PrintSampleName(); + return NullSemanticsInComparisonTest(); + } + + private static async Task NullSemanticsInComparisonTest() + where TContext : NullSemanticsContextBase, new() + { + await using var context = new TContext(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + await context.Seed(); + + context.LoggingEnabled = true; + context.ChangeTracker.Clear(); + + Console.WriteLine(); + Console.WriteLine("C# null semantics for comparison operators:"); + Console.WriteLine(); + + #region NegatedNullableComparisonFilter + var negatedNullableComparisonFilter = await context.Entities + .Where(x => !(x.NullableIntOne > x.NullableIntTwo)) + .Select(x => new { x.NullableIntOne, x.NullableIntTwo }).ToListAsync(); + #endregion + + var negatedNullableComparisonFilterL2O = await context.Entities.AsAsyncEnumerable().Where(x => !(x.NullableIntOne > x.NullableIntTwo)).Select(x => new { x.NullableIntOne, x.NullableIntTwo }).ToListAsync(); + + #region NullableComparisonProjection + var nullableComparisonProjection = await context.Entities.Select(x => new + { + x.NullableIntOne, + x.NullableIntTwo, + Operation = x.NullableIntOne > x.NullableIntTwo + }).ToListAsync(); + #endregion + + var nullableComparisonProjectionL2O = await context.Entities.AsAsyncEnumerable().Select(x => new { x.NullableIntOne, x.NullableIntTwo, Operation = x.NullableIntOne > x.NullableIntTwo }).ToListAsync(); + + #region NegatedNullableComparisonProjection + var negatedNullableComparisonProjection = await context.Entities.Select(x => new + { + x.NullableIntOne, + x.NullableIntTwo, + Operation = !(x.NullableIntOne > x.NullableIntTwo) + }).ToListAsync(); + #endregion + + var negatedNullableComparisonProjectionL2O = await context.Entities.AsAsyncEnumerable().Select(x => new { x.NullableIntOne, x.NullableIntTwo, Operation = !(x.NullableIntOne > x.NullableIntTwo) }).ToListAsync(); + } + + private static void PrintSampleName([CallerMemberName] string? methodName = null) + { + Console.WriteLine($">>>> Sample: {methodName}"); + Console.WriteLine(); + } + + public class NullSemanticsEntity + { + public int Id { get; set; } + + public int? NullableIntOne { get; set; } + public int? NullableIntTwo { get; set; } + public bool? NullableBoolOne { get; set; } + public bool? NullableBoolTwo { get; set; } + + public int Int { get; set; } + public bool BoolOne { get; set;} + public bool BoolTwo { get; set; } + + } + + public class NullSemanticsContext : NullSemanticsContextBase + { + } + + public class NullSemanticsContextSqlite : NullSemanticsContextBase + { + public NullSemanticsContextSqlite() + : base(useSqlite: true) + { + } + } + + public abstract class NullSemanticsContextBase : DbContext + { + protected NullSemanticsContextBase(bool useSqlite = false) + { + UseSqlite = useSqlite; + } + + public bool UseSqlite { get; } + public bool LoggingEnabled { get; set; } + + public DbSet Entities => Set(); + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => (UseSqlite + ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") + : optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) + .EnableSensitiveDataLogging() + .LogTo( + s => + { + if (LoggingEnabled) + { + Console.WriteLine(s); + } + }, LogLevel.Information); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().Property(x => x.Id).ValueGeneratedNever(); + } + + public async Task Seed() + { + var entities = new List(); + (int? Int, bool? Bool)[] data = [ (1, true), (2, false), (null, null) ]; + + var k = 0; + for (var i = 0; i < data.Length; i++) + { + for (var j = 0; j < data.Length; j++) + { + k++; + entities.Add(new NullSemanticsEntity + { + Id = k, + NullableBoolOne = data[i].Bool, + NullableBoolTwo = data[j].Bool, + NullableIntOne = data[i].Int, + NullableIntTwo = data[j].Int, + BoolOne = data[k % 2].Bool!.Value, + BoolTwo = data[(k + 1) % 2].Bool!.Value, + Int = data[k % 2].Int!.Value, + }); + } + } + + await AddRangeAsync(entities); + await SaveChangesAsync(); + } + } +} diff --git a/samples/core/Miscellaneous/NewInEFCore9/PrimitiveCollectionsSample.cs b/samples/core/Miscellaneous/NewInEFCore9/PrimitiveCollectionsSample.cs new file mode 100644 index 0000000000..1667738a16 --- /dev/null +++ b/samples/core/Miscellaneous/NewInEFCore9/PrimitiveCollectionsSample.cs @@ -0,0 +1,509 @@ +using System.Collections; +using System.Collections.ObjectModel; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace NewInEfCore9; + +public static class PrimitiveCollectionsSample +{ + public static Task Queries_using_readonly_primitive_collections() + { + PrintSampleName(); + return ContainsTest(); + } + + public static Task Queries_using_readonly_primitive_collections_SQLite() + { + PrintSampleName(); + return ContainsTest(); + } + + private static async Task ContainsTest() + where TContext : PubsAndWalksContextBase, new() + { + await using var context = new TContext(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + await context.Seed(); + + context.LoggingEnabled = true; + context.ChangeTracker.Clear(); + + var terrains = new[] { Terrain.River, Terrain.Beach, Terrain.Park }; + var walksWithTerrain = await context.Walks + .Where(e => terrains.Contains(e.Terrain)) + .Select(e => e.Name) + .ToListAsync(); + + Console.WriteLine($"\nWalks with given terrain are {string.Join(", ", walksWithTerrain.Select(w => $"\"{w}\""))}"); + + var beer = "Heineken"; + var pubsWithHeineken = await context.Pubs + .Where(e => e.Beers.Contains(beer)) + .Select(e => e.Name) + .ToListAsync(); + + Console.WriteLine($"\nPubs with {beer} are {string.Join(", ", pubsWithHeineken)}"); + + var beers = new[] { "Carling", "Heineken", "Stella Artois", "Carlsberg" }; + var pubsWithLager = await context.Pubs + .Where(e => beers.Any(b => e.Beers.Contains(b))) + .Select(e => e.Name) + .ToListAsync(); + + Console.WriteLine($"\nPubs with lager are {string.Join(", ", pubsWithLager)}"); + + var thisYear = DateTime.Now.Year; + var pubsVisitedThisYear = await context.Pubs + .Where(e => e.DaysVisited.Any(v => v.Year == thisYear)) + .Select(e => e.Name) + .ToListAsync(); + + Console.WriteLine($"\nPubs visited this year are {string.Join(", ", pubsVisitedThisYear)}"); + + var pubsVisitedInOrder = await context.Pubs + .Select( + e => new + { + e.Name, + FirstVisited = e.DaysVisited.OrderBy(v => v).First(), + LastVisited = e.DaysVisited.OrderByDescending(v => v).First(), + }) + .OrderBy(p => p.FirstVisited) + .ToListAsync(); + + foreach (var pub in pubsVisitedInOrder) + { + Console.WriteLine($"{pub.Name} first visited on {pub.FirstVisited} and last visited on {pub.LastVisited}"); + } + + #region WalksWithADrink + var walksWithADrink = await context.Walks.Select( + w => new + { + WalkName = w.Name, + PubName = w.ClosestPub.Name, + Count = w.DaysVisited.Count(v => w.ClosestPub.DaysVisited.Contains(v)), + TotalCount = w.DaysVisited.Count + }).ToListAsync(); + #endregion + + Console.WriteLine(); + foreach (var walk in walksWithADrink) + { + Console.WriteLine($"{walk.PubName} was visited {walk.Count} times in {walk.TotalCount} \"{walk.WalkName}\" walks."); + } + } + + private static void PrintSampleName([CallerMemberName] string? methodName = null) + { + Console.WriteLine($">>>> Sample: {methodName}"); + Console.WriteLine(); + } + + public class MyCollection : IList + { + private readonly List _list = new(); + public IEnumerator GetEnumerator() => _list.GetEnumerator(); + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + public void Add(int item) => _list.Add(item); + public void Clear() => _list.Clear(); + public bool Contains(int item) => _list.Contains(item); + public void CopyTo(int[] array, int arrayIndex) => _list.CopyTo(array, arrayIndex); + public bool Remove(int item) => _list.Remove(item); + public int Count => _list.Count; + public bool IsReadOnly => ((ICollection)_list).IsReadOnly; + public int IndexOf(int item) => _list.IndexOf(item); + public void Insert(int index, int item) => _list.Insert(index, item); + public void RemoveAt(int index) => _list.RemoveAt(index); + + public int this[int index] + { + get => _list[index]; + set => _list[index] = value; + } + } + + public class PrimitiveCollections + { + public int Id { get; set; } + public IReadOnlyList Ints { get; set; } = null!; + public IReadOnlyCollection Strings { get; set; } = null!; + public ReadOnlyCollection DateTimes { get; set; } = null!; + public IList Dates { get; set; } = null!; + + [MaxLength(2500)] + [Unicode(false)] + public uint[] UnsignedInts { get; set; } = null!; + + public ObservableCollection Guids { get; set; } = null!; + public List Booleans { get; set; } = null!; + public List Urls { get; set; } = null!; + public MyCollection SomeInts { get; set; } = null!; + public List GetOnlyInts { get; } = new(); + + // ReSharper disable once CollectionNeverUpdated.Local + private readonly List _intsField = new(); + + public List DddIds { get; set; } = null!; + } + + public readonly struct DddId + { + public DddId(int value) + { + Value = value; + } + + public int Value { get; } + } + + public class DddIdConverter : ValueConverter + { + public DddIdConverter() + : base(v => v.Value, v => new DddId()) + { + } + } + + public class DogWalk + { + public DogWalk(string name) + { + Name = name; + } + + public int Id { get; set; } + public string Name { get; set; } + public Terrain Terrain { get; set; } + public required ReadOnlyCollection DaysVisited { get; set; } + public Pub ClosestPub { get; set; } = null!; + } + + public enum Terrain + { + Forest, + River, + Hills, + Village, + Park, + Beach, + } + + public class Pub + { + public Pub(string name, IReadOnlyCollection beers) + { + Name = name; + Beers = beers; + } + + public int Id { get; set; } + public string Name { get; set; } + public IReadOnlyCollection Beers { get; set; } + + private List _daysVisited = new(); + public IReadOnlyList DaysVisited => _daysVisited; + } + + public class PubsAndWalksContext : PubsAndWalksContextBase + { + } + + public class PubsAndWalksContextSqlite : PubsAndWalksContextBase + { + public PubsAndWalksContextSqlite() + : base(useSqlite: true) + { + } + } + + public abstract class PubsAndWalksContextBase : DbContext + { + protected PubsAndWalksContextBase(bool useSqlite = false) + { + UseSqlite = useSqlite; + } + + public bool UseSqlite { get; } + public bool LoggingEnabled { get; set; } + + public DbSet Walks => Set(); + public DbSet Pubs => Set(); + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => (UseSqlite + ? optionsBuilder.UseSqlite(@$"DataSource={GetType().Name}.db") + : optionsBuilder.UseSqlServer( + @$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0")) + //sqlServerOptionsBuilder => sqlServerOptionsBuilder.UseCompatibilityLevel(120))) + .EnableSensitiveDataLogging() + .LogTo( + s => + { + if (LoggingEnabled) + { + Console.WriteLine(s); + } + }, LogLevel.Information); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder + .Entity() + .PrimitiveCollection(e => e.Booleans) + .HasMaxLength(1024) + .IsUnicode(false); + + modelBuilder + .Entity() + .PrimitiveCollection(e => e.Guids) + .HasColumnType("nvarchar(2000)"); + + modelBuilder + .Entity() + .PrimitiveCollection(e => e.GetOnlyInts); + + modelBuilder + .Entity() + .PrimitiveCollection(e => e.DddIds) + .ElementType(b => b.HasConversion()); + + modelBuilder + .Entity() + .Property>("_intsField"); + + modelBuilder.Entity().Property(e => e.Terrain).HasConversion(); + modelBuilder.Entity().PrimitiveCollection(e => e.DaysVisited); + } + + protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) + { + configurationBuilder + .Properties>() + .AreUnicode(false) + .HaveMaxLength(4000); + + configurationBuilder + .Properties() + .HaveMaxLength(2000); + + configurationBuilder + .DefaultTypeMapping() + .HasConversion(); + } + + public async Task Seed() + { + Add( + new PrimitiveCollections + { + Ints = new[] { 1, 2, 3 }, + Strings = new List { "One", "Two", "Three" }, + DateTimes = + new ReadOnlyCollection([new(2023, 1, 1, 1, 1, 1), new(2023, 2, 2, 2, 2, 2), new(2023, 3, 3, 3, 3, 3)]), + Dates = new List { new(2023, 1, 1), new(2023, 2, 2), new(2023, 3, 3) }, + UnsignedInts = new uint[] { 1, 2, 3 }, + Guids = new() { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() }, + Booleans = new() { true, false, true }, + Urls = new() { new("https://127.0.0.1/"), new("http://192.168.0.1/"), new("https://devblogs.microsoft.com/dotnet/") }, + SomeInts = new() { 1, 2, 3 }, + DddIds = new() { new(1), new(2), new(3) }, + }); + + var oak = new Pub("The Royal Oak", new[] { "Oakham", "Carling", "Guinness", "John Smiths", "Bathams", "Tennents" }); + ((List)oak.DaysVisited).AddRange( + [ + new(2021, 1, 2), + new(2021, 8, 7), + new(2023, 3, 22), + new(2022, 4, 22), + new(2022, 7, 21), + new(2022, 6, 21), + ]); + + var feathers = new Pub("The Prince of Wales Feathers", new[] { "Heineken", "John Smiths", "Stella Artois", "Carlsberg" }); + ((List)feathers.DaysVisited).AddRange( + [ + new(2022, 11, 17), + new(2021, 9, 25), + new(2022, 12, 21), + new(2022, 11, 7), + new(2022, 8, 9), + new(2022, 3, 10), + new(2021, 12, 1), + new(2022, 3, 8), + new(2022, 2, 28), + new(2021, 5, 10), + new(2021, 6, 25), + ]); + + var swan = new Pub( + "The White Swan", new[] { "Oakham", "Carling", "Guinness", "Heineken", "Stella Artois", "Carlsberg", "Bathams" }); + ((List)swan.DaysVisited).AddRange( + [ + new(2021, 2, 24), + new(2022, 8, 3), + new(2022, 9, 14), + new(2022, 5, 5), + new(2022, 7, 13), + new(2021, 7, 18), + new(2021, 7, 23), + ]); + + var fbi = new Pub("Farr Bay Inn", new[] { "Guinness", "Heineken", "Carlsberg", "Bathams", "Tennents" }); + ((List)fbi.DaysVisited).AddRange( + [ + new(2022, 11, 30), + new(2022, 2, 15), + new(2021, 12, 9), + new(2022, 8, 5), + new(2021, 11, 19), + new(2022, 12, 20), + new(2021, 6, 5), + new(2021, 2, 27), + new(2021, 6, 17), + new(2023, 3, 1), + new(2021, 2, 23), + new(2021, 9, 6), + new(2023, 2, 22), + new(2022, 1, 25), + ]); + + var eltisley = new Pub( + "The Eltisley", + new[] { "Oakham", "Carling", "Guinness", "Heineken", "John Smiths", "Stella Artois", "Carlsberg", "Bathams", "Tennents" }); + ((List)eltisley.DaysVisited).AddRange( + [ + new(2022, 6, 19), + new(2021, 1, 15), + new(2022, 3, 24), + new(2023, 2, 26), + new(2021, 1, 11), + new(2022, 3, 19), + ]); + + await AddRangeAsync( + new DogWalk("Ailsworth to Nene") + { + ClosestPub = feathers, + Terrain = Terrain.River, + DaysVisited = new ReadOnlyCollection( + [ + new(2022, 11, 17), + new(2021, 9, 25), + new(2022, 12, 21), + new(2022, 11, 7), + new(2022, 8, 9), + new(2021, 7, 21), + new(2022, 1, 15), + new(2022, 9, 29), + ]) + }, + new DogWalk("Caster Hanglands") + { + ClosestPub = feathers, + Terrain = Terrain.Forest, + DaysVisited = new ReadOnlyCollection( + [ + new(2022, 3, 10), + new(2021, 6, 5), + new(2021, 12, 1), + new(2022, 3, 8), + new(2022, 6, 10), + new(2022, 11, 13), + new(2022, 2, 28), + new(2021, 5, 10), + new(2021, 6, 25), + ]) + }, + new DogWalk("Ferry Meadows") + { + ClosestPub = oak, + Terrain = Terrain.Park, + DaysVisited = new ReadOnlyCollection( + [ + new(2021, 1, 2), + new(2021, 8, 7), + new(2023, 3, 22), + new(2021, 4, 25), + new(2022, 6, 9), + new(2022, 4, 22), + new(2022, 7, 21), + new(2022, 6, 21), + ]) + }, + new DogWalk("Woodnewton") + { + ClosestPub = swan, + Terrain = Terrain.Village, + DaysVisited = new ReadOnlyCollection( + [ + new(2021, 2, 24), + new(2023, 4, 4), + new(2021, 2, 19), + new(2022, 8, 3), + new(2022, 9, 14), + new(2022, 5, 5), + new(2022, 7, 13), + new(2021, 7, 18), + new(2021, 7, 23), + ]) + }, + new DogWalk("Eltisley") + { + ClosestPub = eltisley, + Terrain = Terrain.Village, + DaysVisited = new ReadOnlyCollection( + [ + new(2022, 6, 19), + new(2021, 1, 15), + new(2021, 9, 29), + new(2022, 3, 24), + new(2023, 3, 2), + new(2023, 2, 26), + new(2021, 1, 11), + new(2022, 3, 19), + ]) + }, + new DogWalk("Farr Beach") + { + ClosestPub = fbi, + Terrain = Terrain.Beach, + DaysVisited = new ReadOnlyCollection( + [ + new(2022, 11, 30), + new(2021, 10, 28), + new(2022, 2, 15), + new(2021, 12, 9), + new(2022, 5, 22), + new(2022, 8, 5), + new(2021, 11, 19), + new(2022, 7, 29), + new(2022, 12, 20), + new(2021, 6, 5), + new(2021, 6, 25), + ]) + }, + new DogWalk("Newlands") + { + ClosestPub = fbi, + Terrain = Terrain.Hills, + DaysVisited = new ReadOnlyCollection( + [ + new(2021, 2, 27), + new(2021, 6, 17), + new(2021, 8, 6), + new(2023, 3, 1), + new(2021, 2, 23), + new(2022, 3, 17), + new(2021, 9, 6), + new(2023, 2, 22), + new(2022, 1, 25), + ]) + }); + + await SaveChangesAsync(); + } + } +} diff --git a/samples/core/Miscellaneous/NewInEFCore9/Program.cs b/samples/core/Miscellaneous/NewInEFCore9/Program.cs index 8fa1f3c3da..e677697b89 100644 --- a/samples/core/Miscellaneous/NewInEFCore9/Program.cs +++ b/samples/core/Miscellaneous/NewInEFCore9/Program.cs @@ -4,6 +4,12 @@ public class Program { public static async Task Main() { + await PrimitiveCollectionsSample.Queries_using_readonly_primitive_collections(); + await PrimitiveCollectionsSample.Queries_using_readonly_primitive_collections_SQLite(); + + await ComplexTypesSample.GropupBy_complex_type_instances(); + await ComplexTypesSample.GropupBy_complex_type_instances_on_SQLite(); + await QuerySample.Query_improvements_in_EF9(); await QuerySample.Query_improvements_in_EF9_on_SQLite(); @@ -11,6 +17,9 @@ public static async Task Main() // await LeastGreatestSample.Queries_using_Least_and_Greatest(); await LeastGreatestSample.Queries_using_Least_and_Greatest_on_SQLite(); + await NullSemanticsSample.Null_semantics_improvements_in_EF9(); + await NullSemanticsSample.Null_semantics_improvements_in_EF9_on_SQLite(); + await CustomConventionsSample.Conventions_enhancements_in_EF9(); await JsonColumnsSample.Columns_from_JSON_are_pruned_when_needed(); @@ -23,5 +32,8 @@ public static async Task Main() await ModelBuildingSample.Model_building_improvements_in_EF9(); + await DateOnlyTimeOnlySample.Can_use_DateOnly_TimeOnly_on_SQLite(); + await DateOnlyTimeOnlySample.Can_use_DateOnly_TimeOnly_on_SQL_Server(); + await DateOnlyTimeOnlySample.Can_use_DateOnly_TimeOnly_on_SQL_Server_with_JSON(); } } diff --git a/samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs b/samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs index 8b855cffc2..1c1ac72f24 100644 --- a/samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs +++ b/samples/core/Miscellaneous/NewInEFCore9/QuerySample.cs @@ -34,8 +34,16 @@ private static async Task QueryTest() #region DefaultParameterization async Task> GetPosts(int id) => await context.Posts - .Where( - e => e.Title == ".NET Blog" && e.Id == id) + .Where(e => e.Title == ".NET Blog" && e.Id == id) + .ToListAsync(); + #endregion + + _ = await GetPostsPrimitiveCollection([1, 2, 3]); + + #region DefaultParameterizationPrimitiveCollection + async Task> GetPostsPrimitiveCollection(int[] ids) + => await context.Posts + .Where(e => e.Title == ".NET Blog" && ids.Contains(e.Id)) .ToListAsync(); #endregion @@ -48,8 +56,7 @@ async Task> GetPosts(int id) #region ForceParameter async Task> GetPostsForceParameter(int id) => await context.Posts - .Where( - e => e.Title == EF.Parameter(".NET Blog") && e.Id == id) + .Where(e => e.Title == EF.Parameter(".NET Blog") && e.Id == id) .ToListAsync(); #endregion @@ -61,9 +68,22 @@ async Task> GetPostsForceParameter(int id) #region ForceConstant async Task> GetPostsForceConstant(int id) + => await context.Posts + .Where(e => e.Title == ".NET Blog" && e.Id == EF.Constant(id)) + .ToListAsync(); + #endregion + + Console.WriteLine(); + Console.WriteLine("Force constant primitive collection:"); + Console.WriteLine(); + + _ = await GetPostsForceConstantCollection([1, 2, 3]); + + #region ForceConstantPrimitiveCollection + async Task> GetPostsForceConstantCollection(int[] ids) => await context.Posts .Where( - e => e.Title == ".NET Blog" && e.Id == EF.Constant(id)) + e => e.Title == ".NET Blog" && EF.Constant(ids).Contains(e.Id)) .ToListAsync(); #endregion @@ -76,11 +96,11 @@ async Task> GetPostsForceConstant(int id) .Posts .Where(p => p.Title.Contains(".NET")); - var results = dotnetPosts + var results = await dotnetPosts .Where(p => p.Id > 2) .Select(p => new { Post = p, TotalCount = dotnetPosts.Count() }) .Skip(2).Take(10) - .ToArray(); + .ToArrayAsync(); #endregion Console.WriteLine(); @@ -96,6 +116,160 @@ async Task> GetPostsForceConstant(int id) .Where(p => p.Tags.Count > 3) .ToHashSetAsync(ReferenceEqualityComparer.Instance); #endregion + + Console.WriteLine(); + Console.WriteLine("Normalize Count != 0:"); + Console.WriteLine(); + + #region NormalizeCount + var blogsWithPost = await context.Blogs + .Where(b => b.Posts.Count > 0) + .ToListAsync(); + #endregion + + if (!context.UseSqlite) + { + #region PatIndexExample + var patIndexExample = await context.Posts.Select(p => new + { + p.Id, + Index = EF.Functions.PatIndex("%.NET%", p.Content) + }).ToListAsync(); + #endregion + } + + Console.WriteLine(); + Console.WriteLine("Case translation improvements:"); + Console.WriteLine(); + + #region CaseTranslationImprovements + var caseSimplification = await context.Blogs + .Select(b => !(b.Id > 5 ? false : true)) + .ToListAsync(); + #endregion + + Console.WriteLine(); + Console.WriteLine("Negated bool improvements:"); + Console.WriteLine(); + + if (context.UseSqlite) + { + #region NegatedContainsImprovements + var negatedContainsSimplification = await context.Posts + .Where(p => !p.Content.Contains("Announcing")) + .Select(p => new { p.Content }).ToListAsync(); + #endregion + } + + #region NegatedBoolProjection + var negatedBoolProjection = await context.Posts.Select(x => new { x.Title, Active = !x.Archived }).ToListAsync(); + #endregion + + Console.WriteLine(); + Console.WriteLine("Enum to string translation:"); + Console.WriteLine(); + + #region EnumToString + var englishAndSpanishBlogs = await context.Blogs + .Where(x => x.Language.ToString().EndsWith("ish")) + .Select(x => x.Name).ToListAsync(); + #endregion + + Console.WriteLine(); + Console.WriteLine("Average on decimal:"); + Console.WriteLine(); + + #region AverageOnDecimal + var averagePostRating = await context.Blogs.Select(x => new + { + x.Name, + AveragePostRating = x.Posts.Average(xx => xx.Rating) + }).ToListAsync(); + #endregion + + Console.WriteLine(); + Console.WriteLine("Convert from object:"); + Console.WriteLine(); + + if (!context.UseSqlite) + { + #region ConvertFromObject + var blogWithConversion = await context.Blogs + .Where(x => Convert.ToDecimal((object)Convert.ToString(x.Id)) == 1.0M) + .ToListAsync(); + #endregion + } + + Console.WriteLine(); + Console.WriteLine("Xor support:"); + Console.WriteLine(); + + if (!context.UseSqlite) + { + #region XorSupport + var xorSupportBool = await context.Posts.CountAsync(x => x.Archived ^ (x.Rating > 3.5M)); + var xorSupportInt = await context.Posts.Where(x => (x.Id ^ 7) > 10).ToListAsync(); + #endregion + } + + Console.WriteLine(); + Console.WriteLine("Aggregate over subquery/aggregate:"); + Console.WriteLine(); + #region AggregateOverSubquery + var latestPostsAverageRatingByLanguage = await context.Blogs + .Select(x => new + { + x.Language, + LatestPostRating = x.Posts.OrderByDescending(xx => xx.PublishedOn).FirstOrDefault()!.Rating + }) + .GroupBy(x => x.Language) + .Select(x => x.Average(xx => xx.LatestPostRating)) + .ToListAsync(); + #endregion + + // Max over decimal is not supported on Sqlite + if (!context.UseSqlite) + { + #region AggregateOverAggregate + var topRatedPostsAverageRatingByLanguage = await context.Blogs. + Select(x => new + { + x.Language, + TopRating = x.Posts.Max(x => x.Rating) + }) + .GroupBy(x => x.Language) + .Select(x => x.Average(xx => xx.TopRating)) + .ToListAsync(); + #endregion + } + + Console.WriteLine(); + Console.WriteLine("Order and OrderDescending:"); + Console.WriteLine(); + + #region OrderOrderDescending + var orderOperation = await context.Blogs + .Order() + .Select(x => new + { + x.Name, + OrderedPosts = x.Posts.OrderDescending().ToList(), + OrderedTitles = x.Posts.Select(xx => xx.Title).Order().ToList() + }) + .ToListAsync(); + #endregion + + #region OrderByEquivalent + var orderByEquivalent = await context.Blogs + .OrderBy(x => x.Id) + .Select(x => new + { + x.Name, + OrderedPosts = x.Posts.OrderByDescending(xx => xx.Id).ToList(), + OrderedTitles = x.Posts.Select(xx => xx.Title).OrderBy(xx => xx).ToList() + }) + .ToListAsync(); + #endregion } private static void PrintSampleName([CallerMemberName] string? methodName = null) diff --git a/samples/core/Miscellaneous/NullableReferenceTypes/NullableReferenceTypesContext.cs b/samples/core/Miscellaneous/NullableReferenceTypes/NullableReferenceTypesContext.cs index b65950a184..d38a0e7461 100644 --- a/samples/core/Miscellaneous/NullableReferenceTypes/NullableReferenceTypesContext.cs +++ b/samples/core/Miscellaneous/NullableReferenceTypes/NullableReferenceTypesContext.cs @@ -11,7 +11,7 @@ public class NullableReferenceTypesContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFNullableReferenceTypes;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFNullableReferenceTypes;Trusted_Connection=True;ConnectRetryCount=0"); } #endregion } diff --git a/samples/core/Miscellaneous/NullableReferenceTypes/Program.cs b/samples/core/Miscellaneous/NullableReferenceTypes/Program.cs index 450f3589bd..cfd362f67a 100644 --- a/samples/core/Miscellaneous/NullableReferenceTypes/Program.cs +++ b/samples/core/Miscellaneous/NullableReferenceTypes/Program.cs @@ -1,17 +1,18 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace NullableReferenceTypes { public static class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { using (var context = new NullableReferenceTypesContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); context.Add(new Customer("John", "Doe")); @@ -26,19 +27,19 @@ private static void Main(string[] args) } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new NullableReferenceTypesContext()) { - var john = context.Customers.First(c => c.FirstName == "John"); + var john = await context.Customers.FirstAsync(c => c.FirstName == "John"); Console.WriteLine("John's last name: " + john.LastName); #region Including - var order = context.Orders + var order = await context.Orders .Include(o => o.OptionalInfo!) .ThenInclude(op => op.ExtraAdditionalInfo) - .Single(); + .SingleAsync(); #endregion // The following would be a programming bug: we forgot to include ShippingAddress above. It would throw InvalidOperationException. diff --git a/samples/core/Miscellaneous/SaveChangesInterception/Program.cs b/samples/core/Miscellaneous/SaveChangesInterception/Program.cs index cdc019b77c..32bc224c8e 100644 --- a/samples/core/Miscellaneous/SaveChangesInterception/Program.cs +++ b/samples/core/Miscellaneous/SaveChangesInterception/Program.cs @@ -22,13 +22,13 @@ public static async Task Main() using (var context = new BlogsContext()) { - var blog = context.Blogs.Include(e => e.Posts).Single(); + var blog = await context.Blogs.Include(e => e.Posts).SingleAsync(); blog.Name = "EF Core Blog"; context.Remove(blog.Posts.First()); blog.Posts.Add(new Post { Title = "EF Core 6.0!" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } // Do an insert that will fail @@ -50,7 +50,7 @@ public static async Task Main() using (var context = new AuditContext("DataSource=audit.db")) { - foreach (var audit in context.SaveChangesAudits.Include(e => e.Entities).ToList()) + foreach (var audit in await context.SaveChangesAudits.Include(e => e.Entities).ToListAsync()) { Console.WriteLine( $"Audit {audit.AuditId} from {audit.StartTime} to {audit.EndTime} was{(audit.Succeeded ? "" : " not")} successful."); diff --git a/samples/core/Modeling/BulkConfiguration/BlogsContext.cs b/samples/core/Modeling/BulkConfiguration/BlogsContext.cs index f64cf6f82c..85a831cf7c 100644 --- a/samples/core/Modeling/BulkConfiguration/BlogsContext.cs +++ b/samples/core/Modeling/BulkConfiguration/BlogsContext.cs @@ -183,7 +183,7 @@ public abstract class BlogsContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => (optionsBuilder.UseSqlServer( - @$"Server=(localdb)\mssqllocaldb;Database=EFModeling.BulkConfiguration.{GetType().Name}")) + @$"Server=(localdb)\mssqllocaldb;Database=EFModeling.BulkConfiguration.{GetType().Name};ConnectRetryCount=0")) .EnableSensitiveDataLogging() .LogTo( s => diff --git a/samples/core/Modeling/BulkConfiguration/CurrencyContext.cs b/samples/core/Modeling/BulkConfiguration/CurrencyContext.cs index c8ed0ed99a..97fe4f3dcb 100644 --- a/samples/core/Modeling/BulkConfiguration/CurrencyContext.cs +++ b/samples/core/Modeling/BulkConfiguration/CurrencyContext.cs @@ -19,7 +19,7 @@ protected override void ConfigureConventions(ModelConfigurationBuilder configura protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFModeling.BulkConfiguration.Currency;Trusted_Connection=True") + @"Server=(localdb)\mssqllocaldb;Database=EFModeling.BulkConfiguration.Currency;Trusted_Connection=True;ConnectRetryCount=0") .LogTo(Console.WriteLine, minimumLevel: Microsoft.Extensions.Logging.LogLevel.Information) .EnableSensitiveDataLogging(); -} \ No newline at end of file +} diff --git a/samples/core/Modeling/BulkConfiguration/MetadataAPIContext.cs b/samples/core/Modeling/BulkConfiguration/MetadataAPIContext.cs index ff09e48e2d..c8f2b87fe2 100644 --- a/samples/core/Modeling/BulkConfiguration/MetadataAPIContext.cs +++ b/samples/core/Modeling/BulkConfiguration/MetadataAPIContext.cs @@ -26,7 +26,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFModeling.BulkConfiguration;Trusted_Connection=True") + @"Server=(localdb)\mssqllocaldb;Database=EFModeling.BulkConfiguration;Trusted_Connection=True;ConnectRetryCount=0") .LogTo(Console.WriteLine, minimumLevel: Microsoft.Extensions.Logging.LogLevel.Information) .EnableSensitiveDataLogging(); -} \ No newline at end of file +} diff --git a/samples/core/Modeling/BulkConfiguration/ModelBuildingConventionsSample.cs b/samples/core/Modeling/BulkConfiguration/ModelBuildingConventionsSample.cs index f6ab99d7c0..64bcd9d526 100644 --- a/samples/core/Modeling/BulkConfiguration/ModelBuildingConventionsSample.cs +++ b/samples/core/Modeling/BulkConfiguration/ModelBuildingConventionsSample.cs @@ -58,10 +58,10 @@ private static async Task ConventionsTest() Console.WriteLine(context.Model.ToDebugString()); - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts).ThenInclude(post => post.Author) .Include(blog => blog.Posts).ThenInclude(post => post.Tags) - .ToList(); + .ToListAsync(); blogs[0].Name += "Changed"; blogs[1].Posts[2].Content += "Changed"; @@ -273,7 +273,7 @@ public class LaundryContext : DbContext public DbSet LaundryBaskets => Set(); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name}"); + => optionsBuilder.UseSqlServer(@$"Server=(localdb)\mssqllocaldb;Database={GetType().Name};ConnectRetryCount=0"); #region ReplaceConvention protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) diff --git a/samples/core/Modeling/BulkConfiguration/PreConventionContext.cs b/samples/core/Modeling/BulkConfiguration/PreConventionContext.cs index 96f45459e3..79e6c944da 100644 --- a/samples/core/Modeling/BulkConfiguration/PreConventionContext.cs +++ b/samples/core/Modeling/BulkConfiguration/PreConventionContext.cs @@ -37,7 +37,7 @@ protected override void ConfigureConventions(ModelConfigurationBuilder configura protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFModeling.BulkConfiguration;Trusted_Connection=True") + @"Server=(localdb)\mssqllocaldb;Database=EFModeling.BulkConfiguration;Trusted_Connection=True;ConnectRetryCount=0") .LogTo(Console.WriteLine, minimumLevel: Microsoft.Extensions.Logging.LogLevel.Information) .EnableSensitiveDataLogging(); -} \ No newline at end of file +} diff --git a/samples/core/Modeling/BulkConfiguration/Program.cs b/samples/core/Modeling/BulkConfiguration/Program.cs index 7ca48021da..40106b60b0 100644 --- a/samples/core/Modeling/BulkConfiguration/Program.cs +++ b/samples/core/Modeling/BulkConfiguration/Program.cs @@ -14,12 +14,12 @@ private static async Task Main() using (var context = new MetadataAPIContext()) { - RoundtripValue(context); + await RoundtripValue(context); } using (var context = new PreConventionContext()) { - RoundtripValue(context); + await RoundtripValue(context); } await ModelBuildingConventionsSample.No_foreign_key_index_convention(); @@ -31,13 +31,13 @@ private static async Task Main() Console.WriteLine("Sample finished."); } - private static void RoundtripValue(DbContext context) + private static async Task RoundtripValue(DbContext context) { Console.WriteLine("Using " + context.GetType().Name); Console.WriteLine("Deleting and re-creating database..."); Console.WriteLine(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); Console.WriteLine(); Console.WriteLine("Done. Database is clean and fresh."); @@ -47,10 +47,10 @@ private static void RoundtripValue(DbContext context) Console.WriteLine("Save a new product with price: " + product.Price.Amount); Console.WriteLine(); - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine(); - Console.WriteLine("Read the entity back with price: " + context.Set().Single().Price.Amount); + Console.WriteLine("Read the entity back with price: " + (await context.Set().SingleAsync()).Price.Amount); Console.WriteLine(); } } diff --git a/samples/core/Modeling/DataSeeding/Blog.cs b/samples/core/Modeling/DataSeeding/Blog.cs index a80819e484..048a34240c 100644 --- a/samples/core/Modeling/DataSeeding/Blog.cs +++ b/samples/core/Modeling/DataSeeding/Blog.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; namespace EFModeling.DataSeeding; @@ -8,4 +8,4 @@ public class Blog public string Url { get; set; } public virtual ICollection Posts { get; set; } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/DataSeeding/City.cs b/samples/core/Modeling/DataSeeding/City.cs new file mode 100644 index 0000000000..3811f6054d --- /dev/null +++ b/samples/core/Modeling/DataSeeding/City.cs @@ -0,0 +1,9 @@ +namespace EFModeling.DataSeeding; + +public class City +{ + public int Id { get; set; } + public string Name { get; set; } + public int LocatedInId { get; set; } + public Country LocatedIn { get; set; } +} diff --git a/samples/core/Modeling/DataSeeding/Country.cs b/samples/core/Modeling/DataSeeding/Country.cs new file mode 100644 index 0000000000..cecba3ae2f --- /dev/null +++ b/samples/core/Modeling/DataSeeding/Country.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace EFModeling.DataSeeding; + +public class Country +{ + public int CountryId { get; set; } + public string Name { get; set; } + public virtual ICollection OfficialLanguages { get; set; } +} diff --git a/samples/core/Modeling/DataSeeding/DataSeeding.csproj b/samples/core/Modeling/DataSeeding/DataSeeding.csproj index a166c7e088..0000c4247b 100644 --- a/samples/core/Modeling/DataSeeding/DataSeeding.csproj +++ b/samples/core/Modeling/DataSeeding/DataSeeding.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/samples/core/Modeling/DataSeeding/DataSeedingContext.cs b/samples/core/Modeling/DataSeeding/DataSeedingContext.cs index a8d9104f14..182fa97b31 100644 --- a/samples/core/Modeling/DataSeeding/DataSeedingContext.cs +++ b/samples/core/Modeling/DataSeeding/DataSeedingContext.cs @@ -1,3 +1,4 @@ +using System.Linq; using Microsoft.EntityFrameworkCore; namespace EFModeling.DataSeeding; @@ -7,40 +8,28 @@ public class DataSeedingContext : DbContext public DbSet Blogs { get; set; } public DbSet Posts { get; set; } + #region ContextOptionSeeding protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFDataSeeding;Trusted_Connection=True"); - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity(entity => { entity.Property(e => e.Url).IsRequired(); }); - - #region BlogSeed - modelBuilder.Entity().HasData(new Blog { BlogId = 1, Url = "http://sample.com/" }); - #endregion - - modelBuilder.Entity( - entity => + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFDataSeeding;Trusted_Connection=True;ConnectRetryCount=0") + .UseSeeding((context, _) => { - entity.HasOne(d => d.Blog) - .WithMany(p => p.Posts) - .HasForeignKey("BlogId"); + var testBlog = context.Set().FirstOrDefault(b => b.Url == "http://test.com/"); + if (testBlog == null) + { + context.Set().Add(new Blog { Url = "http://test.com/" }); + context.SaveChanges(); + } + }) + .UseAsyncSeeding(async (context, _, cancellationToken) => + { + var testBlog = await context.Set().FirstOrDefaultAsync(b => b.Url == "http://test.com/", cancellationToken); + if (testBlog == null) + { + context.Set().Add(new Blog { Url = "http://test.com/" }); + await context.SaveChangesAsync(cancellationToken); + } }); + #endregion +} - #region PostSeed - modelBuilder.Entity().HasData( - new Post { BlogId = 1, PostId = 1, Title = "First post", Content = "Test 1" }); - #endregion - - #region AnonymousPostSeed - modelBuilder.Entity().HasData( - new { BlogId = 1, PostId = 2, Title = "Second post", Content = "Test 2" }); - #endregion - - #region OwnedTypeSeed - modelBuilder.Entity().OwnsOne(p => p.AuthorName).HasData( - new { PostId = 1, First = "Andriy", Last = "Svyryd" }, - new { PostId = 2, First = "Diego", Last = "Vega" }); - #endregion - } -} \ No newline at end of file diff --git a/samples/core/Modeling/DataSeeding/Language.cs b/samples/core/Modeling/DataSeeding/Language.cs new file mode 100644 index 0000000000..03d7dd7554 --- /dev/null +++ b/samples/core/Modeling/DataSeeding/Language.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace EFModeling.DataSeeding; + +public class Language +{ + public int Id { get; set; } + public string Name { get; set; } + + public LanguageDetails Details { get; set; } + public List UsedIn { get; set; } +} diff --git a/samples/core/Modeling/DataSeeding/LanguageDetails.cs b/samples/core/Modeling/DataSeeding/LanguageDetails.cs new file mode 100644 index 0000000000..dc81cf2a84 --- /dev/null +++ b/samples/core/Modeling/DataSeeding/LanguageDetails.cs @@ -0,0 +1,9 @@ +namespace EFModeling.DataSeeding; + +public class LanguageDetails +{ + public bool Phonetic { get; set; } + public bool Tonal { get; set; } + public int PhonemesCount { get; set; } +} + diff --git a/samples/core/Modeling/DataSeeding/ManagingDataContext.cs b/samples/core/Modeling/DataSeeding/ManagingDataContext.cs new file mode 100644 index 0000000000..37c3e359fd --- /dev/null +++ b/samples/core/Modeling/DataSeeding/ManagingDataContext.cs @@ -0,0 +1,68 @@ +using Microsoft.EntityFrameworkCore; + +namespace EFModeling.DataSeeding; + +public class ManagingDataContext : DbContext +{ + public DbSet Countries { get; set; } + public DbSet Cites { get; set; } + public DbSet Languages { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFManagingData;Trusted_Connection=True;ConnectRetryCount=0"); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + #region CountrySeed + modelBuilder.Entity(b => + { + b.Property(x => x.Name).IsRequired(); + b.HasData( + new Country { CountryId = 1, Name = "USA" }, + new Country { CountryId = 2, Name = "Canada" }, + new Country { CountryId = 3, Name = "Mexico" }); + }); + #endregion + + #region CitySeed + modelBuilder.Entity().HasData( + new City { Id = 1, Name = "Seattle", LocatedInId = 1 }, + new City { Id = 2, Name = "Vancouver", LocatedInId = 2 }, + new City { Id = 3, Name = "Mexico City", LocatedInId = 3 }, + new City { Id = 4, Name = "Puebla", LocatedInId = 3 }); + #endregion + + #region LanguageSeed + modelBuilder.Entity(b => + { + b.HasData( + new Language { Id = 1, Name = "English" }, + new Language { Id = 2, Name = "French" }, + new Language { Id = 3, Name = "Spanish" }); + + b.HasMany(x => x.UsedIn) + .WithMany(x => x.OfficialLanguages) + .UsingEntity( + "LanguageCountry", + r => r.HasOne(typeof(Country)).WithMany().HasForeignKey("CountryId").HasPrincipalKey(nameof(Country.CountryId)), + l => l.HasOne(typeof(Language)).WithMany().HasForeignKey("LanguageId").HasPrincipalKey(nameof(Language.Id)), + je => + { + je.HasKey("LanguageId", "CountryId"); + je.HasData( + new { LanguageId = 1, CountryId = 2 }, + new { LanguageId = 2, CountryId = 2 }, + new { LanguageId = 3, CountryId = 3 }); + }); + }); + #endregion + + #region LanguageDetailsSeed + modelBuilder.Entity().OwnsOne(p => p.Details).HasData( + new { LanguageId = 1, Phonetic = false, Tonal = false, PhonemesCount = 44 }, + new { LanguageId = 2, Phonetic = false, Tonal = false, PhonemesCount = 36 }, + new { LanguageId = 3, Phonetic = true, Tonal = false, PhonemesCount = 24 }); + #endregion + } +} diff --git a/samples/core/Modeling/DataSeeding/Migrations/20181102235626_Initial.Designer.cs b/samples/core/Modeling/DataSeeding/Migrations/20181102235626_Initial.Designer.cs deleted file mode 100644 index ee75c16167..0000000000 --- a/samples/core/Modeling/DataSeeding/Migrations/20181102235626_Initial.Designer.cs +++ /dev/null @@ -1,99 +0,0 @@ -// -using System; -using EFModeling.DataSeeding; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -namespace EFModeling.DataSeeding.Migrations -{ - [DbContext(typeof(DataSeedingContext))] - [Migration("20181102235626_Initial")] - partial class Initial - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "2.1.0-rtm-30799") - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("EFModeling.DataSeeding.Blog", b => - { - b.Property("BlogId") - .ValueGeneratedOnAdd() - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("Url") - .IsRequired(); - - b.HasKey("BlogId"); - - b.ToTable("Blogs"); - - b.HasData( - new { BlogId = 1, Url = "http://sample.com/" } - ); - }); - - modelBuilder.Entity("EFModeling.DataSeeding.Post", b => - { - b.Property("PostId") - .ValueGeneratedOnAdd() - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("BlogId"); - - b.Property("Content"); - - b.Property("Title"); - - b.HasKey("PostId"); - - b.HasIndex("BlogId"); - - b.ToTable("Posts"); - - b.HasData( - new { PostId = 1, BlogId = 1, Content = "Test 1", Title = "First post" }, - new { PostId = 2, BlogId = 1, Content = "Test 2", Title = "Second post" } - ); - }); - - modelBuilder.Entity("EFModeling.DataSeeding.Post", b => - { - b.HasOne("EFModeling.DataSeeding.Blog", "Blog") - .WithMany("Posts") - .HasForeignKey("BlogId") - .OnDelete(DeleteBehavior.Cascade); - - b.OwnsOne("EFModeling.DataSeeding.Name", "AuthorName", b1 => - { - b1.Property("PostId") - .ValueGeneratedOnAdd() - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b1.Property("First"); - - b1.Property("Last"); - - b1.ToTable("Posts"); - - b1.HasOne("EFModeling.DataSeeding.Post") - .WithOne("AuthorName") - .HasForeignKey("EFModeling.DataSeeding.Name", "PostId") - .OnDelete(DeleteBehavior.Cascade); - - b1.HasData( - new { PostId = 1, First = "Andriy", Last = "Svyryd" }, - new { PostId = 2, First = "Diego", Last = "Vega" } - ); - }); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/samples/core/Modeling/DataSeeding/Migrations/20181102235626_Initial.cs b/samples/core/Modeling/DataSeeding/Migrations/20181102235626_Initial.cs deleted file mode 100644 index 84129ea41f..0000000000 --- a/samples/core/Modeling/DataSeeding/Migrations/20181102235626_Initial.cs +++ /dev/null @@ -1,80 +0,0 @@ -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace EFModeling.DataSeeding.Migrations -{ - public partial class Initial : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Blogs", - columns: table => new - { - BlogId = table.Column(nullable: false) - .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), - Url = table.Column(nullable: false) - }, - constraints: table => { table.PrimaryKey("PK_Blogs", x => x.BlogId); }); - - migrationBuilder.CreateTable( - name: "Posts", - columns: table => new - { - PostId = table.Column(nullable: false) - .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), - Content = table.Column(nullable: true), - Title = table.Column(nullable: true), - BlogId = table.Column(nullable: false), - AuthorName_First = table.Column(nullable: true), - AuthorName_Last = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Posts", x => x.PostId); - table.ForeignKey( - name: "FK_Posts_Blogs_BlogId", - column: x => x.BlogId, - principalTable: "Blogs", - principalColumn: "BlogId", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.InsertData( - table: "Blogs", - columns: new[] { "BlogId", "Url" }, - values: new object[] { 1, "http://sample.com/" }); - - #region CustomInsert - migrationBuilder.InsertData( - table: "Blogs", - columns: new[] { "Url" }, - values: new object[] { "http://generated.com/" }); - #endregion - - migrationBuilder.InsertData( - table: "Posts", - columns: new[] { "PostId", "BlogId", "Content", "Title", "AuthorName_First", "AuthorName_Last" }, - values: new object[] { 1, 1, "Test 1", "First post", "Andriy", "Svyryd" }); - - migrationBuilder.InsertData( - table: "Posts", - columns: new[] { "PostId", "BlogId", "Content", "Title", "AuthorName_First", "AuthorName_Last" }, - values: new object[] { 2, 1, "Test 2", "Second post", "Diego", "Vega" }); - - migrationBuilder.CreateIndex( - name: "IX_Posts_BlogId", - table: "Posts", - column: "BlogId"); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Posts"); - - migrationBuilder.DropTable( - name: "Blogs"); - } - } -} diff --git a/samples/core/Modeling/DataSeeding/Migrations/20241016041555_Initial.Designer.cs b/samples/core/Modeling/DataSeeding/Migrations/20241016041555_Initial.Designer.cs new file mode 100644 index 0000000000..c1789edf15 --- /dev/null +++ b/samples/core/Modeling/DataSeeding/Migrations/20241016041555_Initial.Designer.cs @@ -0,0 +1,251 @@ +// +using EFModeling.DataSeeding; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace EFModeling.DataSeeding.Migrations +{ + [DbContext(typeof(ManagingDataContext))] + [Migration("20241016041555_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.0-rc.1.24451.1") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("EFModeling.DataSeeding.City", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("LocatedInId") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("LocatedInId"); + + b.ToTable("Cites"); + + b.HasData( + new + { + Id = 1, + LocatedInId = 1, + Name = "Seattle" + }, + new + { + Id = 2, + LocatedInId = 2, + Name = "Vancouver" + }, + new + { + Id = 3, + LocatedInId = 3, + Name = "Mexico City" + }, + new + { + Id = 4, + LocatedInId = 3, + Name = "Puebla" + }); + }); + + modelBuilder.Entity("EFModeling.DataSeeding.Country", b => + { + b.Property("CountryId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("CountryId")); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("CountryId"); + + b.ToTable("Countries"); + + b.HasData( + new + { + CountryId = 1, + Name = "USA" + }, + new + { + CountryId = 2, + Name = "Canada" + }, + new + { + CountryId = 3, + Name = "Mexico" + }); + }); + + modelBuilder.Entity("EFModeling.DataSeeding.Language", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Languages"); + + b.HasData( + new + { + Id = 1, + Name = "English" + }, + new + { + Id = 2, + Name = "French" + }, + new + { + Id = 3, + Name = "Spanish" + }); + }); + + modelBuilder.Entity("LanguageCountry", b => + { + b.Property("LanguageId") + .HasColumnType("int"); + + b.Property("CountryId") + .HasColumnType("int"); + + b.HasKey("LanguageId", "CountryId"); + + b.HasIndex("CountryId"); + + b.ToTable("LanguageCountry"); + + b.HasData( + new + { + LanguageId = 1, + CountryId = 2 + }, + new + { + LanguageId = 2, + CountryId = 2 + }, + new + { + LanguageId = 3, + CountryId = 3 + }); + }); + + modelBuilder.Entity("EFModeling.DataSeeding.City", b => + { + b.HasOne("EFModeling.DataSeeding.Country", "LocatedIn") + .WithMany() + .HasForeignKey("LocatedInId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LocatedIn"); + }); + + modelBuilder.Entity("EFModeling.DataSeeding.Language", b => + { + b.OwnsOne("EFModeling.DataSeeding.LanguageDetails", "Details", b1 => + { + b1.Property("LanguageId") + .HasColumnType("int"); + + b1.Property("PhonemesCount") + .HasColumnType("int"); + + b1.Property("Phonetic") + .HasColumnType("bit"); + + b1.Property("Tonal") + .HasColumnType("bit"); + + b1.HasKey("LanguageId"); + + b1.ToTable("Languages"); + + b1.WithOwner() + .HasForeignKey("LanguageId"); + + b1.HasData( + new + { + LanguageId = 1, + PhonemesCount = 44, + Phonetic = false, + Tonal = false + }, + new + { + LanguageId = 2, + PhonemesCount = 36, + Phonetic = false, + Tonal = false + }, + new + { + LanguageId = 3, + PhonemesCount = 24, + Phonetic = true, + Tonal = false + }); + }); + + b.Navigation("Details"); + }); + + modelBuilder.Entity("LanguageCountry", b => + { + b.HasOne("EFModeling.DataSeeding.Country", null) + .WithMany() + .HasForeignKey("CountryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("EFModeling.DataSeeding.Language", null) + .WithMany() + .HasForeignKey("LanguageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/samples/core/Modeling/DataSeeding/Migrations/20241016041555_Initial.cs b/samples/core/Modeling/DataSeeding/Migrations/20241016041555_Initial.cs new file mode 100644 index 0000000000..9151deece9 --- /dev/null +++ b/samples/core/Modeling/DataSeeding/Migrations/20241016041555_Initial.cs @@ -0,0 +1,158 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace EFModeling.DataSeeding.Migrations +{ + /// + public partial class Initial : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Countries", + columns: table => new + { + CountryId = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Countries", x => x.CountryId); + }); + + migrationBuilder.CreateTable( + name: "Languages", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: true), + Details_Phonetic = table.Column(type: "bit", nullable: true), + Details_Tonal = table.Column(type: "bit", nullable: true), + Details_PhonemesCount = table.Column(type: "int", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Languages", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Cites", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: true), + LocatedInId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Cites", x => x.Id); + table.ForeignKey( + name: "FK_Cites_Countries_LocatedInId", + column: x => x.LocatedInId, + principalTable: "Countries", + principalColumn: "CountryId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "LanguageCountry", + columns: table => new + { + LanguageId = table.Column(type: "int", nullable: false), + CountryId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_LanguageCountry", x => new { x.LanguageId, x.CountryId }); + table.ForeignKey( + name: "FK_LanguageCountry_Countries_CountryId", + column: x => x.CountryId, + principalTable: "Countries", + principalColumn: "CountryId", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_LanguageCountry_Languages_LanguageId", + column: x => x.LanguageId, + principalTable: "Languages", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + #region CustomInsert + migrationBuilder.InsertData( + table: "Countries", + columns: new[] { "CountryId", "Name" }, + values: new object[,] + { + { 1, "USA" }, + { 2, "Canada" }, + { 3, "Mexico" } + }); + + migrationBuilder.InsertData( + table: "Languages", + columns: new[] { "Id", "Name", "Details_PhonemesCount", "Details_Phonetic", "Details_Tonal" }, + values: new object[,] + { + { 1, "English", 44, false, false }, + { 2, "French", 36, false, false }, + { 3, "Spanish", 24, true, false } + }); + + migrationBuilder.InsertData( + table: "Cites", + columns: new[] { "Id", "LocatedInId", "Name" }, + values: new object[,] + { + { 1, 1, "Seattle" }, + { 2, 2, "Vancouver" }, + { 3, 3, "Mexico City" }, + { 4, 3, "Puebla" } + }); + + migrationBuilder.InsertData( + table: "LanguageCountry", + columns: new[] { "CountryId", "LanguageId" }, + values: new object[,] + { + { 2, 1 }, + { 2, 2 }, + { 3, 3 } + }); + #endregion + + migrationBuilder.CreateIndex( + name: "IX_Cites_LocatedInId", + table: "Cites", + column: "LocatedInId"); + + migrationBuilder.CreateIndex( + name: "IX_LanguageCountry_CountryId", + table: "LanguageCountry", + column: "CountryId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Cites"); + + migrationBuilder.DropTable( + name: "LanguageCountry"); + + migrationBuilder.DropTable( + name: "Countries"); + + migrationBuilder.DropTable( + name: "Languages"); + } + } +} diff --git a/samples/core/Modeling/DataSeeding/Migrations/DataSeedingContextModelSnapshot.cs b/samples/core/Modeling/DataSeeding/Migrations/DataSeedingContextModelSnapshot.cs deleted file mode 100644 index 8e54348b37..0000000000 --- a/samples/core/Modeling/DataSeeding/Migrations/DataSeedingContextModelSnapshot.cs +++ /dev/null @@ -1,96 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; - -namespace EFModeling.DataSeeding.Migrations; - -[DbContext(typeof(DataSeedingContext))] -internal class DataSeedingContextModelSnapshot : ModelSnapshot -{ - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "2.1.0-rtm-30799") - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity( - "EFModeling.DataSeeding.Blog", b => - { - b.Property("BlogId") - .ValueGeneratedOnAdd() - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("Url") - .IsRequired(); - - b.HasKey("BlogId"); - - b.ToTable("Blogs"); - - b.HasData( - new { BlogId = 1, Url = "http://sample.com/" } - ); - }); - - modelBuilder.Entity( - "EFModeling.DataSeeding.Post", b => - { - b.Property("PostId") - .ValueGeneratedOnAdd() - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("BlogId"); - - b.Property("Content"); - - b.Property("Title"); - - b.HasKey("PostId"); - - b.HasIndex("BlogId"); - - b.ToTable("Posts"); - - b.HasData( - new { PostId = 1, BlogId = 1, Content = "Test 1", Title = "First post" }, - new { PostId = 2, BlogId = 1, Content = "Test 2", Title = "Second post" } - ); - }); - - modelBuilder.Entity( - "EFModeling.DataSeeding.Post", b => - { - b.HasOne("EFModeling.DataSeeding.Blog", "Blog") - .WithMany("Posts") - .HasForeignKey("BlogId") - .OnDelete(DeleteBehavior.Cascade); - - b.OwnsOne( - "EFModeling.DataSeeding.Name", "AuthorName", b1 => - { - b1.Property("PostId") - .ValueGeneratedOnAdd() - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b1.Property("First"); - - b1.Property("Last"); - - b1.ToTable("Posts"); - - b1.HasOne("EFModeling.DataSeeding.Post") - .WithOne("AuthorName") - .HasForeignKey("EFModeling.DataSeeding.Name", "PostId") - .OnDelete(DeleteBehavior.Cascade); - - b1.HasData( - new { PostId = 1, First = "Andriy", Last = "Svyryd" }, - new { PostId = 2, First = "Diego", Last = "Vega" } - ); - }); - }); -#pragma warning restore 612, 618 - } -} \ No newline at end of file diff --git a/samples/core/Modeling/DataSeeding/Migrations/ManagingDataContextModelSnapshot.cs b/samples/core/Modeling/DataSeeding/Migrations/ManagingDataContextModelSnapshot.cs new file mode 100644 index 0000000000..d8afc9ef32 --- /dev/null +++ b/samples/core/Modeling/DataSeeding/Migrations/ManagingDataContextModelSnapshot.cs @@ -0,0 +1,248 @@ +// +using EFModeling.DataSeeding; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace EFModeling.DataSeeding.Migrations +{ + [DbContext(typeof(ManagingDataContext))] + partial class ManagingDataContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.0-rc.1.24451.1") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("EFModeling.DataSeeding.City", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("LocatedInId") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("LocatedInId"); + + b.ToTable("Cites"); + + b.HasData( + new + { + Id = 1, + LocatedInId = 1, + Name = "Seattle" + }, + new + { + Id = 2, + LocatedInId = 2, + Name = "Vancouver" + }, + new + { + Id = 3, + LocatedInId = 3, + Name = "Mexico City" + }, + new + { + Id = 4, + LocatedInId = 3, + Name = "Puebla" + }); + }); + + modelBuilder.Entity("EFModeling.DataSeeding.Country", b => + { + b.Property("CountryId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("CountryId")); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("CountryId"); + + b.ToTable("Countries"); + + b.HasData( + new + { + CountryId = 1, + Name = "USA" + }, + new + { + CountryId = 2, + Name = "Canada" + }, + new + { + CountryId = 3, + Name = "Mexico" + }); + }); + + modelBuilder.Entity("EFModeling.DataSeeding.Language", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Languages"); + + b.HasData( + new + { + Id = 1, + Name = "English" + }, + new + { + Id = 2, + Name = "French" + }, + new + { + Id = 3, + Name = "Spanish" + }); + }); + + modelBuilder.Entity("LanguageCountry", b => + { + b.Property("LanguageId") + .HasColumnType("int"); + + b.Property("CountryId") + .HasColumnType("int"); + + b.HasKey("LanguageId", "CountryId"); + + b.HasIndex("CountryId"); + + b.ToTable("LanguageCountry"); + + b.HasData( + new + { + LanguageId = 1, + CountryId = 2 + }, + new + { + LanguageId = 2, + CountryId = 2 + }, + new + { + LanguageId = 3, + CountryId = 3 + }); + }); + + modelBuilder.Entity("EFModeling.DataSeeding.City", b => + { + b.HasOne("EFModeling.DataSeeding.Country", "LocatedIn") + .WithMany() + .HasForeignKey("LocatedInId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LocatedIn"); + }); + + modelBuilder.Entity("EFModeling.DataSeeding.Language", b => + { + b.OwnsOne("EFModeling.DataSeeding.LanguageDetails", "Details", b1 => + { + b1.Property("LanguageId") + .HasColumnType("int"); + + b1.Property("PhonemesCount") + .HasColumnType("int"); + + b1.Property("Phonetic") + .HasColumnType("bit"); + + b1.Property("Tonal") + .HasColumnType("bit"); + + b1.HasKey("LanguageId"); + + b1.ToTable("Languages"); + + b1.WithOwner() + .HasForeignKey("LanguageId"); + + b1.HasData( + new + { + LanguageId = 1, + PhonemesCount = 44, + Phonetic = false, + Tonal = false + }, + new + { + LanguageId = 2, + PhonemesCount = 36, + Phonetic = false, + Tonal = false + }, + new + { + LanguageId = 3, + PhonemesCount = 24, + Phonetic = true, + Tonal = false + }); + }); + + b.Navigation("Details"); + }); + + modelBuilder.Entity("LanguageCountry", b => + { + b.HasOne("EFModeling.DataSeeding.Country", null) + .WithMany() + .HasForeignKey("CountryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("EFModeling.DataSeeding.Language", null) + .WithMany() + .HasForeignKey("LanguageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/samples/core/Modeling/DataSeeding/Name.cs b/samples/core/Modeling/DataSeeding/Name.cs deleted file mode 100644 index 125ccbdc97..0000000000 --- a/samples/core/Modeling/DataSeeding/Name.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace EFModeling.DataSeeding; - -public class Name -{ - public virtual string First { get; set; } - public virtual string Last { get; set; } -} \ No newline at end of file diff --git a/samples/core/Modeling/DataSeeding/Post.cs b/samples/core/Modeling/DataSeeding/Post.cs index 52e2fabb70..e302d77637 100644 --- a/samples/core/Modeling/DataSeeding/Post.cs +++ b/samples/core/Modeling/DataSeeding/Post.cs @@ -1,4 +1,4 @@ -namespace EFModeling.DataSeeding; +namespace EFModeling.DataSeeding; public class Post { @@ -7,5 +7,4 @@ public class Post public string Title { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } - public Name AuthorName { get; set; } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/DataSeeding/Program.cs b/samples/core/Modeling/DataSeeding/Program.cs index fbb6e4264a..2e9c2cbd9c 100644 --- a/samples/core/Modeling/DataSeeding/Program.cs +++ b/samples/core/Modeling/DataSeeding/Program.cs @@ -1,39 +1,58 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFModeling.DataSeeding; internal static class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { + using (var context = new ManagingDataContext()) + { + await context.Database.EnsureCreatedAsync(); + + await foreach (var country in context.Countries.Include(b => b.OfficialLanguages).AsAsyncEnumerable()) + { + Console.WriteLine($"{country.Name} official language(s):"); + + if (!country.OfficialLanguages.Any()) + { + Console.WriteLine("\tNone"); + } + foreach (var language in country.OfficialLanguages) + { + Console.WriteLine($"\t{language.Name} - phenomes count: {language.Details.PhonemesCount}"); + } + } + } + #region CustomSeeding using (var context = new DataSeedingContext()) { - context.Database.EnsureCreated(); + await context.Database.EnsureCreatedAsync(); - var testBlog = context.Blogs.FirstOrDefault(b => b.Url == "http://test.com/"); + var testBlog = await context.Blogs.FirstOrDefaultAsync(b => b.Url == "http://test.com/"); if (testBlog == null) { context.Blogs.Add(new Blog { Url = "http://test.com/" }); + await context.SaveChangesAsync(); } - - context.SaveChanges(); } #endregion using (var context = new DataSeedingContext()) { - foreach (var blog in context.Blogs.Include(b => b.Posts)) + await foreach (var blog in context.Blogs.Include(b => b.Posts).AsAsyncEnumerable()) { Console.WriteLine($"Blog {blog.Url}"); foreach (var post in blog.Posts) { - Console.WriteLine($"\t{post.Title}: {post.Content} by {post.AuthorName.First} {post.AuthorName.Last}"); + Console.WriteLine($"\t{post.Title}: {post.Content}"); } } } } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/DynamicModel/Program.cs b/samples/core/Modeling/DynamicModel/Program.cs index f51f9df5be..37b5bc9866 100644 --- a/samples/core/Modeling/DynamicModel/Program.cs +++ b/samples/core/Modeling/DynamicModel/Program.cs @@ -1,29 +1,31 @@ using System; using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; namespace EFModeling.DynamicModel; public class Program { - private static void Main() + private static async Task Main() { // Note that because this sample uses InMemory as its provider, each model gets it's own separate store. using (var context = new DynamicContext { UseIntProperty = true }) { context.Entities.Add(new ConfigurableEntity { IntProperty = 44, StringProperty = "Aloha" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new DynamicContext { UseIntProperty = false }) { context.Entities.Add(new ConfigurableEntity { IntProperty = 43, StringProperty = "Hola" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new DynamicContext { UseIntProperty = true }) { - var entity = context.Entities.Single(); + var entity = await context.Entities.SingleAsync(); // Writes 44 and an empty string Console.WriteLine($"{entity.IntProperty} {entity.StringProperty}"); @@ -31,10 +33,10 @@ private static void Main() using (var context = new DynamicContext { UseIntProperty = false }) { - var entity = context.Entities.Single(); + var entity = await context.Entities.SingleAsync(); // Writes 0 and an "Hola" Console.WriteLine($"{entity.IntProperty} {entity.StringProperty}"); } } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/EntityTypes/EntityTypes.cs b/samples/core/Modeling/EntityTypes/EntityTypes.cs index 32d676e9b0..88b8beb154 100644 --- a/samples/core/Modeling/EntityTypes/EntityTypes.cs +++ b/samples/core/Modeling/EntityTypes/EntityTypes.cs @@ -62,6 +62,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFModeling.EntityTypeToFunctionMapping;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFModeling.EntityTypeToFunctionMapping;Trusted_Connection=True;ConnectRetryCount=0"); } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/EntityTypes/Program.cs b/samples/core/Modeling/EntityTypes/Program.cs index 5981aa1def..c6bf4209ec 100644 --- a/samples/core/Modeling/EntityTypes/Program.cs +++ b/samples/core/Modeling/EntityTypes/Program.cs @@ -1,17 +1,18 @@ using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFModeling.EntityTypes; internal class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { using var context = new MyContextWithFunctionMapping(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); - context.Database.ExecuteSqlRaw( + await context.Database.ExecuteSqlRawAsync( @"CREATE FUNCTION dbo.BlogsWithMultiplePosts() RETURNS TABLE AS @@ -29,6 +30,6 @@ HAVING COUNT(p.BlogId) > 1 where b.PostCount > 3 select new { b.Url, b.PostCount }; #endregion - var result = query.ToList(); + var result = await query.ToListAsync(); } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/GeneratedProperties/FluentAPI/DefaultValue.cs b/samples/core/Modeling/GeneratedProperties/FluentAPI/DefaultValue.cs index a8f67fc1d8..18495fd83e 100644 --- a/samples/core/Modeling/GeneratedProperties/FluentAPI/DefaultValue.cs +++ b/samples/core/Modeling/GeneratedProperties/FluentAPI/DefaultValue.cs @@ -6,14 +6,20 @@ internal class MyContext : DbContext { public DbSet Blogs { get; set; } - #region DefaultValue protected override void OnModelCreating(ModelBuilder modelBuilder) { + #region DefaultValue modelBuilder.Entity() .Property(b => b.Rating) .HasDefaultValue(3); + #endregion + + #region DefaultValueNamed + modelBuilder.Entity() + .Property(b => b.Rating) + .HasDefaultValue(3, "DF_Blog_IsActive"); + #endregion } - #endregion } public class Blog diff --git a/samples/core/Modeling/GeneratedProperties/FluentAPI/DefaultValueSql.cs b/samples/core/Modeling/GeneratedProperties/FluentAPI/DefaultValueSql.cs index a344e03cc3..e222167790 100644 --- a/samples/core/Modeling/GeneratedProperties/FluentAPI/DefaultValueSql.cs +++ b/samples/core/Modeling/GeneratedProperties/FluentAPI/DefaultValueSql.cs @@ -7,14 +7,20 @@ internal class MyContext : DbContext { public DbSet Blogs { get; set; } - #region DefaultValueSql protected override void OnModelCreating(ModelBuilder modelBuilder) { + #region DefaultValueSql modelBuilder.Entity() .Property(b => b.Created) .HasDefaultValueSql("getdate()"); + #endregion + + #region DefaultValueSqlNamed + modelBuilder.Entity() + .Property(b => b.Created) + .HasDefaultValueSql("getdate()" , "DF_Blog_IsActive"); + #endregion } - #endregion } public class Blog diff --git a/samples/core/Modeling/GeneratedProperties/GeneratedProperties.csproj b/samples/core/Modeling/GeneratedProperties/GeneratedProperties.csproj index 4f9926d3d5..65a94c2408 100644 --- a/samples/core/Modeling/GeneratedProperties/GeneratedProperties.csproj +++ b/samples/core/Modeling/GeneratedProperties/GeneratedProperties.csproj @@ -2,13 +2,13 @@ Exe - net8.0 + net10.0 EFModeling.GeneratedProperties EFModeling.GeneratedProperties - + diff --git a/samples/core/Modeling/Inheritance/FluentAPI/DiscriminatorPropertyConfiguration.cs b/samples/core/Modeling/Inheritance/FluentAPI/DiscriminatorPropertyConfiguration.cs index 4c188560d0..b046c11ba5 100644 --- a/samples/core/Modeling/Inheritance/FluentAPI/DiscriminatorPropertyConfiguration.cs +++ b/samples/core/Modeling/Inheritance/FluentAPI/DiscriminatorPropertyConfiguration.cs @@ -10,7 +10,7 @@ public class MyContext : DbContext protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() - .Property("Discriminator") + .Property("blog_type") .HasMaxLength(200); } #endregion @@ -25,4 +25,4 @@ public class Blog public class RssBlog : Blog { public string RssUrl { get; set; } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/KeylessEntityTypes/Program.cs b/samples/core/Modeling/KeylessEntityTypes/Program.cs index 8563d0eea2..eeddf268fa 100644 --- a/samples/core/Modeling/KeylessEntityTypes/Program.cs +++ b/samples/core/Modeling/KeylessEntityTypes/Program.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; @@ -10,14 +11,14 @@ namespace EFModeling.KeylessEntityTypes; public class Program { - private static void Main() + private static async Task Main() { - SetupDatabase(); + await SetupDatabase(); using var db = new BloggingContext(); #region Query - var postCounts = db.BlogPostCounts.ToList(); + var postCounts = await db.BlogPostCounts.ToListAsync(); foreach (var postCount in postCounts) { @@ -27,11 +28,11 @@ private static void Main() #endregion } - private static void SetupDatabase() + private static async Task SetupDatabase() { using var db = new BloggingContext(); - if (db.Database.EnsureCreated()) + if (await db.Database.EnsureCreatedAsync()) { db.Blogs.Add( new Blog @@ -70,10 +71,10 @@ private static void SetupDatabase() } }); - db.SaveChanges(); + await db.SaveChangesAsync(); #region View - db.Database.ExecuteSqlRaw( + await db.Database.ExecuteSqlRawAsync( @"CREATE VIEW View_BlogPostCounts AS SELECT b.Name, Count(p.PostId) as PostCount FROM Blogs b @@ -101,7 +102,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=Sample.KeylessEntityTypes;Trusted_Connection=True") + @"Server=(localdb)\mssqllocaldb;Database=Sample.KeylessEntityTypes;Trusted_Connection=True;ConnectRetryCount=0") .UseLoggerFactory(_loggerFactory); } diff --git a/samples/core/Modeling/OwnedEntities/OwnedEntityContext.cs b/samples/core/Modeling/OwnedEntities/OwnedEntityContext.cs index de75d9472f..1654f8bee4 100644 --- a/samples/core/Modeling/OwnedEntities/OwnedEntityContext.cs +++ b/samples/core/Modeling/OwnedEntities/OwnedEntityContext.cs @@ -9,7 +9,7 @@ public class OwnedEntityContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFOwnedEntity;Trusted_Connection=True"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFOwnedEntity;Trusted_Connection=True;ConnectRetryCount=0"); protected override void OnModelCreating(ModelBuilder modelBuilder) { @@ -73,4 +73,4 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) }); #endregion } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/OwnedEntities/Program.cs b/samples/core/Modeling/OwnedEntities/Program.cs index 85e628f5a7..f0861fb10d 100644 --- a/samples/core/Modeling/OwnedEntities/Program.cs +++ b/samples/core/Modeling/OwnedEntities/Program.cs @@ -1,16 +1,18 @@ using System; using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; namespace EFModeling.OwnedEntities; public static class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { using (var context = new OwnedEntityContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); context.Add( new DetailedOrder @@ -23,15 +25,15 @@ private static void Main(string[] args) } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new OwnedEntityContext()) { #region DetailedOrderQuery - var order = context.DetailedOrders.First(o => o.Status == OrderStatus.Pending); + var order = await context.DetailedOrders.FirstAsync(o => o.Status == OrderStatus.Pending); Console.WriteLine($"First pending order will ship to: {order.OrderDetails.ShippingAddress.City}"); #endregion } } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/Relationships/ManyToMany.cs b/samples/core/Modeling/Relationships/ManyToMany.cs index ac37a5e25f..71abe57189 100644 --- a/samples/core/Modeling/Relationships/ManyToMany.cs +++ b/samples/core/Modeling/Relationships/ManyToMany.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFModeling.Relationships; @@ -75,8 +76,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsId").HasPrincipalKey(nameof(Tag.Id)), - r => r.HasOne(typeof(Post)).WithMany().HasForeignKey("PostsId").HasPrincipalKey(nameof(Post.Id)), + r => r.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsId").HasPrincipalKey(nameof(Tag.Id)), + l => l.HasOne(typeof(Post)).WithMany().HasForeignKey("PostsId").HasPrincipalKey(nameof(Post.Id)), j => j.HasKey("PostsId", "TagsId")); } #endregion @@ -142,8 +143,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany() .UsingEntity( "PostTag", - l => l.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsId").HasPrincipalKey(nameof(Tag.Id)), - r => r.HasOne(typeof(Post)).WithMany().HasForeignKey("PostId").HasPrincipalKey(nameof(Post.Id)), + r => r.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsId").HasPrincipalKey(nameof(Tag.Id)), + l => l.HasOne(typeof(Post)).WithMany().HasForeignKey("PostId").HasPrincipalKey(nameof(Post.Id)), j => j.HasKey("PostId", "TagsId")); } #endregion @@ -211,8 +212,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostsToTagsJoinTable", - l => l.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsId").HasPrincipalKey(nameof(Tag.Id)), - r => r.HasOne(typeof(Post)).WithMany().HasForeignKey("PostsId").HasPrincipalKey(nameof(Post.Id)), + r => r.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsId").HasPrincipalKey(nameof(Tag.Id)), + l => l.HasOne(typeof(Post)).WithMany().HasForeignKey("PostsId").HasPrincipalKey(nameof(Post.Id)), j => j.HasKey("PostsId", "TagsId")); } #endregion @@ -269,8 +270,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasMany(e => e.Tags) .WithMany(e => e.Posts) .UsingEntity( - l => l.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagForeignKey"), - r => r.HasOne(typeof(Post)).WithMany().HasForeignKey("PostForeignKey")); + r => r.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagForeignKey"), + l => l.HasOne(typeof(Post)).WithMany().HasForeignKey("PostForeignKey")); } #endregion } @@ -285,8 +286,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagForeignKey").HasPrincipalKey(nameof(Tag.Id)), - r => r.HasOne(typeof(Post)).WithMany().HasForeignKey("PostForeignKey").HasPrincipalKey(nameof(Post.Id)), + r => r.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagForeignKey").HasPrincipalKey(nameof(Tag.Id)), + l => l.HasOne(typeof(Post)).WithMany().HasForeignKey("PostForeignKey").HasPrincipalKey(nameof(Post.Id)), j => j.HasKey("PostForeignKey", "TagForeignKey")); } #endregion @@ -380,8 +381,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasMany(e => e.Tags) .WithMany(e => e.Posts) .UsingEntity( - l => l.HasOne().WithMany().HasForeignKey(e => e.TagId), - r => r.HasOne().WithMany().HasForeignKey(e => e.PostId)); + r => r.HasOne().WithMany().HasForeignKey(e => e.TagId), + l => l.HasOne().WithMany().HasForeignKey(e => e.PostId)); } #endregion } @@ -396,8 +397,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne().WithMany().HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.Id), - r => r.HasOne().WithMany().HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.Id), + r => r.HasOne().WithMany().HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.Id), + l => l.HasOne().WithMany().HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.Id), j => j.HasKey(e => new { e.PostId, e.TagId })); } #endregion @@ -475,8 +476,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasMany(e => e.Tags) .WithMany(e => e.Posts) .UsingEntity( - l => l.HasOne().WithMany(e => e.PostTags), - r => r.HasOne().WithMany(e => e.PostTags)); + r => r.HasOne().WithMany(e => e.PostTags), + l => l.HasOne().WithMany(e => e.PostTags)); } #endregion } @@ -491,8 +492,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.Id), - r => r.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.Id), + r => r.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.Id), + l => l.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.Id), j => j.HasKey(e => new { e.PostId, e.TagId })); } #endregion @@ -572,8 +573,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasMany(e => e.Tags) .WithMany(e => e.Posts) .UsingEntity( - l => l.HasOne(e => e.Tag).WithMany(e => e.PostTags), - r => r.HasOne(e => e.Post).WithMany(e => e.PostTags)); + r => r.HasOne(e => e.Tag).WithMany(e => e.PostTags), + l => l.HasOne(e => e.Post).WithMany(e => e.PostTags)); } #endregion } @@ -588,8 +589,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne(e => e.Tag).WithMany(e => e.PostTags).HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.Id), - r => r.HasOne(e => e.Post).WithMany(e => e.PostTags).HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.Id), + r => r.HasOne(e => e.Tag).WithMany(e => e.PostTags).HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.Id), + l => l.HasOne(e => e.Post).WithMany(e => e.PostTags).HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.Id), j => j.HasKey(e => new { e.PostId, e.TagId })); } #endregion @@ -653,8 +654,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasMany(e => e.Tags) .WithMany(e => e.Posts) .UsingEntity( - l => l.HasOne(e => e.Tag).WithMany(e => e.PostTags).HasForeignKey(e => e.TagForeignKey), - r => r.HasOne(e => e.Post).WithMany(e => e.PostTags).HasForeignKey(e => e.PostForeignKey)); + r => r.HasOne(e => e.Tag).WithMany(e => e.PostTags).HasForeignKey(e => e.TagForeignKey), + l => l.HasOne(e => e.Post).WithMany(e => e.PostTags).HasForeignKey(e => e.PostForeignKey)); } #endregion } @@ -669,8 +670,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne(e => e.Tag).WithMany(e => e.PostTags).HasForeignKey(e => e.TagForeignKey).HasPrincipalKey(e => e.Id), - r => r.HasOne(e => e.Post).WithMany(e => e.PostTags).HasForeignKey(e => e.PostForeignKey).HasPrincipalKey(e => e.Id), + r => r.HasOne(e => e.Tag).WithMany(e => e.PostTags).HasForeignKey(e => e.TagForeignKey).HasPrincipalKey(e => e.Id), + l => l.HasOne(e => e.Post).WithMany(e => e.PostTags).HasForeignKey(e => e.PostForeignKey).HasPrincipalKey(e => e.Id), j => j.HasKey(e => new { e.PostForeignKey, e.TagForeignKey })); } #endregion @@ -726,8 +727,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasMany(e => e.Tags) .WithMany(e => e.Posts) .UsingEntity( - l => l.HasOne(typeof(Tag)).WithMany().HasPrincipalKey(nameof(Tag.AlternateKey)), - r => r.HasOne(typeof(Post)).WithMany().HasPrincipalKey(nameof(Post.AlternateKey))); + r => r.HasOne(typeof(Tag)).WithMany().HasPrincipalKey(nameof(Tag.AlternateKey)), + l => l.HasOne(typeof(Post)).WithMany().HasPrincipalKey(nameof(Post.AlternateKey))); } #endregion } @@ -742,8 +743,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsAlternateKey").HasPrincipalKey(nameof(Tag.AlternateKey)), - r => r.HasOne(typeof(Post)).WithMany().HasForeignKey("PostsAlternateKey").HasPrincipalKey(nameof(Post.AlternateKey)), + r => r.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsAlternateKey").HasPrincipalKey(nameof(Tag.AlternateKey)), + l => l.HasOne(typeof(Post)).WithMany().HasForeignKey("PostsAlternateKey").HasPrincipalKey(nameof(Post.AlternateKey)), j => j.HasKey("PostsAlternateKey", "TagsAlternateKey")); } #endregion @@ -809,8 +810,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasMany(e => e.Tags) .WithMany(e => e.Posts) .UsingEntity( - l => l.HasOne(e => e.Tag).WithMany(e => e.PostTags).HasPrincipalKey(e => e.AlternateKey), - r => r.HasOne(e => e.Post).WithMany(e => e.PostTags).HasPrincipalKey(e => e.AlternateKey)); + r => r.HasOne(e => e.Tag).WithMany(e => e.PostTags).HasPrincipalKey(e => e.AlternateKey), + l => l.HasOne(e => e.Post).WithMany(e => e.PostTags).HasPrincipalKey(e => e.AlternateKey)); } #endregion } @@ -825,8 +826,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne(e => e.Tag).WithMany(e => e.PostTags).HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.AlternateKey), - r => r.HasOne(e => e.Post).WithMany(e => e.PostTags).HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.AlternateKey), + r => r.HasOne(e => e.Tag).WithMany(e => e.PostTags).HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.AlternateKey), + l => l.HasOne(e => e.Post).WithMany(e => e.PostTags).HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.AlternateKey), j => j.HasKey(e => new { e.PostId, e.TagId })); } #endregion @@ -901,8 +902,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne().WithMany().HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.Id), - r => r.HasOne().WithMany().HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.Id), + r => r.HasOne().WithMany().HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.Id), + l => l.HasOne().WithMany().HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.Id), j => j.HasKey(e => e.Id)); } #endregion @@ -975,8 +976,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsId").HasPrincipalKey(nameof(Tag.Id)), - r => r.HasOne(typeof(Post)).WithMany().HasForeignKey("PostsId").HasPrincipalKey(nameof(Post.Id)), + r => r.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsId").HasPrincipalKey(nameof(Tag.Id)), + l => l.HasOne(typeof(Post)).WithMany().HasForeignKey("PostsId").HasPrincipalKey(nameof(Post.Id)), j => { j.IndexerProperty("Id"); @@ -1058,8 +1059,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.Id), - r => r.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.Id), + r => r.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.TagId).HasPrincipalKey(e => e.Id), + l => l.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.PostId).HasPrincipalKey(e => e.Id), j => { j.HasKey(e => new { e.PostId, e.TagId }); @@ -1117,8 +1118,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasMany(e => e.Tags) .WithMany(e => e.Posts) .UsingEntity( - l => l.HasOne(typeof(Tag)).WithMany().OnDelete(DeleteBehavior.Restrict), - r => r.HasOne(typeof(Post)).WithMany().OnDelete(DeleteBehavior.Restrict)); + r => r.HasOne(typeof(Tag)).WithMany().OnDelete(DeleteBehavior.Restrict), + l => l.HasOne(typeof(Post)).WithMany().OnDelete(DeleteBehavior.Restrict)); } #endregion } @@ -1133,8 +1134,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsId").HasPrincipalKey(nameof(Tag.Id)).OnDelete(DeleteBehavior.Restrict), - r => r.HasOne(typeof(Post)).WithMany().HasForeignKey("PostsId").HasPrincipalKey(nameof(Post.Id)).OnDelete(DeleteBehavior.Restrict), + r => r.HasOne(typeof(Tag)).WithMany().HasForeignKey("TagsId").HasPrincipalKey(nameof(Tag.Id)).OnDelete(DeleteBehavior.Restrict), + l => l.HasOne(typeof(Post)).WithMany().HasForeignKey("PostsId").HasPrincipalKey(nameof(Post.Id)).OnDelete(DeleteBehavior.Restrict), j => j.HasKey("PostsId", "TagsId")); } #endregion @@ -1186,8 +1187,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Parents) .UsingEntity( "PersonPerson", - l => l.HasOne(typeof(Person)).WithMany().HasForeignKey("ChildrenId").HasPrincipalKey(nameof(Person.Id)), - r => r.HasOne(typeof(Person)).WithMany().HasForeignKey("ParentsId").HasPrincipalKey(nameof(Person.Id)), + r => r.HasOne(typeof(Person)).WithMany().HasForeignKey("ChildrenId").HasPrincipalKey(nameof(Person.Id)), + l => l.HasOne(typeof(Person)).WithMany().HasForeignKey("ParentsId").HasPrincipalKey(nameof(Person.Id)), j => j.HasKey("ChildrenId", "ParentsId")); } #endregion @@ -1252,8 +1253,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany() .UsingEntity( "PersonPerson", - l => l.HasOne(typeof(Person)).WithMany().HasForeignKey("FriendsId").HasPrincipalKey(nameof(Person.Id)), - r => r.HasOne(typeof(Person)).WithMany().HasForeignKey("PersonId").HasPrincipalKey(nameof(Person.Id)), + r => r.HasOne(typeof(Person)).WithMany().HasForeignKey("FriendsId").HasPrincipalKey(nameof(Person.Id)), + l => l.HasOne(typeof(Person)).WithMany().HasForeignKey("PersonId").HasPrincipalKey(nameof(Person.Id)), j => j.HasKey("FriendsId", "PersonId")); } #endregion @@ -1333,8 +1334,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.Id1), - r => r.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.Id2), + r => r.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.Id1), + l => l.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.Id2), j => j.Property(e => e.CreatedOn).HasDefaultValueSql("CURRENT_TIMESTAMP")); modelBuilder.Entity() @@ -1342,8 +1343,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Blogs) .UsingEntity( "BlogAuthor", - l => l.HasOne().WithMany(e => e.BlogAuthors).HasForeignKey(e => e.Id1), - r => r.HasOne().WithMany(e => e.BlogAuthors).HasForeignKey(e => e.Id2), + r => r.HasOne().WithMany(e => e.BlogAuthors).HasForeignKey(e => e.Id1), + l => l.HasOne().WithMany(e => e.BlogAuthors).HasForeignKey(e => e.Id2), j => j.Property(e => e.CreatedOn).HasDefaultValueSql("CURRENT_TIMESTAMP")); } #endregion @@ -1359,8 +1360,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Posts) .UsingEntity( "PostTag", - l => l.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.Id1).HasPrincipalKey(e => e.Id), - r => r.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.Id2).HasPrincipalKey(e => e.Id), + r => r.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.Id1).HasPrincipalKey(e => e.Id), + l => l.HasOne().WithMany(e => e.PostTags).HasForeignKey(e => e.Id2).HasPrincipalKey(e => e.Id), j => { j.HasKey(e => new { e.Id1, e.Id2 }); @@ -1372,8 +1373,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .WithMany(e => e.Blogs) .UsingEntity( "BlogAuthor", - l => l.HasOne().WithMany(e => e.BlogAuthors).HasForeignKey(e => e.Id1).HasPrincipalKey(e => e.Id), - r => r.HasOne().WithMany(e => e.BlogAuthors).HasForeignKey(e => e.Id2).HasPrincipalKey(e => e.Id), + r => r.HasOne().WithMany(e => e.BlogAuthors).HasForeignKey(e => e.Id1).HasPrincipalKey(e => e.Id), + l => l.HasOne().WithMany(e => e.BlogAuthors).HasForeignKey(e => e.Id2).HasPrincipalKey(e => e.Id), j => { j.HasKey(e => new { e.Id1, e.Id2 }); @@ -1386,11 +1387,11 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) public class DirectJoinTableNoManyToMany { - public static void BuildModels() + public static async Task BuildModels() { using var context0 = new BlogContext0(); - context0.Database.EnsureDeleted(); - context0.Database.EnsureCreated(); + await context0.Database.EnsureDeletedAsync(); + await context0.Database.EnsureCreatedAsync(); Console.WriteLine("Directly mapping the join table without creating a many-to-many relationship:"); var modelDebugString = context0.Model.ToDebugString(indent: 2); @@ -1439,11 +1440,11 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) public class FullMappingWithJoinEntity { - public static void BuildModels() + public static async Task BuildModels() { using var context0 = new BlogContext0(); - context0.Database.EnsureDeleted(); - context0.Database.EnsureCreated(); + await context0.Database.EnsureDeletedAsync(); + await context0.Database.EnsureCreatedAsync(); Console.WriteLine("Directly mapping the join table and including skip navigations for the many-to-many relationship:"); var modelDebugString = context0.Model.ToDebugString(indent: 2); @@ -1489,8 +1490,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasMany(e => e.Tags) .WithMany(e => e.Posts) .UsingEntity( - l => l.HasOne(e => e.Tag).WithMany(e => e.PostTags), - r => r.HasOne(e => e.Post).WithMany(e => e.PostTags)); + r => r.HasOne(e => e.Tag).WithMany(e => e.PostTags), + l => l.HasOne(e => e.Post).WithMany(e => e.PostTags)); } } } diff --git a/samples/core/Modeling/Relationships/Program.cs b/samples/core/Modeling/Relationships/Program.cs index 12d96f7677..31ecbc117f 100644 --- a/samples/core/Modeling/Relationships/Program.cs +++ b/samples/core/Modeling/Relationships/Program.cs @@ -1,8 +1,10 @@ +using System.Threading.Tasks; + namespace EFModeling.Relationships; public class Program { - private static void Main() + private static async Task Main() { OneToMany.Required.BuildModels(); OneToMany.Optional.BuildModels(); @@ -76,8 +78,8 @@ private static void Main() ManyToMany.SelfReferencingManyToMany.BuildModels(); ManyToMany.SelfReferencingUnidirectionalManyToMany.BuildModels(); ManyToMany.ManyToManyWithCustomSharedTypeEntityType.BuildModels(); - ManyToMany.DirectJoinTableNoManyToMany.BuildModels(); - ManyToMany.FullMappingWithJoinEntity.BuildModels(); + await ManyToMany.DirectJoinTableNoManyToMany.BuildModels(); + await ManyToMany.FullMappingWithJoinEntity.BuildModels(); RelationshipConventions.ReferenceNavigations.BuildModels(); RelationshipConventions.CollectionNavigations.BuildModels(); diff --git a/samples/core/Modeling/TableSplitting/Program.cs b/samples/core/Modeling/TableSplitting/Program.cs index b724ac0a50..ee981e3b10 100644 --- a/samples/core/Modeling/TableSplitting/Program.cs +++ b/samples/core/Modeling/TableSplitting/Program.cs @@ -1,17 +1,19 @@ using System; using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; namespace EFModeling.TableSplitting; public static class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { #region Usage using (var context = new TableSplittingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); context.Add( new Order @@ -25,20 +27,20 @@ private static void Main(string[] args) } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new TableSplittingContext()) { - var pendingCount = context.Orders.Count(o => o.Status == OrderStatus.Pending); + var pendingCount = await context.Orders.CountAsync(o => o.Status == OrderStatus.Pending); Console.WriteLine($"Current number of pending orders: {pendingCount}"); } using (var context = new TableSplittingContext()) { - var order = context.DetailedOrders.First(o => o.Status == OrderStatus.Pending); + var order = await context.DetailedOrders.FirstAsync(o => o.Status == OrderStatus.Pending); Console.WriteLine($"First pending order will ship to: {order.ShippingAddress}"); } #endregion } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/TableSplitting/TableSplittingContext.cs b/samples/core/Modeling/TableSplitting/TableSplittingContext.cs index ec891e91fc..23b2810454 100644 --- a/samples/core/Modeling/TableSplitting/TableSplittingContext.cs +++ b/samples/core/Modeling/TableSplitting/TableSplittingContext.cs @@ -9,7 +9,7 @@ public class TableSplittingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFTableSplitting;Trusted_Connection=True"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFTableSplitting;Trusted_Connection=True;ConnectRetryCount=0"); protected override void OnModelCreating(ModelBuilder modelBuilder) { diff --git a/samples/core/Modeling/ValueConversions/CaseInsensitiveStrings.cs b/samples/core/Modeling/ValueConversions/CaseInsensitiveStrings.cs index 96a463d786..8289ea8955 100644 --- a/samples/core/Modeling/ValueConversions/CaseInsensitiveStrings.cs +++ b/samples/core/Modeling/ValueConversions/CaseInsensitiveStrings.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -12,13 +13,13 @@ namespace EFModeling.ValueConversions; public class CaseInsensitiveStrings : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for case-insensitive string keys..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save new entities..."); @@ -40,14 +41,14 @@ public void Run() BlogId = "DotNet", Title = "Some more good .NET stuff" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entities back..."); - var blog = context.Set().Include(e => e.Posts).Single(); + var blog = await context.Set().Include(e => e.Posts).SingleAsync(); ConsoleWriteLines($"The blog has {blog.Posts.Count} posts with foreign keys '{blog.Posts.First().BlogId}' and '{blog.Posts.Skip(1).First().BlogId}'"); } @@ -81,7 +82,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }) - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=CaseInsensitiveStrings;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=CaseInsensitiveStrings;Trusted_Connection=True;ConnectRetryCount=0") .EnableSensitiveDataLogging(); } diff --git a/samples/core/Modeling/ValueConversions/CompositeValueObject.cs b/samples/core/Modeling/ValueConversions/CompositeValueObject.cs index b9c8b26912..4e72a32133 100644 --- a/samples/core/Modeling/ValueConversions/CompositeValueObject.cs +++ b/samples/core/Modeling/ValueConversions/CompositeValueObject.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text.Json; using System.Text.Json.Serialization; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -12,25 +13,25 @@ namespace EFModeling.ValueConversions; public class CompositeValueObject : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for a composite value object..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); context.Add(new Order { Price = new Money(3.99m, Currency.UsDollars) }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back..."); - var order = context.Set().Single(); + var order = await context.Set().SingleAsync(); ConsoleWriteLines($"Order with price {order.Price.Amount} in {order.Price.Currency}."); } @@ -90,4 +91,4 @@ public enum Currency PoundsSterling } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/EncryptPropertyValues.cs b/samples/core/Modeling/ValueConversions/EncryptPropertyValues.cs index d4874e422a..7928514b44 100644 --- a/samples/core/Modeling/ValueConversions/EncryptPropertyValues.cs +++ b/samples/core/Modeling/ValueConversions/EncryptPropertyValues.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -10,25 +11,25 @@ namespace EFModeling.ValueConversions; public class EncryptPropertyValues : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for encrypting property values..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); context.Add(new User { Name = "arthur", Password = "password" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back..."); - var user = context.Set().Single(); + var user = await context.Set().SingleAsync(); ConsoleWriteLines($"User {user.Name} has password '{user.Password}'"); } @@ -50,7 +51,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }) - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EncryptPropertyValues;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EncryptPropertyValues;Trusted_Connection=True;ConnectRetryCount=0") .EnableSensitiveDataLogging(); } @@ -62,4 +63,4 @@ public class User public string Password { get; set; } } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/EnumToStringConversions.cs b/samples/core/Modeling/ValueConversions/EnumToStringConversions.cs index 791868a445..d5699145d8 100644 --- a/samples/core/Modeling/ValueConversions/EnumToStringConversions.cs +++ b/samples/core/Modeling/ValueConversions/EnumToStringConversions.cs @@ -1,6 +1,7 @@ using System; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; @@ -9,125 +10,111 @@ namespace EFModeling.ValueConversions; public class EnumToStringConversions : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing explicitly configured value converter"); using (var context = new SampleDbContextExplicit()) { - CleanDatabase(context); + await CleanDatabase(context); context.Add(new Rider { Mount = EquineBeast.Horse }); - context.SaveChanges(); - - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContextExplicit()) { - ConsoleWriteLines($"Enum value read as '{context.Set().Single().Mount}'."); + ConsoleWriteLines($"Enum value read as '{(await context.Set().SingleAsync()).Mount}'."); } ConsoleWriteLines("Sample showing conversion configured by CLR type"); using (var context = new SampleDbContextByClrType()) { - CleanDatabase(context); + await CleanDatabase(context); context.Add(new Rider { Mount = EquineBeast.Horse }); - context.SaveChanges(); - - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContextByClrType()) { - ConsoleWriteLines($"Enum value read as '{context.Set().Single().Mount}'."); + ConsoleWriteLines($"Enum value read as '{(await context.Set().SingleAsync()).Mount}'."); } ConsoleWriteLines("Sample showing conversion configured by database type"); using (var context = new SampleDbContextByDatabaseType()) { - CleanDatabase(context); + await CleanDatabase(context); context.Add(new Rider2 { Mount = EquineBeast.Horse }); - context.SaveChanges(); - - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContextByDatabaseType()) { - ConsoleWriteLines($"Enum value read as '{context.Set().Single().Mount}'."); + ConsoleWriteLines($"Enum value read as '{(await context.Set().SingleAsync()).Mount}'."); } ConsoleWriteLines("Sample showing conversion configured by a ValueConverter instance"); using (var context = new SampleDbContextByConverterInstance()) { - CleanDatabase(context); + await CleanDatabase(context); context.Add(new Rider { Mount = EquineBeast.Horse }); - context.SaveChanges(); - - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContextByConverterInstance()) { - ConsoleWriteLines($"Enum value read as '{context.Set().Single().Mount}'."); + ConsoleWriteLines($"Enum value read as '{(await context.Set().SingleAsync()).Mount}'."); } ConsoleWriteLines("Sample showing conversion configured by a built-in ValueConverter instance"); using (var context = new SampleDbContextByBuiltInInstance()) { - CleanDatabase(context); + await CleanDatabase(context); context.Add(new Rider { Mount = EquineBeast.Horse }); - context.SaveChanges(); - - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContextByBuiltInInstance()) { - ConsoleWriteLines($"Enum value read as '{context.Set().Single().Mount}'."); + ConsoleWriteLines($"Enum value read as '{(await context.Set().SingleAsync()).Mount}'."); } ConsoleWriteLines("Sample showing conversion configured by CLR type with per-property facets"); using (var context = new SampleDbContextByClrTypeWithFacets()) { - CleanDatabase(context); + await CleanDatabase(context); context.Add(new Rider { Mount = EquineBeast.Horse }); - context.SaveChanges(); - - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContextByClrTypeWithFacets()) { - ConsoleWriteLines($"Enum value read as '{context.Set().Single().Mount}'."); + ConsoleWriteLines($"Enum value read as '{(await context.Set().SingleAsync()).Mount}'."); } ConsoleWriteLines("Sample showing conversion configured by a ValueConverter instance with per-property facets"); using (var context = new SampleDbContextByConverterInstanceWithFacets()) { - CleanDatabase(context); + await CleanDatabase(context); context.Add(new Rider { Mount = EquineBeast.Horse }); - context.SaveChanges(); - - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContextByConverterInstanceWithFacets()) { - ConsoleWriteLines($"Enum value read as '{context.Set().Single().Mount}'."); + ConsoleWriteLines($"Enum value read as '{(await context.Set().SingleAsync()).Mount}'."); } } @@ -296,7 +283,7 @@ public class SampleDbContextBase : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }) - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EnumConversions;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EnumConversions;Trusted_Connection=True;ConnectRetryCount=0") .EnableSensitiveDataLogging(); } @@ -331,4 +318,4 @@ public class User public int Id { get; set; } public bool IsActive { get; set; } } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/FixedLengthStrings.cs b/samples/core/Modeling/ValueConversions/FixedLengthStrings.cs index 19977acfa2..8499488ccc 100644 --- a/samples/core/Modeling/ValueConversions/FixedLengthStrings.cs +++ b/samples/core/Modeling/ValueConversions/FixedLengthStrings.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -13,13 +14,13 @@ namespace EFModeling.ValueConversions; public class FixedLengthStrings : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for fixed-length, case-insensitive string keys..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save new entities..."); @@ -41,14 +42,14 @@ public void Run() BlogId = "DotNet", Title = "Some more good .NET stuff" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entities back..."); - var blog = context.Set().Include(e => e.Posts).Single(); + var blog = await context.Set().Include(e => e.Posts).SingleAsync(); ConsoleWriteLines($"The blog has {blog.Posts.Count} posts with foreign keys '{blog.Posts.First().BlogId}' and '{blog.Posts.Skip(1).First().BlogId}'"); } @@ -64,7 +65,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) var converter = new ValueConverter( v => v, v => v.Trim()); - + var comparer = new ValueComparer( (l, r) => string.Equals(l, r, StringComparison.OrdinalIgnoreCase), v => v.ToUpper().GetHashCode(), @@ -87,7 +88,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }) - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=FixedLengthStrings;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=FixedLengthStrings;Trusted_Connection=True;ConnectRetryCount=0") .EnableSensitiveDataLogging(); } @@ -110,4 +111,4 @@ public class Post public Blog Blog { get; set; } } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/KeyValueObjects.cs b/samples/core/Modeling/ValueConversions/KeyValueObjects.cs index 4551b9b0d4..534bb44baf 100644 --- a/samples/core/Modeling/ValueConversions/KeyValueObjects.cs +++ b/samples/core/Modeling/ValueConversions/KeyValueObjects.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; @@ -12,13 +13,13 @@ namespace EFModeling.ValueConversions; public class KeyValueObjects : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for a value objects used as keys..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); @@ -38,14 +39,14 @@ public void Run() } }; context.Add(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back..."); - var blog = context.Set().Include(e => e.Posts).Single(); + var blog = await context.Set().Include(e => e.Posts).SingleAsync(); } ConsoleWriteLines("Sample finished."); @@ -112,4 +113,4 @@ public readonly struct PostKey public int Id { get; } } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/MappingImmutableClassProperty.cs b/samples/core/Modeling/ValueConversions/MappingImmutableClassProperty.cs index a805b06537..3f86be68ab 100644 --- a/samples/core/Modeling/ValueConversions/MappingImmutableClassProperty.cs +++ b/samples/core/Modeling/ValueConversions/MappingImmutableClassProperty.cs @@ -1,5 +1,6 @@ using System.Diagnostics; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; @@ -7,33 +8,33 @@ namespace EFModeling.ValueConversions; public class MappingImmutableClassProperty : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for a simple immutable class..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); var entity = new MyEntityType { MyProperty = new ImmutableClass(7) }; context.Add(entity); - context.SaveChanges(); + await context.SaveChangesAsync(); ConsoleWriteLines("Change the property value and save again..."); // This will be detected and EF will update the database on SaveChanges entity.MyProperty = new ImmutableClass(77); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back..."); - var entity = context.Set().Single(); + var entity = await context.Set().SingleAsync(); Debug.Assert(entity.MyProperty.Value == 77); } @@ -91,4 +92,4 @@ public override int GetHashCode() => Value.GetHashCode(); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/MappingImmutableStructProperty.cs b/samples/core/Modeling/ValueConversions/MappingImmutableStructProperty.cs index ec6c5f00b1..9d70c9666d 100644 --- a/samples/core/Modeling/ValueConversions/MappingImmutableStructProperty.cs +++ b/samples/core/Modeling/ValueConversions/MappingImmutableStructProperty.cs @@ -1,5 +1,6 @@ using System.Diagnostics; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; @@ -7,33 +8,33 @@ namespace EFModeling.ValueConversions; public class MappingImmutableStructProperty : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for a simple immutable struct..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); var entity = new EntityType { MyProperty = new ImmutableStruct(6) }; context.Add(entity); - context.SaveChanges(); + await context.SaveChangesAsync(); ConsoleWriteLines("Change the property value and save again..."); // This will be detected and EF will update the database on SaveChanges entity.MyProperty = new ImmutableStruct(66); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back..."); - var entity = context.Set().Single(); + var entity = await context.Set().SingleAsync(); Debug.Assert(entity.MyProperty.Value == 66); } @@ -82,4 +83,4 @@ public ImmutableStruct(int value) public int Value { get; } } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/MappingListProperty.cs b/samples/core/Modeling/ValueConversions/MappingListProperty.cs index 9a6e9e03c1..a2764a8a85 100644 --- a/samples/core/Modeling/ValueConversions/MappingListProperty.cs +++ b/samples/core/Modeling/ValueConversions/MappingListProperty.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.Linq; using System.Text.Json; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.Extensions.Logging; @@ -11,33 +12,33 @@ namespace EFModeling.ValueConversions; public class MappingListProperty : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for a List..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); var entity = new EntityType { MyListProperty = new List { 1, 2, 3 } }; context.Add(entity); - context.SaveChanges(); + await context.SaveChangesAsync(); ConsoleWriteLines("Mutate the property value and save again..."); // This will be detected and EF will update the database on SaveChanges entity.MyListProperty.Add(4); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back..."); - var entity = context.Set().Single(); + var entity = await context.Set().SingleAsync(); Debug.Assert(entity.MyListProperty.SequenceEqual(new List { 1, 2, 3, 4 })); } @@ -81,4 +82,4 @@ public class EntityType public List MyListProperty { get; set; } #endregion } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/MappingListPropertyOld.cs b/samples/core/Modeling/ValueConversions/MappingListPropertyOld.cs index 77dae07ffc..7a3ebcb1de 100644 --- a/samples/core/Modeling/ValueConversions/MappingListPropertyOld.cs +++ b/samples/core/Modeling/ValueConversions/MappingListPropertyOld.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.Linq; using System.Text.Json; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.Extensions.Logging; @@ -11,33 +12,33 @@ namespace EFModeling.ValueConversions; public class MappingListPropertyOld : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for a List..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); var entity = new EntityType { MyListProperty = new List { 1, 2, 3 } }; context.Add(entity); - context.SaveChanges(); + await context.SaveChangesAsync(); ConsoleWriteLines("Mutate the property value and save again..."); // This will be detected and EF will update the database on SaveChanges entity.MyListProperty.Add(4); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back..."); - var entity = context.Set().Single(); + var entity = await context.Set().SingleAsync(); Debug.Assert(entity.MyListProperty.SequenceEqual(new List { 1, 2, 3, 4 })); } @@ -88,4 +89,4 @@ public class EntityType public List MyListProperty { get; set; } #endregion } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/OverridingByteArrayComparisons.cs b/samples/core/Modeling/ValueConversions/OverridingByteArrayComparisons.cs index 00e465c274..50229f887c 100644 --- a/samples/core/Modeling/ValueConversions/OverridingByteArrayComparisons.cs +++ b/samples/core/Modeling/ValueConversions/OverridingByteArrayComparisons.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.Extensions.Logging; @@ -9,19 +10,19 @@ namespace EFModeling.ValueConversions; public class OverridingByteArrayComparisons : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing overriding byte array comparisons..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); var entity = new EntityType { MyBytes = new byte[] { 1, 2, 3 } }; context.Add(entity); - context.SaveChanges(); + await context.SaveChangesAsync(); ConsoleWriteLines("Mutate the property value and save again..."); @@ -29,14 +30,14 @@ public void Run() // In this case it will be detected because the comparer in the model is overridden. entity.MyBytes[1] = 4; - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back..."); - var entity = context.Set().Single(); + var entity = await context.Set().SingleAsync(); Debug.Assert(entity.MyBytes.SequenceEqual(new byte[] { 1, 4, 3 })); } @@ -77,4 +78,4 @@ public class EntityType public byte[] MyBytes { get; set; } } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/PreserveDateTimeKind.cs b/samples/core/Modeling/ValueConversions/PreserveDateTimeKind.cs index 1902a789f6..7ca40dbb51 100644 --- a/samples/core/Modeling/ValueConversions/PreserveDateTimeKind.cs +++ b/samples/core/Modeling/ValueConversions/PreserveDateTimeKind.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -10,13 +11,13 @@ namespace EFModeling.ValueConversions; public class PreserveDateTimeKind : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for preserving/setting DateTime.Kind..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save new entities..."); @@ -35,18 +36,18 @@ public void Run() LastUpdated = new DateTime(1976, 9, 3, 0, 0, 0, 0, DateTimeKind.Utc), DeletedOn = new DateTime(2017, 9, 3, 0, 0, 0, 0, DateTimeKind.Utc) }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entities back..."); - var blog1 = context.Set().Single(e => e.Title == "Post 1"); + var blog1 = await context.Set().SingleAsync(e => e.Title == "Post 1"); ConsoleWriteLines($"Blog 1: PostedOn.Kind = {blog1.PostedOn.Kind} LastUpdated.Kind = {blog1.LastUpdated.Kind} DeletedOn.Kind = {blog1.DeletedOn.Kind}"); - var blog2 = context.Set().Single(e => e.Title == "Post 2"); + var blog2 = await context.Set().SingleAsync(e => e.Title == "Post 2"); ConsoleWriteLines($"Blog 2: PostedOn.Kind = {blog2.PostedOn.Kind} LastUpdated.Kind = {blog2.LastUpdated.Kind} DeletedOn.Kind = {blog2.DeletedOn.Kind}"); } @@ -84,7 +85,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }) - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=PreserveDateTimeKind;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=PreserveDateTimeKind;Trusted_Connection=True;ConnectRetryCount=0") .EnableSensitiveDataLogging(); } @@ -101,4 +102,4 @@ public class Post public DateTime DeletedOn { get; set; } } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/PrimitiveCollection.cs b/samples/core/Modeling/ValueConversions/PrimitiveCollection.cs index 7b6f1319e0..7c15359caa 100644 --- a/samples/core/Modeling/ValueConversions/PrimitiveCollection.cs +++ b/samples/core/Modeling/ValueConversions/PrimitiveCollection.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -13,32 +14,32 @@ namespace EFModeling.ValueConversions; public class PrimitiveCollection : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for a collections of primitive values..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); context.Add(new Post { Tags = new List { "EF Core", "Unicorns", "Donkeys" } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back..."); - var post = context.Set().Single(); + var post = await context.Set().SingleAsync(); ConsoleWriteLines($"Post with tags {string.Join(", ", post.Tags)}."); ConsoleWriteLines("Changing the value object and saving again"); post.Tags.Add("ASP.NET Core"); - context.SaveChanges(); + await context.SaveChangesAsync(); } ConsoleWriteLines("Sample finished."); @@ -78,4 +79,4 @@ public class Post public ICollection Tags { get; set; } } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/Program.cs b/samples/core/Modeling/ValueConversions/Program.cs index 06b78d4b0e..4eea2aa26a 100644 --- a/samples/core/Modeling/ValueConversions/Program.cs +++ b/samples/core/Modeling/ValueConversions/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFModeling.ValueConversions; @@ -8,25 +9,25 @@ namespace EFModeling.ValueConversions; /// public class Program { - public static void Main() + public static async Task Main() { - new MappingImmutableClassProperty().Run(); - new MappingImmutableStructProperty().Run(); - new MappingListProperty().Run(); - new MappingListPropertyOld().Run(); - new OverridingByteArrayComparisons().Run(); - new EnumToStringConversions().Run(); - new KeyValueObjects().Run(); - new SimpleValueObject().Run(); - new CompositeValueObject().Run(); - new PrimitiveCollection().Run(); - new ValueObjectCollection().Run(); - new ULongConcurrency().Run(); - new PreserveDateTimeKind().Run(); - new CaseInsensitiveStrings().Run(); - new FixedLengthStrings().Run(); - new EncryptPropertyValues().Run(); - new WithMappingHints().Run(); + await new MappingImmutableClassProperty().Run(); + await new MappingImmutableStructProperty().Run(); + await new MappingListProperty().Run(); + await new MappingListPropertyOld().Run(); + await new OverridingByteArrayComparisons().Run(); + await new EnumToStringConversions().Run(); + await new KeyValueObjects().Run(); + await new SimpleValueObject().Run(); + await new CompositeValueObject().Run(); + await new PrimitiveCollection().Run(); + await new ValueObjectCollection().Run(); + await new ULongConcurrency().Run(); + await new PreserveDateTimeKind().Run(); + await new CaseInsensitiveStrings().Run(); + await new FixedLengthStrings().Run(); + await new EncryptPropertyValues().Run(); + await new WithMappingHints().Run(); } protected static void ConsoleWriteLines(params string[] values) @@ -40,11 +41,11 @@ protected static void ConsoleWriteLines(params string[] values) Console.WriteLine(); } - protected static void CleanDatabase(DbContext context) + protected static async Task CleanDatabase(DbContext context) { ConsoleWriteLines("Deleting and re-creating database..."); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); ConsoleWriteLines("Done. Database is clean and fresh."); } -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/SimpleValueObject.cs b/samples/core/Modeling/ValueConversions/SimpleValueObject.cs index da3c7a51e2..1cebf7f84d 100644 --- a/samples/core/Modeling/ValueConversions/SimpleValueObject.cs +++ b/samples/core/Modeling/ValueConversions/SimpleValueObject.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -10,25 +11,25 @@ namespace EFModeling.ValueConversions; public class SimpleValueObject : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for a simple value object..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); context.Add(new Order { Price = new Dollars(3.99m) }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back..."); - var entity = context.Set().Single(); + var entity = await context.Set().SingleAsync(); } ConsoleWriteLines("Sample finished."); @@ -66,13 +67,13 @@ public class Order #region SimpleValueObject public readonly struct Dollars { - public Dollars(decimal amount) + public Dollars(decimal amount) => Amount = amount; - + public decimal Amount { get; } - public override string ToString() + public override string ToString() => $"${Amount}"; } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/ULongConcurrency.cs b/samples/core/Modeling/ValueConversions/ULongConcurrency.cs index 83feb2e84e..864e969963 100644 --- a/samples/core/Modeling/ValueConversions/ULongConcurrency.cs +++ b/samples/core/Modeling/ValueConversions/ULongConcurrency.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -10,13 +11,13 @@ namespace EFModeling.ValueConversions; public class ULongConcurrency : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing how to map rowversion to ulong..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); @@ -25,40 +26,40 @@ public void Run() { Name = "OneUnicorn" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back in one context..."); - var blog = context.Set().Single(); + var blog = await context.Set().SingleAsync(); blog.Name = "TwoUnicorns"; using (var context2 = new SampleDbContext()) { ConsoleWriteLines("Change the blog name and save in a different context..."); - context2.Set().Single().Name = "1unicorn2"; - context2.SaveChanges(); + (await context2.Set().SingleAsync()).Name = "1unicorn2"; + await context2.SaveChangesAsync(); } try { ConsoleWriteLines("Change the blog name and save in the first context..."); - context.SaveChanges(); + await context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException e) { ConsoleWriteLines($"{e.GetType().FullName}: {e.Message}"); - var databaseValues = context.Entry(blog).GetDatabaseValues(); + var databaseValues = await context.Entry(blog).GetDatabaseValuesAsync(); context.Entry(blog).OriginalValues.SetValues(databaseValues); ConsoleWriteLines("Refresh original values and save again..."); - context.SaveChanges(); + await context.SaveChangesAsync(); } } @@ -80,7 +81,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }) - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ULongConcurrency;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ULongConcurrency;Trusted_Connection=True;ConnectRetryCount=0") .EnableSensitiveDataLogging(); } @@ -92,4 +93,4 @@ public class Blog public ulong Version { get; set; } } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/ValueObjectCollection.cs b/samples/core/Modeling/ValueConversions/ValueObjectCollection.cs index c17faa80f9..f740aff28f 100644 --- a/samples/core/Modeling/ValueConversions/ValueObjectCollection.cs +++ b/samples/core/Modeling/ValueConversions/ValueObjectCollection.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text.Json; using System.Text.Json.Serialization; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -14,13 +15,13 @@ namespace EFModeling.ValueConversions; public class ValueObjectCollection : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions for a collection of value objects..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a new entity..."); @@ -34,21 +35,21 @@ public void Run() new AnnualFinance(2020, new Money(25.77m, Currency.UsDollars), new Money(125m, Currency.UsDollars)) } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entity back..."); - var blog = context.Set().Single(); + var blog = await context.Set().SingleAsync(); ConsoleWriteLines($"Blog with finances {string.Join(", ", blog.Finances.Select(f => $"{f.Year}: I={f.Income} E={f.Expenses} R={f.Revenue}"))}."); ConsoleWriteLines("Changing the value object and saving again"); blog.Finances.Add(new AnnualFinance(2021, new Money(12.0m, Currency.UsDollars), new Money(125m, Currency.UsDollars))); - context.SaveChanges(); + await context.SaveChangesAsync(); } ConsoleWriteLines("Sample finished."); @@ -129,4 +130,4 @@ public class Blog public IList Finances { get; set; } } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Modeling/ValueConversions/WithMappingHints.cs b/samples/core/Modeling/ValueConversions/WithMappingHints.cs index f10245e97e..eefc2ce5ce 100644 --- a/samples/core/Modeling/ValueConversions/WithMappingHints.cs +++ b/samples/core/Modeling/ValueConversions/WithMappingHints.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; @@ -11,27 +12,27 @@ namespace EFModeling.ValueConversions; public class WithMappingHints : Program { - public void Run() + public async Task Run() { ConsoleWriteLines("Sample showing value conversions with mapping hints for facets..."); using (var context = new SampleDbContext()) { - CleanDatabase(context); + await CleanDatabase(context); ConsoleWriteLines("Save a entities..."); context.Add(new Order1 { Price = new Dollars(3.99m) }); context.Add(new Order2 { Price = new Dollars(3.99m) }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new SampleDbContext()) { ConsoleWriteLines("Read the entities back..."); - var entity1 = context.Set().Single(); - var entity2 = context.Set().Single(); + var entity1 = await context.Set().SingleAsync(); + var entity2 = await context.Set().SingleAsync(); } ConsoleWriteLines("Sample finished."); @@ -63,7 +64,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .LogTo(Console.WriteLine, new[] { RelationalEventId.CommandExecuted }) - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=WithMappingHints;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=WithMappingHints;Trusted_Connection=True;ConnectRetryCount=0") .EnableSensitiveDataLogging(); } @@ -86,4 +87,4 @@ public readonly struct Dollars public Dollars(decimal amount) => Amount = amount; public decimal Amount { get; } } -} \ No newline at end of file +} diff --git a/samples/core/NuGet.config b/samples/core/NuGet.config new file mode 100644 index 0000000000..ddf33811ef --- /dev/null +++ b/samples/core/NuGet.config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/samples/core/Performance/AspNetContextPooling/Controllers/WeatherForecastController.cs b/samples/core/Performance/AspNetContextPooling/Controllers/WeatherForecastController.cs index 42003f4952..87e80d2c5e 100644 --- a/samples/core/Performance/AspNetContextPooling/Controllers/WeatherForecastController.cs +++ b/samples/core/Performance/AspNetContextPooling/Controllers/WeatherForecastController.cs @@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; namespace Performance.AspNetContextPooling.Controllers; @@ -12,6 +13,6 @@ public WeatherForecastController(WeatherForecastContext dbContext) => _dbContext = dbContext; [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - => _dbContext.Forecasts.OrderBy(f => f.Date).Take(5).ToArray(); -} \ No newline at end of file + public async Task> Get() + => await _dbContext.Forecasts.OrderBy(f => f.Date).Take(5).ToArrayAsync(); +} diff --git a/samples/core/Performance/AspNetContextPooling/Properties/launchSettings.json b/samples/core/Performance/AspNetContextPooling/Properties/launchSettings.json new file mode 100644 index 0000000000..0bd72ebfd6 --- /dev/null +++ b/samples/core/Performance/AspNetContextPooling/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "AspNetContextPooling": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:58220;http://localhost:58222" + } + } +} \ No newline at end of file diff --git a/samples/core/Performance/AspNetContextPoolingWithState/Controllers/WeatherForecastController.cs b/samples/core/Performance/AspNetContextPoolingWithState/Controllers/WeatherForecastController.cs index a48d8eb936..cbce0387cf 100644 --- a/samples/core/Performance/AspNetContextPoolingWithState/Controllers/WeatherForecastController.cs +++ b/samples/core/Performance/AspNetContextPoolingWithState/Controllers/WeatherForecastController.cs @@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; namespace Performance.AspNetContextPoolingWithState.Controllers; @@ -12,6 +13,6 @@ public WeatherForecastController(WeatherForecastContext dbContext) => _dbContext = dbContext; [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - => _dbContext.Forecasts.OrderBy(f => f.Date).Take(5).ToArray(); -} \ No newline at end of file + public async Task> Get() + => await _dbContext.Forecasts.OrderBy(f => f.Date).Take(5).ToArrayAsync(); +} diff --git a/samples/core/Performance/AspNetContextPoolingWithState/Properties/launchSettings.json b/samples/core/Performance/AspNetContextPoolingWithState/Properties/launchSettings.json new file mode 100644 index 0000000000..2892dcf901 --- /dev/null +++ b/samples/core/Performance/AspNetContextPoolingWithState/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "AspNetContextPoolingWithState": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:58214;http://localhost:58216" + } + } +} \ No newline at end of file diff --git a/samples/core/Performance/Other/BloggingContext.cs b/samples/core/Performance/Other/BloggingContext.cs index 4543205969..c2318d6276 100644 --- a/samples/core/Performance/Other/BloggingContext.cs +++ b/samples/core/Performance/Other/BloggingContext.cs @@ -14,7 +14,7 @@ public class BloggingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0") .LogTo(Console.WriteLine, LogLevel.Information); } #endregion diff --git a/samples/core/Performance/Other/EmployeeContext.cs b/samples/core/Performance/Other/EmployeeContext.cs index 15213f6590..caa2e481eb 100644 --- a/samples/core/Performance/Other/EmployeeContext.cs +++ b/samples/core/Performance/Other/EmployeeContext.cs @@ -11,7 +11,7 @@ public class EmployeeContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0") .LogTo(Console.WriteLine, LogLevel.Information); } } @@ -21,4 +21,4 @@ public class Employee public int Id { get; set; } public string Name { get; set; } public int Salary { get; set; } -} \ No newline at end of file +} diff --git a/samples/core/Performance/Other/ExtensionsLoggingContext.cs b/samples/core/Performance/Other/ExtensionsLoggingContext.cs index 82348470b0..60f6e2602f 100644 --- a/samples/core/Performance/Other/ExtensionsLoggingContext.cs +++ b/samples/core/Performance/Other/ExtensionsLoggingContext.cs @@ -12,8 +12,8 @@ private static ILoggerFactory ContextLoggerFactory protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0") .UseLoggerFactory(ContextLoggerFactory); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Performance/Other/LazyLoading/LazyBloggingContext.cs b/samples/core/Performance/Other/LazyLoading/LazyBloggingContext.cs index 2feb273536..3514e0cc9b 100644 --- a/samples/core/Performance/Other/LazyLoading/LazyBloggingContext.cs +++ b/samples/core/Performance/Other/LazyLoading/LazyBloggingContext.cs @@ -12,7 +12,7 @@ public class LazyBloggingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0") .LogTo(Console.WriteLine, LogLevel.Information) .UseLazyLoadingProxies(); } @@ -33,4 +33,4 @@ public class Post public int BlogId { get; set; } public virtual Blog Blog { get; set; } -} \ No newline at end of file +} diff --git a/samples/core/Performance/Other/Other.csproj b/samples/core/Performance/Other/Other.csproj index 65847f0f41..6faf421318 100644 --- a/samples/core/Performance/Other/Other.csproj +++ b/samples/core/Performance/Other/Other.csproj @@ -11,6 +11,7 @@ + diff --git a/samples/core/Performance/Other/Program.cs b/samples/core/Performance/Other/Program.cs index f5097b6be7..f8d7175bbb 100644 --- a/samples/core/Performance/Other/Program.cs +++ b/samples/core/Performance/Other/Program.cs @@ -20,8 +20,8 @@ private static async Task Main(string[] args) { using (var context = new BloggingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); context.Add( new Blog @@ -35,30 +35,30 @@ private static async Task Main(string[] args) } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new BloggingContext()) { #region Indexes // Matches on start, so uses an index (on SQL Server) - var posts1 = context.Posts.Where(p => p.Title.StartsWith("A")).ToList(); + var posts1 = await context.Posts.Where(p => p.Title.StartsWith("A")).ToListAsync(); // Matches on end, so does not use the index - var posts2 = context.Posts.Where(p => p.Title.EndsWith("A")).ToList(); + var posts2 = await context.Posts.Where(p => p.Title.EndsWith("A")).ToListAsync(); #endregion } using (var context = new BloggingContext()) { #region ProjectEntities - foreach (var blog in context.Blogs) + await foreach (var blog in context.Blogs.AsAsyncEnumerable()) { Console.WriteLine("Blog: " + blog.Url); } #endregion #region ProjectSingleProperty - foreach (var blogName in context.Blogs.Select(b => b.Url)) + await foreach (var blogName in context.Blogs.Select(b => b.Url).AsAsyncEnumerable()) { Console.WriteLine("Blog: " + blogName); } @@ -68,23 +68,23 @@ private static async Task Main(string[] args) using (var context = new BloggingContext()) { #region NoLimit - var blogsAll = context.Posts + var blogsAll = await context.Posts .Where(p => p.Title.StartsWith("A")) - .ToList(); + .ToListAsync(); #endregion #region Limit25 - var blogs25 = context.Posts + var blogs25 = await context.Posts .Where(p => p.Title.StartsWith("A")) .Take(25) - .ToList(); + .ToListAsync(); #endregion } using (var context = new BloggingContext()) { #region EagerlyLoadRelatedAndProject - foreach (var blog in context.Blogs.Select(b => new { b.Url, b.Posts }).ToList()) + await foreach (var blog in context.Blogs.Select(b => new { b.Url, b.Posts }).AsAsyncEnumerable()) { foreach (var post in blog.Posts) { @@ -98,19 +98,19 @@ private static async Task Main(string[] args) { #region BufferingAndStreaming // ToList and ToArray cause the entire resultset to be buffered: - var blogsList = context.Posts.Where(p => p.Title.StartsWith("A")).ToList(); - var blogsArray = context.Posts.Where(p => p.Title.StartsWith("A")).ToArray(); + var blogsList = await context.Posts.Where(p => p.Title.StartsWith("A")).ToListAsync(); + var blogsArray = await context.Posts.Where(p => p.Title.StartsWith("A")).ToArrayAsync(); // Foreach streams, processing one row at a time: - foreach (var blog in context.Posts.Where(p => p.Title.StartsWith("A"))) + await foreach (var blog in context.Posts.Where(p => p.Title.StartsWith("A")).AsAsyncEnumerable()) { // ... } - // AsEnumerable also streams, allowing you to execute LINQ operators on the client-side: + // AsAsyncEnumerable also streams, allowing you to execute LINQ operators on the client-side: var doubleFilteredBlogs = context.Posts .Where(p => p.Title.StartsWith("A")) // Translated to SQL and executed in the database - .AsEnumerable() + .AsAsyncEnumerable() .Where(p => SomeDotNetMethod(p)); // Executed at the client on all database results #endregion @@ -122,19 +122,19 @@ private static async Task Main(string[] args) using (var context = new BloggingContext()) { #region SaveChangesBatching - var blog = context.Blogs.Single(b => b.Url == "http://someblog.microsoft.com/"); + var blog = await context.Blogs.SingleAsync(b => b.Url == "http://someblog.microsoft.com/"); blog.Url = "http://someotherblog.microsoft.com/"; context.Add(new Blog { Url = "http://newblog1.microsoft.com/" }); context.Add(new Blog { Url = "http://newblog2.microsoft.com/" }); - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion } using (var context = new BloggingContext()) { #region QueriesWithConstants - var post1 = context.Posts.FirstOrDefault(p => p.Title == "post1"); - var post2 = context.Posts.FirstOrDefault(p => p.Title == "post2"); + var post1 = await context.Posts.FirstOrDefaultAsync(p => p.Title == "post1"); + var post2 = await context.Posts.FirstOrDefaultAsync(p => p.Title == "post2"); #endregion } @@ -142,16 +142,16 @@ private static async Task Main(string[] args) { #region QueriesWithParameterization var postTitle = "post1"; - var post1 = context.Posts.FirstOrDefault(p => p.Title == postTitle); + var post1 = await context.Posts.FirstOrDefaultAsync(p => p.Title == postTitle); postTitle = "post2"; - var post2 = context.Posts.FirstOrDefault(p => p.Title == postTitle); + var post2 = await context.Posts.FirstOrDefaultAsync(p => p.Title == postTitle); #endregion } using (var context = new LazyBloggingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); for (var i = 0; i < 10; i++) { @@ -166,13 +166,13 @@ private static async Task Main(string[] args) }); } - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new LazyBloggingContext()) { #region NPlusOne - foreach (var blog in context.Blogs.ToList()) + foreach (var blog in await context.Blogs.ToListAsync()) { foreach (var post in blog.Posts) { @@ -184,8 +184,8 @@ private static async Task Main(string[] args) using (var context = new EmployeeContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); for (var i = 0; i < 10; i++) { @@ -196,41 +196,41 @@ private static async Task Main(string[] args) using (var context = new EmployeeContext()) { #region UpdateWithoutBulk - foreach (var employee in context.Employees) + await foreach (var employee in context.Employees.AsAsyncEnumerable()) { employee.Salary += 1000; } - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion } using (var context = new EmployeeContext()) { #region UpdateWithBulk - context.Database.ExecuteSqlRaw("UPDATE [Employees] SET [Salary] = [Salary] + 1000"); + await context.Database.ExecuteSqlRawAsync("UPDATE [Employees] SET [Salary] = [Salary] + 1000"); #endregion } using (var context = new PooledBloggingContext( new DbContextOptionsBuilder() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0") .Options)) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region DbContextPoolingWithoutDI var options = new DbContextOptionsBuilder() - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0") .Options; var factory = new PooledDbContextFactory(options); using (var context = factory.CreateDbContext()) { - var allPosts = context.Posts.ToList(); + var allPosts = await context.Posts.ToListAsync(); } #endregion @@ -244,4 +244,4 @@ private static async Task Main(string[] args) #endregion } } -} \ No newline at end of file +} diff --git a/samples/core/Querying/ClientEvaluation/BloggingContext.cs b/samples/core/Querying/ClientEvaluation/BloggingContext.cs index e8bbaf6f75..a30e355c17 100644 --- a/samples/core/Querying/ClientEvaluation/BloggingContext.cs +++ b/samples/core/Querying/ClientEvaluation/BloggingContext.cs @@ -17,6 +17,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.ClientEvaluation;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.ClientEvaluation;Trusted_Connection=True;ConnectRetryCount=0"); } -} \ No newline at end of file +} diff --git a/samples/core/Querying/ClientEvaluation/ClientEvaluation.csproj b/samples/core/Querying/ClientEvaluation/ClientEvaluation.csproj index 7c6272d507..cdbc54cb16 100644 --- a/samples/core/Querying/ClientEvaluation/ClientEvaluation.csproj +++ b/samples/core/Querying/ClientEvaluation/ClientEvaluation.csproj @@ -10,6 +10,7 @@ + diff --git a/samples/core/Querying/ClientEvaluation/Program.cs b/samples/core/Querying/ClientEvaluation/Program.cs index 603e7ec5b6..b82b45f0cb 100644 --- a/samples/core/Querying/ClientEvaluation/Program.cs +++ b/samples/core/Querying/ClientEvaluation/Program.cs @@ -1,5 +1,7 @@ using System; using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; namespace EFQuerying.ClientEvaluation; @@ -19,22 +21,22 @@ public static string StandardizeUrl(string url) } #endregion - private static void Main(string[] args) + private static async Task Main(string[] args) { using (var context = new BloggingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } using (var context = new BloggingContext()) { #region ClientProjection - var blogs = context.Blogs + var blogs = await context.Blogs .OrderByDescending(blog => blog.Rating) .Select( blog => new { Id = blog.BlogId, Url = StandardizeUrl(blog.Url) }) - .ToList(); + .ToListAsync(); #endregion } @@ -43,9 +45,9 @@ private static void Main(string[] args) try { #region ClientWhere - var blogs = context.Blogs + var blogs = await context.Blogs .Where(blog => StandardizeUrl(blog.Url).Contains("dotnet")) - .ToList(); + .ToListAsync(); #endregion } catch (Exception e) @@ -58,10 +60,10 @@ private static void Main(string[] args) { #region ExplicitClientEvaluation var blogs = context.Blogs - .AsEnumerable() + .AsAsyncEnumerable() .Where(blog => StandardizeUrl(blog.Url).Contains("dotnet")) - .ToList(); + .ToListAsync(); #endregion } } -} \ No newline at end of file +} diff --git a/samples/core/Querying/ComplexQuery/BloggingContext.cs b/samples/core/Querying/ComplexQuery/BloggingContext.cs index 397e861967..9637383ef3 100644 --- a/samples/core/Querying/ComplexQuery/BloggingContext.cs +++ b/samples/core/Querying/ComplexQuery/BloggingContext.cs @@ -103,6 +103,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.ComplexQuery;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.ComplexQuery;Trusted_Connection=True;ConnectRetryCount=0"); } -} \ No newline at end of file +} diff --git a/samples/core/Querying/NullSemantics/NullSemanticsContext.cs b/samples/core/Querying/NullSemantics/NullSemanticsContext.cs index e2fc5ad25c..76c04fc54e 100644 --- a/samples/core/Querying/NullSemantics/NullSemanticsContext.cs +++ b/samples/core/Querying/NullSemantics/NullSemanticsContext.cs @@ -18,7 +18,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) } optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=NullSemanticsSample;Trusted_Connection=True;MultipleActiveResultSets=true"); + @"Server=(localdb)\mssqllocaldb;Database=NullSemanticsSample;Trusted_Connection=True;MultipleActiveResultSets=true;ConnectRetryCount=0"); } protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -65,4 +65,4 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) String2 = null }); } -} \ No newline at end of file +} diff --git a/samples/core/Querying/NullSemantics/Program.cs b/samples/core/Querying/NullSemantics/Program.cs index fe6cf57ff2..e57ef06bdf 100644 --- a/samples/core/Querying/NullSemantics/Program.cs +++ b/samples/core/Querying/NullSemantics/Program.cs @@ -1,17 +1,19 @@ using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; namespace NullSemantics; internal class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { using var context = new NullSemanticsContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); //#region FunctionSqlRaw - //context.Database.ExecuteSqlRaw( + //await context.Database.ExecuteSqlRawAsync( // @"create function [dbo].[ConcatStrings] (@prm1 nvarchar(max), @prm2 nvarchar(max)) // returns nvarchar(max) // as @@ -20,12 +22,12 @@ private static void Main(string[] args) // end"); //#endregion - //BasicExamples(); - Functions(); - //ManualOptimization(); + //await BasicExamples(); + await Functions(); + //await ManualOptimization(); } - private static void BasicExamples() + private static async Task BasicExamples() { using var context = new NullSemanticsContext(); #region BasicExamples @@ -36,14 +38,14 @@ private static void BasicExamples() var query5 = context.Entities.Where(e => e.String1 != e.String2); #endregion - var result1 = query1.ToList(); - var result2 = query2.ToList(); - var result3 = query3.ToList(); - var result4 = query4.ToList(); - var result5 = query5.ToList(); + var result1 = await query1.ToListAsync(); + var result2 = await query2.ToListAsync(); + var result3 = await query3.ToListAsync(); + var result4 = await query4.ToListAsync(); + var result5 = await query5.ToListAsync(); } - private static void Functions() + private static async Task Functions() { using var context = new NullSemanticsContext(); @@ -51,10 +53,10 @@ private static void Functions() var query = context.Entities.Where(e => e.String1.Substring(0, e.String2.Length) == null); #endregion - var result = query.ToList(); + var result = await query.ToListAsync(); } - private static void ManualOptimization() + private static async Task ManualOptimization() { using var context = new NullSemanticsContext(); @@ -64,7 +66,7 @@ private static void ManualOptimization() e => e.String1 != null && e.String2 != null && (e.String1 != e.String2 || e.String1.Length == e.String2.Length)); #endregion - var result1 = query1.ToList(); - var result2 = query2.ToList(); + var result1 = await query1.ToListAsync(); + var result2 = await query2.ToListAsync(); } -} \ No newline at end of file +} diff --git a/samples/core/Querying/Overview/BloggingContext.cs b/samples/core/Querying/Overview/BloggingContext.cs index 28e257912c..849e8b9e3f 100644 --- a/samples/core/Querying/Overview/BloggingContext.cs +++ b/samples/core/Querying/Overview/BloggingContext.cs @@ -17,6 +17,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.Overview;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.Overview;Trusted_Connection=True;ConnectRetryCount=0"); } -} \ No newline at end of file +} diff --git a/samples/core/Querying/Overview/Program.cs b/samples/core/Querying/Overview/Program.cs index f99860d807..24a122a9e8 100644 --- a/samples/core/Querying/Overview/Program.cs +++ b/samples/core/Querying/Overview/Program.cs @@ -1,39 +1,41 @@ using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; namespace EFQuerying.Overview; internal class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { using (var context = new BloggingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region LoadingAllData using (var context = new BloggingContext()) { - var blogs = context.Blogs.ToList(); + var blogs = await context.Blogs.ToListAsync(); } #endregion #region LoadingSingleEntity using (var context = new BloggingContext()) { - var blog = context.Blogs - .Single(b => b.BlogId == 1); + var blog = await context.Blogs + .SingleAsync(b => b.BlogId == 1); } #endregion #region Filtering using (var context = new BloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Where(b => b.Url.Contains("dotnet")) - .ToList(); + .ToListAsync(); } #endregion } -} \ No newline at end of file +} diff --git a/samples/core/Querying/Pagination/BloggingContext.cs b/samples/core/Querying/Pagination/BloggingContext.cs index cf7a2c86d0..b154ede4e8 100644 --- a/samples/core/Querying/Pagination/BloggingContext.cs +++ b/samples/core/Querying/Pagination/BloggingContext.cs @@ -14,7 +14,7 @@ public class BloggingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0") .LogTo(Console.WriteLine, LogLevel.Information); } #endregion @@ -42,4 +42,4 @@ public class Post public int BlogId { get; set; } public Blog Blog { get; set; } -} \ No newline at end of file +} diff --git a/samples/core/Querying/Pagination/Program.cs b/samples/core/Querying/Pagination/Program.cs index e2a62eb61c..4eedaa5207 100644 --- a/samples/core/Querying/Pagination/Program.cs +++ b/samples/core/Querying/Pagination/Program.cs @@ -1,28 +1,29 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFQuerying.Pagination; internal class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { using (var context = new BloggingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } using (var context = new BloggingContext()) { #region OffsetPagination var position = 20; - var nextPage = context.Posts + var nextPage = await context.Posts .OrderBy(b => b.PostId) .Skip(position) .Take(10) - .ToList(); + .ToListAsync(); #endregion } @@ -30,11 +31,11 @@ private static void Main(string[] args) { #region KeySetPagination var lastId = 55; - var nextPage = context.Posts + var nextPage = await context.Posts .OrderBy(b => b.PostId) .Where(b => b.PostId > lastId) .Take(10) - .ToList(); + .ToListAsync(); #endregion } @@ -43,13 +44,13 @@ private static void Main(string[] args) #region KeySetPaginationWithMultipleKeys var lastDate = new DateTime(2020, 1, 1); var lastId = 55; - var nextPage = context.Posts + var nextPage = await context.Posts .OrderBy(b => b.Date) .ThenBy(b => b.PostId) .Where(b => b.Date > lastDate || (b.Date == lastDate && b.PostId > lastId)) .Take(10) - .ToList(); + .ToListAsync(); #endregion } } -} \ No newline at end of file +} diff --git a/samples/core/Querying/QueryFilters/AnimalContext.cs b/samples/core/Querying/QueryFilters/AnimalContext.cs deleted file mode 100644 index f5b6f0fb07..0000000000 --- a/samples/core/Querying/QueryFilters/AnimalContext.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace EFQuerying.QueryFilters; - -public class AnimalContext : DbContext -{ - public DbSet People { get; set; } - public DbSet Animals { get; set; } - public DbSet Toys { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder - .UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=Querying.QueryFilters.Animals;Trusted_Connection=True"); - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().HasOne(c => c.Tolerates).WithOne(d => d.FriendsWith).HasForeignKey(c => c.ToleratesId); - modelBuilder.Entity().HasOne(d => d.FavoriteToy).WithOne(t => t.BelongsTo).HasForeignKey(d => d.BelongsToId); - - modelBuilder.Entity().HasQueryFilter(p => p.Pets.Count > 0); - modelBuilder.Entity().HasQueryFilter(a => !a.Name.StartsWith("P")); - modelBuilder.Entity().HasQueryFilter(a => a.Name.Length > 5); - - // Invalid query filter configuration as it causes cycles in query filters - //modelBuilder.Entity().HasQueryFilter(a => a.Owner.Name != "John"); - } -} \ No newline at end of file diff --git a/samples/core/Querying/QueryFilters/BloggingContext.cs b/samples/core/Querying/QueryFilters/BloggingContext.cs deleted file mode 100644 index ca54251483..0000000000 --- a/samples/core/Querying/QueryFilters/BloggingContext.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Linq; -using Microsoft.EntityFrameworkCore; - -namespace EFQuerying.QueryFilters; - -public class BloggingContext : DbContext -{ - private readonly string _tenantId; - - public BloggingContext(string tenant) - { - _tenantId = tenant; - } - - public DbSet Blogs { get; set; } - public DbSet Posts { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder - .UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=Querying.QueryFilters.Blogging;Trusted_Connection=True"); - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().Property("_tenantId").HasColumnName("TenantId"); - - // Configure entity filters - #region FilterConfiguration - modelBuilder.Entity().HasQueryFilter(b => EF.Property(b, "_tenantId") == _tenantId); - modelBuilder.Entity().HasQueryFilter(p => !p.IsDeleted); - #endregion - } - - public override int SaveChanges() - { - ChangeTracker.DetectChanges(); - - foreach (var item in ChangeTracker.Entries().Where( - e => - e.State == EntityState.Added && e.Metadata.GetProperties().Any(p => p.Name == "_tenantId"))) - { - item.CurrentValues["_tenantId"] = _tenantId; - } - - foreach (var item in ChangeTracker.Entries().Where(e => e.State == EntityState.Deleted)) - { - item.State = EntityState.Modified; - item.CurrentValues["IsDeleted"] = true; - } - - return base.SaveChanges(); - } -} \ No newline at end of file diff --git a/samples/core/Querying/QueryFilters/Entities.cs b/samples/core/Querying/QueryFilters/Entities.cs deleted file mode 100644 index 842db652ea..0000000000 --- a/samples/core/Querying/QueryFilters/Entities.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Collections.Generic; - -namespace EFQuerying.QueryFilters; - -#region Entities -public class Blog -{ -#pragma warning disable IDE0051, CS0169 // Remove unused private members - private string _tenantId; -#pragma warning restore IDE0051, CS0169 // Remove unused private members - - public int BlogId { get; set; } - public string Name { get; set; } - public string Url { get; set; } - - public List Posts { get; set; } -} - -public class Post -{ - public int PostId { get; set; } - public string Title { get; set; } - public string Content { get; set; } - public bool IsDeleted { get; set; } - - public Blog Blog { get; set; } -} -#endregion - -public class Person -{ - public int Id { get; set; } - public string Name { get; set; } - public List Pets { get; set; } -} - -public abstract class Animal -{ - public int Id { get; set; } - public string Name { get; set; } - public Person Owner { get; set; } -} - -public class Cat : Animal -{ - public bool PrefersCardboardBoxes { get; set; } - - public int? ToleratesId { get; set; } - - public Dog Tolerates { get; set; } -} - -public class Dog : Animal -{ - public Toy FavoriteToy { get; set; } - public Cat FriendsWith { get; set; } -} - -public class Toy -{ - public int Id { get; set; } - public string Name { get; set; } - public int? BelongsToId { get; set; } - public Dog BelongsTo { get; set; } -} \ No newline at end of file diff --git a/samples/core/Querying/QueryFilters/FilteredBloggingContextRequired.cs b/samples/core/Querying/QueryFilters/FilteredBloggingContextRequired.cs deleted file mode 100644 index 2cac7cc0fe..0000000000 --- a/samples/core/Querying/QueryFilters/FilteredBloggingContextRequired.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace EFQuerying.QueryFilters; - -public class FilteredBloggingContextRequired : DbContext -{ - public DbSet Blogs { get; set; } - public DbSet Posts { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder - .UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=Querying.QueryFilters.BloggingRequired;Trusted_Connection=True"); - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - var setup = "OptionalNav"; - if (setup == "Faulty") - { - // Incorrect setup - Required navigation used to reference entity that has query filter defined, - // but no query filter for the entity on the other side of the navigation. - #region IncorrectFilter - modelBuilder.Entity().HasMany(b => b.Posts).WithOne(p => p.Blog).IsRequired(); - modelBuilder.Entity().HasQueryFilter(b => b.Url.Contains("fish")); - #endregion - } - else if (setup == "OptionalNav") - { - // The relationship is marked as optional so dependent can exist even if principal is filtered out. - #region OptionalNavigation - modelBuilder.Entity().HasMany(b => b.Posts).WithOne(p => p.Blog).IsRequired(false); - modelBuilder.Entity().HasQueryFilter(b => b.Url.Contains("fish")); - #endregion - } - else if (setup == "NavigationInFilter") - { - #region NavigationInFilter - modelBuilder.Entity().HasMany(b => b.Posts).WithOne(p => p.Blog); - modelBuilder.Entity().HasQueryFilter(b => b.Posts.Count > 0); - modelBuilder.Entity().HasQueryFilter(p => p.Title.Contains("fish")); - #endregion - } - else - { - // The relationship is still required but there is a matching filter configured on dependent side too, - // which matches principal side. So if principal is filtered out, the dependent would also be. - #region MatchingFilters - modelBuilder.Entity().HasMany(b => b.Posts).WithOne(p => p.Blog).IsRequired(); - modelBuilder.Entity().HasQueryFilter(b => b.Url.Contains("fish")); - modelBuilder.Entity().HasQueryFilter(p => p.Blog.Url.Contains("fish")); - #endregion - } - } -} \ No newline at end of file diff --git a/samples/core/Querying/QueryFilters/Multitenancy.cs b/samples/core/Querying/QueryFilters/Multitenancy.cs new file mode 100644 index 0000000000..c30fbb9e52 --- /dev/null +++ b/samples/core/Querying/QueryFilters/Multitenancy.cs @@ -0,0 +1,64 @@ +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; + +#nullable enable + +namespace EFQuerying.QueryFilters; + +public static class Multitenancy +{ + public static async Task Sample() + { + // First, create the database and add some data to it + using (var context = new MultitenancyContext("John")) + { + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + + context.Blogs.AddRange( + new() { Name = "John's blog", TenantId = "John" }, + new() { Name = "Mary's blog", TenantId = "Mary" }); + await context.SaveChangesAsync(); + } + + // Now, let's query out all blogs. + // Since we specify Mary as the tenant ID for the context, only Mary's blogs will be returned. + using (var context = new MultitenancyContext("Mary")) + { + Console.WriteLine("Blogs:"); + await foreach (var blog in context.Blogs) + { + Console.WriteLine(blog.Name); + } + } + } + + public class MultitenancyContext(string tenantId) : DbContext + { + public DbSet Blogs { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseSqlServer( + @"Server=(localdb)\mssqllocaldb;Database=Querying.QueryFilters.Blogging;Trusted_Connection=True;ConnectRetryCount=0"); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().HasQueryFilter(b => b.TenantId == tenantId); + } + } + + #region Blog + public class Blog + { + public int Id { get; set; } + public required string TenantId { get; set; } + + public string Name { get; set; } + } + #endregion +} diff --git a/samples/core/Querying/QueryFilters/NamedFilters.cs b/samples/core/Querying/QueryFilters/NamedFilters.cs new file mode 100644 index 0000000000..26c788a9e6 --- /dev/null +++ b/samples/core/Querying/QueryFilters/NamedFilters.cs @@ -0,0 +1,113 @@ +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; + +#nullable enable + +namespace EFQuerying.QueryFilters; + +public static class NamedFilters +{ + public static async Task Sample() + { + // First, create the database and add some data to it + using (var context = new NamedFiltersContext("John")) + { + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + + context.Blogs.AddRange( + new() { Name = "John's first blog", TenantId = "John" }, + new() { Name = "John's second blog", TenantId = "John" }, + new() { Name = "Mary's blog", TenantId = "Mary" }); + await context.SaveChangesAsync(); + } + + // Let's delete a blog. Note that although our code seems to delete the blog in the regular way, + // our override of SaveChangesAsync below will actually modify it instead, setting the IsDeleted property to true. + using (var context = new NamedFiltersContext("John")) + { + var blog = await context.Blogs.FirstAsync(b => b.Name == "John's first blog"); + context.Blogs.Remove(blog); + await context.SaveChangesAsync(); + } + + // Now, let's query out all blogs. + // We only get John's second blog, because the first is filtered out by the soft deletion filter, and Mary's blog + // by the multitenancy filter. + using (var context = new NamedFiltersContext("John")) + { + Console.WriteLine("Blogs:"); + await foreach (var blog in context.Blogs) + { + Console.WriteLine(blog.Name); + } + } + + // Let's selectively disable only the soft deletion filter: + using (var context = new NamedFiltersContext("John")) + { + Console.WriteLine("Blogs (including soft-deleted ones):"); + #region DisableSoftDeletionFilter + var allBlogs = await context.Blogs.IgnoreQueryFilters(["SoftDeletionFilter"]).ToListAsync(); + #endregion + + foreach (var blog in allBlogs) + { + Console.WriteLine(blog.Name); + } + } + } + + public class NamedFiltersContext(string tenantId) : DbContext + { + public DbSet Blogs { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseSqlServer( + @"Server=(localdb)\mssqllocaldb;Database=Querying.QueryFilters.Blogging;Trusted_Connection=True;ConnectRetryCount=0"); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + #region FilterConfiguration + modelBuilder.Entity() + .HasQueryFilter("SoftDeletionFilter", b => !b.IsDeleted) + .HasQueryFilter("TenantFilter", b => b.TenantId == tenantId); + #endregion + } + + // The following overrides SaveChangesAsync to add logic which goes over all entities which the user deleted, and changes + // them to be modified instead, setting the IsDeleted property to true. + public override async Task SaveChangesAsync(CancellationToken cancellationToken = default) + { + ChangeTracker.DetectChanges(); + + foreach (var item in ChangeTracker.Entries().Where(e => e.State == EntityState.Deleted)) + { + item.State = EntityState.Modified; + item.CurrentValues["IsDeleted"] = true; + } + + return await base.SaveChangesAsync(cancellationToken); + } + + public override int SaveChanges() + => throw new NotSupportedException("Use SaveChangesAsync instead."); + } + + #region Blog + public class Blog + { + public int Id { get; set; } + public bool IsDeleted { get; set; } + public required string TenantId { get; set; } + + public string Name { get; set; } + } + #endregion +} diff --git a/samples/core/Querying/QueryFilters/Program.cs b/samples/core/Querying/QueryFilters/Program.cs index ab28ed4f8c..a133cb495f 100644 --- a/samples/core/Querying/QueryFilters/Program.cs +++ b/samples/core/Querying/QueryFilters/Program.cs @@ -1,325 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.EntityFrameworkCore; +using System.Threading.Tasks; namespace EFQuerying.QueryFilters; internal class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { - QueryFiltersBasicExample(); - QueryFiltersWithNavigationsExample(); - QueryFiltersWithRequiredNavigationExample(); - QueryFiltersUsingNavigationExample(); + await SoftDeletion.Sample(); + await Multitenancy.Sample(); + await NamedFilters.Sample(); + await QueryFiltersAndRequiredNavigations.Sample(); } - - private static void QueryFiltersBasicExample() - { - using (var db = new BloggingContext("diego")) - { - if (db.Database.EnsureCreated()) - { - db.Blogs.Add( - new Blog - { - Url = "http://sample.com/blogs/fish", - Posts = new List - { - new Post { Title = "Fish care 101" }, - new Post { Title = "Caring for tropical fish" }, - new Post { Title = "Types of ornamental fish" } - } - }); - - db.Blogs.Add( - new Blog - { - Url = "http://sample.com/blogs/cats", - Posts = new List - { - new Post { Title = "Cat care 101" }, - new Post { Title = "Caring for tropical cats" }, - new Post { Title = "Types of ornamental cats" } - } - }); - - db.SaveChanges(); - - using (var andrewDb = new BloggingContext("andrew")) - { - andrewDb.Blogs.Add( - new Blog - { - Url = "http://sample.com/blogs/catfish", - Posts = new List - { - new Post { Title = "Catfish care 101" }, new Post { Title = "History of the catfish name" } - } - }); - - andrewDb.SaveChanges(); - } - - db.Posts - .Where( - p => p.Title == "Caring for tropical fish" - || p.Title == "Cat care 101") - .ToList() - .ForEach(p => db.Posts.Remove(p)); - - db.SaveChanges(); - } - } - - using (var db = new BloggingContext("Diego")) - { - var blogs = db.Blogs - .Include(b => b.Posts) - .ToList(); - - foreach (var blog in blogs) - { - Console.WriteLine( - $"{blog.Url,-33} [Tenant: {db.Entry(blog).Property("_tenantId").CurrentValue}]"); - - foreach (var post in blog.Posts) - { - Console.WriteLine($" - {post.Title,-30} [IsDeleted: {post.IsDeleted}]"); - } - - Console.WriteLine(); - } - - #region IgnoreFilters - blogs = db.Blogs - .Include(b => b.Posts) - .IgnoreQueryFilters() - .ToList(); - #endregion - - foreach (var blog in blogs) - { - Console.WriteLine( - $"{blog.Url,-33} [Tenant: {db.Entry(blog).Property("_tenantId").CurrentValue}]"); - - foreach (var post in blog.Posts) - { - Console.WriteLine($" - {post.Title,-30} [IsDeleted: {post.IsDeleted}]"); - } - } - } - } - - private static void QueryFiltersWithNavigationsExample() - { - using (var animalContext = new AnimalContext()) - { - animalContext.Database.EnsureDeleted(); - animalContext.Database.EnsureCreated(); - - var janice = new Person { Name = "Janice" }; - var jamie = new Person { Name = "Jamie" }; - var cesar = new Person { Name = "Cesar" }; - var paul = new Person { Name = "Paul" }; - var dominic = new Person { Name = "Dominic" }; - - var kibbles = new Cat { Name = "Kibbles", PrefersCardboardBoxes = false, Owner = janice }; - var sammy = new Cat { Name = "Sammy", PrefersCardboardBoxes = true, Owner = janice }; - var puffy = new Cat { Name = "Puffy", PrefersCardboardBoxes = true, Owner = jamie }; - var hati = new Dog { Name = "Hati", FavoriteToy = new Toy { Name = "Squeeky duck" }, Owner = dominic, FriendsWith = puffy }; - var simba = new Dog { Name = "Simba", FavoriteToy = new Toy { Name = "Bone" }, Owner = cesar, FriendsWith = sammy }; - puffy.Tolerates = hati; - sammy.Tolerates = simba; - - animalContext.People.AddRange(janice, jamie, cesar, paul, dominic); - animalContext.Animals.AddRange(kibbles, sammy, puffy, hati, simba); - animalContext.SaveChanges(); - } - - using (var animalContext = new AnimalContext()) - { - Console.WriteLine("*****************"); - Console.WriteLine("* Animal lovers *"); - Console.WriteLine("*****************"); - - // Jamie and Paul are filtered out. - // Paul doesn't own any pets. Jamie owns Puffy, but her pet has been filtered out. - var animalLovers = animalContext.People.ToList(); - DisplayResults(animalLovers); - - Console.WriteLine("**************************************************"); - Console.WriteLine("* Animal lovers and their pets - filters enabled *"); - Console.WriteLine("**************************************************"); - - // Jamie and Paul are filtered out. - // Paul doesn't own any pets. Jamie owns Puffy, but her pet has been filtered out. - // Simba's favorite toy has also been filtered out. - // Puffy is filtered out so he doesn't show up as Hati's friend. - var ownersAndTheirPets = animalContext.People - .Include(p => p.Pets) - .ThenInclude(p => ((Dog)p).FavoriteToy) - .ToList(); - - DisplayResults(ownersAndTheirPets); - - Console.WriteLine("*********************************************************"); - Console.WriteLine("* Animal lovers and their pets - query filters disabled *"); - Console.WriteLine("*********************************************************"); - - var ownersAndTheirPetsUnfiltered = animalContext.People - .IgnoreQueryFilters() - .Include(p => p.Pets) - .ThenInclude(p => ((Dog)p).FavoriteToy) - .ToList(); - - DisplayResults(ownersAndTheirPetsUnfiltered); - } - - static void DisplayResults(List people) - { - foreach (var person in people) - { - Console.WriteLine($"{person.Name}"); - if (person.Pets != null) - { - foreach (var pet in person.Pets) - { - Console.Write($" - {pet.Name} [{pet.GetType().Name}] "); - if (pet is Cat cat) - { - Console.Write($"| Prefers cardboard boxes: {(cat.PrefersCardboardBoxes ? "Yes" : "No")} "); - Console.WriteLine($"| Tolerates: {(cat.Tolerates != null ? cat.Tolerates.Name : "No one")}"); - } - else if (pet is Dog dog) - { - Console.Write($"| Favorite toy: {(dog.FavoriteToy != null ? dog.FavoriteToy.Name : "None")} "); - Console.WriteLine($"| Friend: {(dog.FriendsWith != null ? dog.FriendsWith.Name : "The Owner")}"); - } - } - } - } - } - } - - private static void QueryFiltersWithRequiredNavigationExample() - { - using (var db = new FilteredBloggingContextRequired()) - { - db.Database.EnsureDeleted(); - db.Database.EnsureCreated(); - - #region SeedData - db.Blogs.Add( - new Blog - { - Url = "http://sample.com/blogs/fish", - Posts = new List - { - new Post { Title = "Fish care 101" }, - new Post { Title = "Caring for tropical fish" }, - new Post { Title = "Types of ornamental fish" } - } - }); - - db.Blogs.Add( - new Blog - { - Url = "http://sample.com/blogs/cats", - Posts = new List - { - new Post { Title = "Cat care 101" }, - new Post { Title = "Caring for tropical cats" }, - new Post { Title = "Types of ornamental cats" } - } - }); - #endregion - - db.SaveChanges(); - } - - Console.WriteLine("Use of required navigations to access entity with query filter demo"); - using (var db = new FilteredBloggingContextRequired()) - { - #region Queries - var allPosts = db.Posts.ToList(); - var allPostsWithBlogsIncluded = db.Posts.Include(p => p.Blog).ToList(); - #endregion - - if (allPosts.Count == allPostsWithBlogsIncluded.Count) - { - Console.WriteLine($"Query filters set up correctly. Result count for both queries: {allPosts.Count}."); - } - else - { - Console.WriteLine("Unexpected discrepancy due to query filters and required navigations interaction."); - Console.WriteLine($"All posts count: {allPosts.Count}."); - Console.WriteLine($"All posts with blogs included count: {allPostsWithBlogsIncluded.Count}."); - } - } - } - - private static void QueryFiltersUsingNavigationExample() - { - using (var db = new FilteredBloggingContextRequired()) - { - db.Database.EnsureDeleted(); - db.Database.EnsureCreated(); - - #region SeedDataNavigation - db.Blogs.Add( - new Blog - { - Url = "http://sample.com/blogs/fish", - Posts = new List - { - new Post { Title = "Fish care 101" }, - new Post { Title = "Caring for tropical fish" }, - new Post { Title = "Types of ornamental fish" } - } - }); - - db.Blogs.Add( - new Blog - { - Url = "http://sample.com/blogs/cats", - Posts = new List - { - new Post { Title = "Cat care 101" }, - new Post { Title = "Caring for tropical cats" }, - new Post { Title = "Types of ornamental cats" } - } - }); - - db.Blogs.Add( - new Blog - { - Url = "http://sample.com/blogs/catfish", - Posts = new List - { - new Post { Title = "Catfish care 101" }, new Post { Title = "History of the catfish name" } - } - }); - #endregion - - db.SaveChanges(); - } - - Console.WriteLine("Query filters using navigations demo"); - using (var db = new FilteredBloggingContextRequired()) - { - #region QueriesNavigation - var filteredBlogs = db.Blogs.ToList(); - #endregion - var filteredBlogsInclude = db.Blogs.Include(b => b.Posts).ToList(); - if (filteredBlogs.Count == 2 - && filteredBlogsInclude.Count == 2) - { - Console.WriteLine("Blogs without any Posts are also filtered out. Posts must contain 'fish' in title."); - Console.WriteLine( - "Filters are applied recursively, so Blogs that do have Posts, but those Posts don't contain 'fish' in the title will also be filtered out."); - } - } - } -} \ No newline at end of file +} diff --git a/samples/core/Querying/QueryFilters/QueryFilters.csproj b/samples/core/Querying/QueryFilters/QueryFilters.csproj index b0eb3ed38b..0fd5561e65 100644 --- a/samples/core/Querying/QueryFilters/QueryFilters.csproj +++ b/samples/core/Querying/QueryFilters/QueryFilters.csproj @@ -2,14 +2,14 @@ Exe - net8.0 + net10.0 EFQuerying.QueryFilters EFQuerying.QueryFilters - - + + diff --git a/samples/core/Querying/QueryFilters/QueryFiltersAndRequiredNavigations.cs b/samples/core/Querying/QueryFilters/QueryFiltersAndRequiredNavigations.cs new file mode 100644 index 0000000000..1b3e8ddebd --- /dev/null +++ b/samples/core/Querying/QueryFilters/QueryFiltersAndRequiredNavigations.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; + +namespace EFQuerying.QueryFilters; + +public static class QueryFiltersAndRequiredNavigations +{ + public static async Task Sample() + { + using (var db = new QueryFiltersAndRequiredNavigationsContext()) + { + await db.Database.EnsureDeletedAsync(); + await db.Database.EnsureCreatedAsync(); + + #region SeedData + db.Blogs.Add( + new Blog + { + Url = "http://sample.com/blogs/fish", + Posts = + [ + new() { Title = "Fish care 101" }, + new() { Title = "Caring for tropical fish" }, + new() { Title = "Types of ornamental fish" } + ] + }); + + db.Blogs.Add( + new Blog + { + Url = "http://sample.com/blogs/cats", + Posts = + [ + new() { Title = "Cat care 101" }, + new() { Title = "Caring for tropical cats" }, + new() { Title = "Types of ornamental cats" } + ] + }); + #endregion + + await db.SaveChangesAsync(); + } + + Console.WriteLine("Use of required navigations to access entity with query filter demo"); + using (var db = new QueryFiltersAndRequiredNavigationsContext()) + { + #region Queries + var allPosts = await db.Posts.ToListAsync(); + var allPostsWithBlogsIncluded = await db.Posts.Include(p => p.Blog).ToListAsync(); + #endregion + + if (allPosts.Count == allPostsWithBlogsIncluded.Count) + { + Console.WriteLine($"Query filters set up correctly. Result count for both queries: {allPosts.Count}."); + } + else + { + Console.WriteLine("Unexpected discrepancy due to query filters and required navigations interaction."); + Console.WriteLine($"All posts count: {allPosts.Count}."); + Console.WriteLine($"All posts with blogs included count: {allPostsWithBlogsIncluded.Count}."); + } + } + } + + public class QueryFiltersAndRequiredNavigationsContext : DbContext + { + public DbSet Blogs { get; set; } + public DbSet Posts { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder + .UseSqlServer( + @"Server=(localdb)\mssqllocaldb;Database=Querying.QueryFilters.BloggingRequired;Trusted_Connection=True;ConnectRetryCount=0"); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + var setup = "OptionalNav"; + if (setup == "Faulty") + { + // Incorrect setup - Required navigation used to reference entity that has query filter defined, + // but no query filter for the entity on the other side of the navigation. + #region IncorrectFilter + modelBuilder.Entity().HasMany(b => b.Posts).WithOne(p => p.Blog).IsRequired(); + modelBuilder.Entity().HasQueryFilter(b => b.Url.Contains("fish")); + #endregion + } + else if (setup == "OptionalNav") + { + // The relationship is marked as optional so dependent can exist even if principal is filtered out. + #region OptionalNavigation + modelBuilder.Entity().HasMany(b => b.Posts).WithOne(p => p.Blog).IsRequired(false); + modelBuilder.Entity().HasQueryFilter(b => b.Url.Contains("fish")); + #endregion + } + else if (setup == "NavigationInFilter") + { + #region NavigationInFilter + modelBuilder.Entity().HasMany(b => b.Posts).WithOne(p => p.Blog); + modelBuilder.Entity().HasQueryFilter(b => b.Posts.Count > 0); + modelBuilder.Entity().HasQueryFilter(p => p.Title.Contains("fish")); + #endregion + } + else + { + // The relationship is still required but there is a matching filter configured on dependent side too, + // which matches principal side. So if principal is filtered out, the dependent would also be. + #region MatchingFilters + modelBuilder.Entity().HasMany(b => b.Posts).WithOne(p => p.Blog).IsRequired(); + modelBuilder.Entity().HasQueryFilter(b => b.Url.Contains("fish")); + modelBuilder.Entity().HasQueryFilter(p => p.Blog.Url.Contains("fish")); + #endregion + } + } + } + + public class Blog + { + #pragma warning disable IDE0051, CS0169 // Remove unused private members + private string _tenantId; + #pragma warning restore IDE0051, CS0169 // Remove unused private members + + public int BlogId { get; set; } + public string Name { get; set; } + public string Url { get; set; } + + public List Posts { get; set; } + } + + public class Post + { + public int PostId { get; set; } + public string Title { get; set; } + public string Content { get; set; } + public bool IsDeleted { get; set; } + + public Blog Blog { get; set; } + } +} diff --git a/samples/core/Querying/QueryFilters/SoftDeletion.cs b/samples/core/Querying/QueryFilters/SoftDeletion.cs new file mode 100644 index 0000000000..ee91b9a288 --- /dev/null +++ b/samples/core/Querying/QueryFilters/SoftDeletion.cs @@ -0,0 +1,108 @@ +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; + +#nullable enable + +namespace EFQuerying.QueryFilters; + +public static class SoftDeletion +{ + public static async Task Sample() + { + // First, create the database and add some data to it + using (var context = new SoftDeleteContext()) + { + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); + + context.Blogs.AddRange( + new() { Name = "John's blog" }, + new() { Name = "Mary's blog" }); + await context.SaveChangesAsync(); + } + + // Let's delete a blog. Note that although our code seems to delete the blog in the regular way, + // our override of SaveChangesAsync below will actually modify it instead, setting the IsDeleted property to true. + using (var context = new SoftDeleteContext()) + { + var blog = await context.Blogs.FirstAsync(b => b.Name == "John's blog"); + context.Blogs.Remove(blog); + await context.SaveChangesAsync(); + } + + // Now, let's query out all blogs. The global query filter will ensure that John's blog is not returned, because it has been soft-deleted. + using (var context = new SoftDeleteContext()) + { + Console.WriteLine("Blogs:"); + await foreach (var blog in context.Blogs) + { + Console.WriteLine(blog.Name); + } + } + + // Finally, for auditing reasons, let's now query out all blogs, John's blog is returned even though it has been soft-deleted. + using (var context = new SoftDeleteContext()) + { + Console.WriteLine("Blogs (including soft-deleted ones):"); + #region DisableFilter + var allBlogs = await context.Blogs.IgnoreQueryFilters().ToListAsync(); + #endregion + + foreach (var blog in allBlogs) + { + Console.WriteLine(blog.Name); + } + } + } + + public class SoftDeleteContext : DbContext + { + public DbSet Blogs { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseSqlServer( + @"Server=(localdb)\mssqllocaldb;Database=Querying.QueryFilters.Blogging;Trusted_Connection=True;ConnectRetryCount=0"); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + #region FilterConfiguration + modelBuilder.Entity().HasQueryFilter(b => !b.IsDeleted); + #endregion + } + + // The following overrides SaveChangesAsync to add logic which goes over all entities which the user deleted, and changes + // them to be modified instead, setting the IsDeleted property to true. + #region SaveChangesAsyncOverride + public override async Task SaveChangesAsync(CancellationToken cancellationToken = default) + { + ChangeTracker.DetectChanges(); + + foreach (var item in ChangeTracker.Entries().Where(e => e.State == EntityState.Deleted)) + { + item.State = EntityState.Modified; + item.CurrentValues["IsDeleted"] = true; + } + + return await base.SaveChangesAsync(cancellationToken); + } + #endregion + + public override int SaveChanges() + => throw new NotSupportedException("Use SaveChangesAsync instead."); + } + + #region Blog + public class Blog + { + public int Id { get; set; } + public bool IsDeleted { get; set; } + + public string Name { get; set; } + } + #endregion +} diff --git a/samples/core/Querying/RelatedData/BloggingContext.cs b/samples/core/Querying/RelatedData/BloggingContext.cs index 9eb800f7e0..5644a1a007 100644 --- a/samples/core/Querying/RelatedData/BloggingContext.cs +++ b/samples/core/Querying/RelatedData/BloggingContext.cs @@ -122,6 +122,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.ComplexQuery;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.ComplexQuery;Trusted_Connection=True;ConnectRetryCount=0"); } -} \ No newline at end of file +} diff --git a/samples/core/Querying/RelatedData/Program.cs b/samples/core/Querying/RelatedData/Program.cs index 0a2cbcc880..e30c8663c5 100644 --- a/samples/core/Querying/RelatedData/Program.cs +++ b/samples/core/Querying/RelatedData/Program.cs @@ -1,223 +1,224 @@ using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFQuerying.RelatedData; internal class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { using (var context = new BloggingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region SingleInclude using (var context = new BloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts) - .ToList(); + .ToListAsync(); } #endregion #region IgnoredInclude using (var context = new BloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts) .Select( blog => new { Id = blog.BlogId, blog.Url }) - .ToList(); + .ToListAsync(); } #endregion #region MultipleIncludes using (var context = new BloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts) .Include(blog => blog.Owner) - .ToList(); + .ToListAsync(); } #endregion #region SingleThenInclude using (var context = new BloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts) .ThenInclude(post => post.Author) - .ToList(); + .ToListAsync(); } #endregion #region MultipleThenIncludes using (var context = new BloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts) .ThenInclude(post => post.Author) .ThenInclude(author => author.Photo) - .ToList(); + .ToListAsync(); } #endregion #region IncludeTree using (var context = new BloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts) .ThenInclude(post => post.Author) .ThenInclude(author => author.Photo) .Include(blog => blog.Owner) .ThenInclude(owner => owner.Photo) - .ToList(); + .ToListAsync(); } #endregion #region MultipleLeafIncludes using (var context = new BloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts) .ThenInclude(post => post.Author) .Include(blog => blog.Posts) .ThenInclude(post => post.Tags) - .ToList(); + .ToListAsync(); } #endregion #region IncludeMultipleNavigationsWithSingleInclude using (var context = new BloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Owner.AuthoredPosts) .ThenInclude(post => post.Blog.Owner.Photo) - .ToList(); + .ToListAsync(); } #endregion #region AsSplitQuery using (var context = new BloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts) .AsSplitQuery() - .ToList(); + .ToListAsync(); } #endregion using (var context = new SplitQueriesBloggingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region WithSplitQueryAsDefault using (var context = new SplitQueriesBloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts) - .ToList(); + .ToListAsync(); } #endregion #region AsSingleQuery using (var context = new SplitQueriesBloggingContext()) { - var blogs = context.Blogs + var blogs = await context.Blogs .Include(blog => blog.Posts) .AsSingleQuery() - .ToList(); + .ToListAsync(); } #endregion #region Explicit using (var context = new BloggingContext()) { - var blog = context.Blogs - .Single(b => b.BlogId == 1); + var blog = await context.Blogs + .SingleAsync(b => b.BlogId == 1); - context.Entry(blog) + await context.Entry(blog) .Collection(b => b.Posts) - .Load(); + .LoadAsync(); - context.Entry(blog) + await context.Entry(blog) .Reference(b => b.Owner) - .Load(); + .LoadAsync(); } #endregion #region NavQueryAggregate using (var context = new BloggingContext()) { - var blog = context.Blogs - .Single(b => b.BlogId == 1); + var blog = await context.Blogs + .SingleAsync(b => b.BlogId == 1); - var postCount = context.Entry(blog) + var postCount = await context.Entry(blog) .Collection(b => b.Posts) .Query() - .Count(); + .CountAsync(); } #endregion #region NavQueryFiltered using (var context = new BloggingContext()) { - var blog = context.Blogs - .Single(b => b.BlogId == 1); + var blog = await context.Blogs + .SingleAsync(b => b.BlogId == 1); - var goodPosts = context.Entry(blog) + var goodPosts = await context.Entry(blog) .Collection(b => b.Posts) .Query() .Where(p => p.Rating > 3) - .ToList(); + .ToListAsync(); } #endregion #region FilteredInclude using (var context = new BloggingContext()) { - var filteredBlogs = context.Blogs + var filteredBlogs = await context.Blogs .Include( blog => blog.Posts .Where(post => post.BlogId == 1) .OrderByDescending(post => post.Title) .Take(5)) - .ToList(); + .ToListAsync(); } #endregion #region MultipleLeafIncludesFiltered1 using (var context = new BloggingContext()) { - var filteredBlogs = context.Blogs + var filteredBlogs = await context.Blogs .Include(blog => blog.Posts.Where(post => post.BlogId == 1)) .ThenInclude(post => post.Author) .Include(blog => blog.Posts) .ThenInclude(post => post.Tags.OrderBy(postTag => postTag.TagId).Skip(3)) - .ToList(); + .ToListAsync(); } #endregion #region MultipleLeafIncludesFiltered2 using (var context = new BloggingContext()) { - var filteredBlogs = context.Blogs + var filteredBlogs = await context.Blogs .Include(blog => blog.Posts.Where(post => post.BlogId == 1)) .ThenInclude(post => post.Author) .Include(blog => blog.Posts.Where(post => post.BlogId == 1)) .ThenInclude(post => post.Tags.OrderBy(postTag => postTag.TagId).Skip(3)) - .ToList(); + .ToListAsync(); } #endregion #region AutoIncludes using (var context = new BloggingContext()) { - var themes = context.Themes.ToList(); + var themes = await context.Themes.ToListAsync(); } #endregion @@ -225,7 +226,7 @@ private static void Main(string[] args) #region IgnoreAutoIncludes using (var context = new BloggingContext()) { - var themes = context.Themes.IgnoreAutoIncludes().ToList(); + var themes = await context.Themes.IgnoreAutoIncludes().ToListAsync(); } #endregion diff --git a/samples/core/Querying/RelatedData/SplitQueriesBloggingContext.cs b/samples/core/Querying/RelatedData/SplitQueriesBloggingContext.cs index b1c55acafe..769d83edf4 100644 --- a/samples/core/Querying/RelatedData/SplitQueriesBloggingContext.cs +++ b/samples/core/Querying/RelatedData/SplitQueriesBloggingContext.cs @@ -9,8 +9,8 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFQuerying;Trusted_Connection=True", + @"Server=(localdb)\mssqllocaldb;Database=EFQuerying;Trusted_Connection=True;ConnectRetryCount=0", o => o.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery)); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Querying/SqlQueries/Blog.cs b/samples/core/Querying/SqlQueries/Blog.cs deleted file mode 100644 index 3bbf1c020a..0000000000 --- a/samples/core/Querying/SqlQueries/Blog.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Collections.Generic; - -namespace EFQuerying.RawSQL; - -public class Blog -{ - public int BlogId { get; set; } - public string Url { get; set; } - public int? Rating { get; set; } - - public List Posts { get; set; } -} \ No newline at end of file diff --git a/samples/core/Querying/SqlQueries/BloggingContext.cs b/samples/core/Querying/SqlQueries/BloggingContext.cs deleted file mode 100644 index fc3ed832cb..0000000000 --- a/samples/core/Querying/SqlQueries/BloggingContext.cs +++ /dev/null @@ -1,57 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace EFQuerying.RawSQL; - -public class BloggingContext : DbContext -{ - public DbSet Blogs { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity() - .HasData( - new Blog { BlogId = 1, Url = @"https://devblogs.microsoft.com/dotnet", Rating = 5 }, - new Blog { BlogId = 2, Url = @"https://mytravelblog.com/", Rating = 4 }); - - modelBuilder.Entity() - .HasData( - new Post - { - PostId = 1, - BlogId = 1, - Title = "What's new", - Content = "Lorem ipsum dolor sit amet", - Rating = 5 - }, - new Post - { - PostId = 2, - BlogId = 2, - Title = "Around the World in Eighty Days", - Content = "consectetur adipiscing elit", - Rating = 5 - }, - new Post - { - PostId = 3, - BlogId = 2, - Title = "Glamping *is* the way", - Content = "sed do eiusmod tempor incididunt", - Rating = 4 - }, - new Post - { - PostId = 4, - BlogId = 2, - Title = "Travel in the time of pandemic", - Content = "ut labore et dolore magna aliqua", - Rating = 3 - }); - } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.RawSQL;Trusted_Connection=True"); - } -} \ No newline at end of file diff --git a/samples/core/Querying/SqlQueries/Post.cs b/samples/core/Querying/SqlQueries/Post.cs deleted file mode 100644 index 42572f2647..0000000000 --- a/samples/core/Querying/SqlQueries/Post.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace EFQuerying.RawSQL; - -public class Post -{ - public int PostId { get; set; } - public string Title { get; set; } - public string Content { get; set; } - public int Rating { get; set; } - - public int BlogId { get; set; } - public Blog Blog { get; set; } -} \ No newline at end of file diff --git a/samples/core/Querying/SqlQueries/Program.cs b/samples/core/Querying/SqlQueries/Program.cs deleted file mode 100644 index 520309a877..0000000000 --- a/samples/core/Querying/SqlQueries/Program.cs +++ /dev/null @@ -1,175 +0,0 @@ -using System.Linq; -using Microsoft.Data.SqlClient; -using Microsoft.EntityFrameworkCore; - -namespace EFQuerying.RawSQL; - -internal class Program -{ - private static void Main(string[] args) - { - using (var context = new BloggingContext()) - { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); - - context.Database.ExecuteSqlRaw( - @"create function [dbo].[SearchBlogs] (@searchTerm nvarchar(max)) - returns @found table - ( - BlogId int not null, - Url nvarchar(max), - Rating int - ) - as - begin - insert into @found - select * from dbo.Blogs as b - where exists ( - select 1 - from [Post] as [p] - where ([b].[BlogId] = [p].[BlogId]) and (charindex(@searchTerm, [p].[Title]) > 0)) - - return - end"); - - context.Database.ExecuteSqlRaw( - @"create procedure [dbo].[GetMostPopularBlogs] as - begin - select * from dbo.Blogs order by Rating - end"); - - context.Database.ExecuteSqlRaw( - @"create procedure [dbo].[GetMostPopularBlogsForUser] @filterByUser nvarchar(max) as - begin - select * from dbo.Blogs order by Rating - end"); - } - - using (var context = new BloggingContext()) - { - #region FromSql - var blogs = context.Blogs - .FromSql($"SELECT * FROM dbo.Blogs") - .ToList(); - #endregion - } - - using (var context = new BloggingContext()) - { - #region FromSqlStoredProcedure - var blogs = context.Blogs - .FromSql($"EXECUTE dbo.GetMostPopularBlogs") - .ToList(); - #endregion - } - - using (var context = new BloggingContext()) - { - #region FromSqlStoredProcedureParameter - var user = "johndoe"; - - var blogs = context.Blogs - .FromSql($"EXECUTE dbo.GetMostPopularBlogsForUser {user}") - .ToList(); - #endregion - } - - using (var context = new BloggingContext()) - { - #region FromSqlStoredProcedureNamedSqlParameter - var user = new SqlParameter("user", "johndoe"); - - var blogs = context.Blogs - .FromSql($"EXECUTE dbo.GetMostPopularBlogsForUser @filterByUser={user}") - .ToList(); - #endregion - } - - using (var context = new BloggingContext()) - { - #region FromSqlStoredProcedureSqlParameter - var user = new SqlParameter("user", "johndoe"); - - var blogs = context.Blogs - .FromSql($"EXECUTE dbo.GetMostPopularBlogsForUser {user}") - .ToList(); - #endregion - } - - using (var context = new BloggingContext()) - { - #region FromSqlRawStoredProcedureParameter - var columnName = "Url"; - var columnValue = new SqlParameter("columnValue", "http://someurl/"); - - var blogs = context.Blogs - .FromSqlRaw($"SELECT * FROM [Blogs] WHERE {columnName} = @columnValue", columnValue) - .ToList(); - #endregion - } - - using (var context = new BloggingContext()) - { - #region FromSqlComposed - var searchTerm = "Lorem ipsum"; - - var blogs = context.Blogs - .FromSql($"SELECT * FROM dbo.SearchBlogs({searchTerm})") - .Where(b => b.Rating > 3) - .OrderByDescending(b => b.Rating) - .ToList(); - #endregion - } - - using (var context = new BloggingContext()) - { - #region FromSqlInclude - var searchTerm = "Lorem ipsum"; - - var blogs = context.Blogs - .FromSql($"SELECT * FROM dbo.SearchBlogs({searchTerm})") - .Include(b => b.Posts) - .ToList(); - #endregion - } - - using (var context = new BloggingContext()) - { - #region FromSqlAsNoTracking - var searchTerm = "Lorem ipsum"; - - var blogs = context.Blogs - .FromSql($"SELECT * FROM dbo.SearchBlogs({searchTerm})") - .AsNoTracking() - .ToList(); - #endregion - } - - using (var context = new BloggingContext()) - { - #region SqlQuery - var ids = context.Database - .SqlQuery($"SELECT [BlogId] FROM [Blogs]") - .ToList(); - #endregion - } - - using (var context = new BloggingContext()) - { - #region SqlQueryComposed - var overAverageIds = context.Database - .SqlQuery($"SELECT [BlogId] AS [Value] FROM [Blogs]") - .Where(id => id > context.Blogs.Average(b => b.BlogId)) - .ToList(); - #endregion - } - - #region ExecuteSql - using (var context = new BloggingContext()) - { - var rowsModified = context.Database.ExecuteSql($"UPDATE [Blogs] SET [Url] = NULL"); - } - #endregion - } -} diff --git a/samples/core/Querying/SqlQueries/SqlQueries.csproj b/samples/core/Querying/SqlQueries/SqlQueries.csproj deleted file mode 100644 index 3e19393e44..0000000000 --- a/samples/core/Querying/SqlQueries/SqlQueries.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - EFQuerying.SqlQueries - EFQuerying.SqlQueries - - - - - - - - diff --git a/samples/core/Querying/Tags/Program.cs b/samples/core/Querying/Tags/Program.cs index aad7e02154..a376d7db13 100644 --- a/samples/core/Querying/Tags/Program.cs +++ b/samples/core/Querying/Tags/Program.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using NetTopologySuite.Geometries; @@ -6,37 +7,37 @@ namespace EFQuerying.Tags; internal class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { using (var context = new SpatialContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } using (var context = new SpatialContext()) { #region BasicQueryTag var myLocation = new Point(1, 2); - var nearestPeople = (from f in context.People.TagWith("This is my spatial query!") + var nearestPeople = await (from f in context.People.TagWith("This is my spatial query!") orderby f.Location.Distance(myLocation) descending - select f).Take(5).ToList(); + select f).Take(5).ToListAsync(); #endregion } using (var context = new SpatialContext()) { #region ChainedQueryTags - var results = Limit(GetNearestPeople(context, new Point(1, 2)), 25).ToList(); + var results = await Limit(GetNearestPeople(context, new Point(1, 2)), 25).ToListAsync(); #endregion } using (var context = new SpatialContext()) { #region MultilineQueryTag - var results = Limit(GetNearestPeople(context, new Point(1, 2)), 25).TagWith( + var results = await Limit(GetNearestPeople(context, new Point(1, 2)), 25).TagWith( @"This is a multi-line -string").ToList(); +string").ToListAsync(); #endregion } } @@ -55,4 +56,4 @@ public class Person { public int Id { get; set; } public Point Location { get; set; } -} \ No newline at end of file +} diff --git a/samples/core/Querying/Tags/SpatialContext.cs b/samples/core/Querying/Tags/SpatialContext.cs index 65f4085f94..89b4128915 100644 --- a/samples/core/Querying/Tags/SpatialContext.cs +++ b/samples/core/Querying/Tags/SpatialContext.cs @@ -24,7 +24,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.Tags;Trusted_Connection=True", + @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.Tags;Trusted_Connection=True;ConnectRetryCount=0", b => b.UseNetTopologySuite()); } -} \ No newline at end of file +} diff --git a/samples/core/Querying/Tracking/BloggingContext.cs b/samples/core/Querying/Tracking/BloggingContext.cs index 7355fc9e65..a3234e42b7 100644 --- a/samples/core/Querying/Tracking/BloggingContext.cs +++ b/samples/core/Querying/Tracking/BloggingContext.cs @@ -17,6 +17,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFQuerying.Tracking;Trusted_Connection=True"); + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFQuerying.Tracking;Trusted_Connection=True;ConnectRetryCount=0"); } -} \ No newline at end of file +} diff --git a/samples/core/Querying/Tracking/NonTrackingBloggingContext.cs b/samples/core/Querying/Tracking/NonTrackingBloggingContext.cs index 27cb4b9e36..2690db12e5 100644 --- a/samples/core/Querying/Tracking/NonTrackingBloggingContext.cs +++ b/samples/core/Querying/Tracking/NonTrackingBloggingContext.cs @@ -18,8 +18,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder - .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFQuerying.Tracking;Trusted_Connection=True") + .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFQuerying.Tracking;Trusted_Connection=True;ConnectRetryCount=0") .UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Querying/Tracking/Program.cs b/samples/core/Querying/Tracking/Program.cs index d5e39bc933..793e77067d 100644 --- a/samples/core/Querying/Tracking/Program.cs +++ b/samples/core/Querying/Tracking/Program.cs @@ -1,16 +1,17 @@ using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFQuerying.Tracking; internal class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { using (var context = new BloggingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } using (var context = new BloggingContext()) @@ -18,33 +19,33 @@ private static void Main(string[] args) // seeding database context.Blogs.Add(new Blog { Url = "http://sample.com/blog" }); context.Blogs.Add(new Blog { Url = "http://sample.com/another_blog" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new BloggingContext()) { #region Tracking - var blog = context.Blogs.SingleOrDefault(b => b.BlogId == 1); + var blog = await context.Blogs.SingleOrDefaultAsync(b => b.BlogId == 1); blog.Rating = 5; - context.SaveChanges(); + await context.SaveChangesAsync(); #endregion } using (var context = new BloggingContext()) { #region NoTracking - var blogs = context.Blogs + var blogs = await context.Blogs .AsNoTracking() - .ToList(); + .ToListAsync(); #endregion } using (var context = new BloggingContext()) { #region NoTrackingWithIdentityResolution - var blogs = context.Blogs + var blogs = await context.Blogs .AsNoTrackingWithIdentityResolution() - .ToList(); + .ToListAsync(); #endregion } @@ -53,7 +54,7 @@ private static void Main(string[] args) #region ContextDefaultTrackingBehavior context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; - var blogs = context.Blogs.ToList(); + var blogs = await context.Blogs.ToListAsync(); #endregion } @@ -90,11 +91,11 @@ private static void Main(string[] args) using (var context = new BloggingContext()) { #region ClientProjection - var blogs = context.Blogs + var blogs = await context.Blogs .OrderByDescending(blog => blog.Rating) .Select( blog => new { Id = blog.BlogId, Url = StandardizeUrl(blog) }) - .ToList(); + .ToListAsync(); #endregion } } @@ -112,4 +113,4 @@ public static string StandardizeUrl(Blog blog) return url; } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Querying/UserDefinedFunctionMapping/Model.cs b/samples/core/Querying/UserDefinedFunctionMapping/Model.cs index 245c7d782d..188df7d56a 100644 --- a/samples/core/Querying/UserDefinedFunctionMapping/Model.cs +++ b/samples/core/Querying/UserDefinedFunctionMapping/Model.cs @@ -214,6 +214,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.UserDefinedFunctionMapping;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFQuerying.UserDefinedFunctionMapping;Trusted_Connection=True;ConnectRetryCount=0"); } -} \ No newline at end of file +} diff --git a/samples/core/Querying/UserDefinedFunctionMapping/Program.cs b/samples/core/Querying/UserDefinedFunctionMapping/Program.cs index a8057009fc..00ad3e3d38 100644 --- a/samples/core/Querying/UserDefinedFunctionMapping/Program.cs +++ b/samples/core/Querying/UserDefinedFunctionMapping/Program.cs @@ -1,17 +1,18 @@ using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFQuerying.UserDefinedFunctionMapping; internal class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { using var context = new BloggingContext(); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); - context.Database.ExecuteSqlRaw( + await context.Database.ExecuteSqlRawAsync( @"CREATE FUNCTION dbo.CommentedPostCountForBlog(@id int) RETURNS int AS @@ -24,7 +25,7 @@ FROM [Comments] AS [c] WHERE [p].[PostId] = [c].[PostId]) > 0)); END"); - context.Database.ExecuteSqlRaw( + await context.Database.ExecuteSqlRawAsync( @"CREATE FUNCTION [dbo].[ConcatStrings] (@prm1 nvarchar(max), @prm2 nvarchar(max)) RETURNS nvarchar(max) AS @@ -32,7 +33,7 @@ RETURNS nvarchar(max) RETURN @prm1 + @prm2; END"); - context.Database.ExecuteSqlRaw( + await context.Database.ExecuteSqlRawAsync( @"CREATE FUNCTION dbo.PostsWithPopularComments(@likeThreshold int) RETURNS TABLE AS @@ -51,13 +52,13 @@ FROM [Comments] AS [c] where context.ActivePostCountForBlog(b.BlogId) > 1 select b; #endregion - var result1 = query1.ToList(); + var result1 = await query1.ToListAsync(); #region HasTranslationQuery var query2 = from p in context.Posts select context.PercentageDifference(p.BlogId, 3); #endregion - var result2 = query2.ToList(); + var result2 = await query2.ToListAsync(); #region NullabilityPropagationExamples var query3 = context.Blogs.Where(e => context.ConcatStrings(e.Url, e.Rating.ToString()) != "https://mytravelblog.com/4"); @@ -65,8 +66,8 @@ where context.ActivePostCountForBlog(b.BlogId) > 1 e => context.ConcatStringsOptimized(e.Url, e.Rating.ToString()) != "https://mytravelblog.com/4"); #endregion - var result3 = query3.ToList(); - var result4 = query4.ToList(); + var result3 = await query3.ToListAsync(); + var result4 = await query4.ToListAsync(); #region TableValuedFunctionQuery var likeThreshold = 3; @@ -74,6 +75,6 @@ where context.ActivePostCountForBlog(b.BlogId) > 1 orderby p.Rating select p; #endregion - var result5 = query5.ToList(); + var result5 = await query5.ToListAsync(); } -} \ No newline at end of file +} diff --git a/samples/core/Samples.sln b/samples/core/Samples.sln index 13b6ced270..1b483456a1 100644 --- a/samples/core/Samples.sln +++ b/samples/core/Samples.sln @@ -35,8 +35,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Collations", "Miscellaneous EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Async", "Miscellaneous\Async\Async.csproj", "{1DA2B6AD-F71A-4224-92EB-3D0EE6E68BF4}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AsyncWithSystemInteractive", "Miscellaneous\AsyncWithSystemInteractive\AsyncWithSystemInteractive.csproj", "{70E581C3-38BB-46CC-9063-ADF9F2B76570}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Spatial", "Spatial", "{B3714D90-F595-4644-8018-ADE19D66B853}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SqlServer", "Spatial\SqlServer\SqlServer.csproj", "{849357D0-85B3-4326-9D42-AD5A09E9613C}" @@ -51,8 +49,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClientEvaluation", "Queryin EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tracking", "Querying\Tracking\Tracking.csproj", "{CCD901FE-20C8-4DC0-AD9C-8B8333EE277B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SqlQueries", "Querying\SqlQueries\SqlQueries.csproj", "{63B6747C-470D-4561-A3A2-3C024747BE3B}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComplexQuery", "Querying\ComplexQuery\ComplexQuery.csproj", "{AD0BF60E-B46C-4181-BF43-D68801E5D259}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tags", "Querying\Tags\Tags.csproj", "{2343A153-5832-41B9-A1FF-D80D3107A1DA}" @@ -203,6 +199,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "App", "Miscellaneous\NewInE EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Miscellaneous\NewInEFCore9.CompiledModels\Model\Model.csproj", "{8E9DD759-B6D0-4424-BC6C-97ECE559CE02}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NewInEFCore9.Cosmos", "Miscellaneous\NewInEFCore9.Cosmos\NewInEFCore9.Cosmos.csproj", "{C636065F-C124-4051-90DA-3EA2A0817471}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -265,10 +263,6 @@ Global {1DA2B6AD-F71A-4224-92EB-3D0EE6E68BF4}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DA2B6AD-F71A-4224-92EB-3D0EE6E68BF4}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DA2B6AD-F71A-4224-92EB-3D0EE6E68BF4}.Release|Any CPU.Build.0 = Release|Any CPU - {70E581C3-38BB-46CC-9063-ADF9F2B76570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70E581C3-38BB-46CC-9063-ADF9F2B76570}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70E581C3-38BB-46CC-9063-ADF9F2B76570}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70E581C3-38BB-46CC-9063-ADF9F2B76570}.Release|Any CPU.Build.0 = Release|Any CPU {849357D0-85B3-4326-9D42-AD5A09E9613C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {849357D0-85B3-4326-9D42-AD5A09E9613C}.Debug|Any CPU.Build.0 = Debug|Any CPU {849357D0-85B3-4326-9D42-AD5A09E9613C}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -289,10 +283,6 @@ Global {CCD901FE-20C8-4DC0-AD9C-8B8333EE277B}.Debug|Any CPU.Build.0 = Debug|Any CPU {CCD901FE-20C8-4DC0-AD9C-8B8333EE277B}.Release|Any CPU.ActiveCfg = Release|Any CPU {CCD901FE-20C8-4DC0-AD9C-8B8333EE277B}.Release|Any CPU.Build.0 = Release|Any CPU - {63B6747C-470D-4561-A3A2-3C024747BE3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63B6747C-470D-4561-A3A2-3C024747BE3B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63B6747C-470D-4561-A3A2-3C024747BE3B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63B6747C-470D-4561-A3A2-3C024747BE3B}.Release|Any CPU.Build.0 = Release|Any CPU {AD0BF60E-B46C-4181-BF43-D68801E5D259}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD0BF60E-B46C-4181-BF43-D68801E5D259}.Debug|Any CPU.Build.0 = Debug|Any CPU {AD0BF60E-B46C-4181-BF43-D68801E5D259}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -561,6 +551,10 @@ Global {8E9DD759-B6D0-4424-BC6C-97ECE559CE02}.Debug|Any CPU.Build.0 = Debug|Any CPU {8E9DD759-B6D0-4424-BC6C-97ECE559CE02}.Release|Any CPU.ActiveCfg = Release|Any CPU {8E9DD759-B6D0-4424-BC6C-97ECE559CE02}.Release|Any CPU.Build.0 = Release|Any CPU + {C636065F-C124-4051-90DA-3EA2A0817471}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C636065F-C124-4051-90DA-3EA2A0817471}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C636065F-C124-4051-90DA-3EA2A0817471}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C636065F-C124-4051-90DA-3EA2A0817471}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -575,13 +569,11 @@ Global {FE71504E-C32B-4E2F-9830-21ED448DABC4} = {CA5046EC-C894-4535-8190-A31F75FDEB96} {62C86664-49F4-4C59-A2EC-1D70D85149D9} = {85AFD7F1-6943-40FE-B8EC-AA9DBB42CCA6} {1DA2B6AD-F71A-4224-92EB-3D0EE6E68BF4} = {85AFD7F1-6943-40FE-B8EC-AA9DBB42CCA6} - {70E581C3-38BB-46CC-9063-ADF9F2B76570} = {85AFD7F1-6943-40FE-B8EC-AA9DBB42CCA6} {849357D0-85B3-4326-9D42-AD5A09E9613C} = {B3714D90-F595-4644-8018-ADE19D66B853} {59588FC9-0A4F-4903-84B0-A2CB2EE6F9AC} = {B3714D90-F595-4644-8018-ADE19D66B853} {524AE4A6-A15F-466C-AED3-CDF3209E4394} = {1AD64707-0BE0-48B0-A803-916FF96DCB4F} {AF8B71E6-454F-4B66-98EE-2128B415EC45} = {1AD64707-0BE0-48B0-A803-916FF96DCB4F} {CCD901FE-20C8-4DC0-AD9C-8B8333EE277B} = {1AD64707-0BE0-48B0-A803-916FF96DCB4F} - {63B6747C-470D-4561-A3A2-3C024747BE3B} = {1AD64707-0BE0-48B0-A803-916FF96DCB4F} {AD0BF60E-B46C-4181-BF43-D68801E5D259} = {1AD64707-0BE0-48B0-A803-916FF96DCB4F} {2343A153-5832-41B9-A1FF-D80D3107A1DA} = {1AD64707-0BE0-48B0-A803-916FF96DCB4F} {17A82259-1B8A-4199-A564-AC250F51360E} = {1AD64707-0BE0-48B0-A803-916FF96DCB4F} @@ -650,6 +642,7 @@ Global {26184A10-7CF8-4ED2-9F70-E00A55BE063B} = {85AFD7F1-6943-40FE-B8EC-AA9DBB42CCA6} {22548A1B-0833-49E9-A04E-A7E8690EAE03} = {26184A10-7CF8-4ED2-9F70-E00A55BE063B} {8E9DD759-B6D0-4424-BC6C-97ECE559CE02} = {26184A10-7CF8-4ED2-9F70-E00A55BE063B} + {C636065F-C124-4051-90DA-3EA2A0817471} = {85AFD7F1-6943-40FE-B8EC-AA9DBB42CCA6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {20C98D35-54EF-46A6-8F3B-1855C1AE4F70} diff --git a/samples/core/Saving/Basics/BloggingContext.cs b/samples/core/Saving/Basics/BloggingContext.cs index 535855059c..d2d005449a 100644 --- a/samples/core/Saving/Basics/BloggingContext.cs +++ b/samples/core/Saving/Basics/BloggingContext.cs @@ -10,6 +10,6 @@ public class BloggingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Basics;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Basics;Trusted_Connection=True;ConnectRetryCount=0"); } -} \ No newline at end of file +} diff --git a/samples/core/Saving/Basics/Sample.cs b/samples/core/Saving/Basics/Sample.cs index 6cbbf23793..73855c4fb7 100644 --- a/samples/core/Saving/Basics/Sample.cs +++ b/samples/core/Saving/Basics/Sample.cs @@ -1,15 +1,17 @@ using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; namespace EFSaving.Basics; public class Sample { - public static void Run() + public static async Task Run() { using (var context = new BloggingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region Add @@ -17,25 +19,25 @@ public static void Run() { var blog = new Blog { Url = "http://example.com/" }; context.Blogs.Add(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion #region Update using (var context = new BloggingContext()) { - var blog = context.Blogs.Single(b => b.Url == "http://example.com/"); + var blog = await context.Blogs.SingleAsync(b => b.Url == "http://example.com/"); blog.Url = "http://example.com/blog"; - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion #region Remove using (var context = new BloggingContext()) { - var blog = context.Blogs.Single(b => b.Url == "http://example.com/blog"); + var blog = await context.Blogs.SingleAsync(b => b.Url == "http://example.com/blog"); context.Blogs.Remove(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion @@ -45,7 +47,7 @@ public static void Run() // seeding database context.Blogs.Add(new Blog { Url = "http://example.com/blog" }); context.Blogs.Add(new Blog { Url = "http://example.com/another_blog" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } using (var context = new BloggingContext()) @@ -55,14 +57,14 @@ public static void Run() context.Blogs.Add(new Blog { Url = "http://example.com/blog_two" }); // update - var firstBlog = context.Blogs.First(); + var firstBlog = await context.Blogs.FirstAsync(); firstBlog.Url = ""; // remove - var lastBlog = context.Blogs.OrderBy(e => e.BlogId).Last(); + var lastBlog = await context.Blogs.OrderBy(e => e.BlogId).LastAsync(); context.Blogs.Remove(lastBlog); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion } diff --git a/samples/core/Saving/CascadeDelete/BloggingContext.cs b/samples/core/Saving/CascadeDelete/BloggingContext.cs index 94256d62dc..b39ebca561 100644 --- a/samples/core/Saving/CascadeDelete/BloggingContext.cs +++ b/samples/core/Saving/CascadeDelete/BloggingContext.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -32,7 +34,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) .ReplaceService() .EnableSensitiveDataLogging() .UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.CascadeDelete;Trusted_Connection=True", + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.CascadeDelete;Trusted_Connection=True;ConnectRetryCount=0", b => b.MaxBatchSize(1)); protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -43,11 +45,11 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .OnDelete(DeleteBehavior) .IsRequired(RequiredRelationship); - public override int SaveChanges() + public override async Task SaveChangesAsync(CancellationToken cancellationToken = default) { LogMessages.Clear(); - return base.SaveChanges(); + return await base.SaveChangesAsync(cancellationToken); } public class DeleteBehaviorCacheKeyFactory : IModelCacheKeyFactory @@ -110,4 +112,4 @@ public void Log( public IDisposable BeginScope(TState state) => null; } } -} \ No newline at end of file +} diff --git a/samples/core/Saving/CascadeDelete/Sample.cs b/samples/core/Saving/CascadeDelete/Sample.cs index ab3148f520..0daf63cdfb 100644 --- a/samples/core/Saving/CascadeDelete/Sample.cs +++ b/samples/core/Saving/CascadeDelete/Sample.cs @@ -1,46 +1,47 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFSaving.CascadeDelete; public class Sample { - public static void Run() + public static async Task Run() { - DeleteBehaviorSample(DeleteBehavior.Cascade, true); - DeleteBehaviorSample(DeleteBehavior.ClientSetNull, true); - DeleteBehaviorSample(DeleteBehavior.SetNull, true); - DeleteBehaviorSample(DeleteBehavior.Restrict, true); - - DeleteBehaviorSample(DeleteBehavior.Cascade, false); - DeleteBehaviorSample(DeleteBehavior.ClientSetNull, false); - DeleteBehaviorSample(DeleteBehavior.SetNull, false); - DeleteBehaviorSample(DeleteBehavior.Restrict, false); - - DeleteOrphansSample(DeleteBehavior.Cascade, true); - DeleteOrphansSample(DeleteBehavior.ClientSetNull, true); - DeleteOrphansSample(DeleteBehavior.SetNull, true); - DeleteOrphansSample(DeleteBehavior.Restrict, true); - - DeleteOrphansSample(DeleteBehavior.Cascade, false); - DeleteOrphansSample(DeleteBehavior.ClientSetNull, false); - DeleteOrphansSample(DeleteBehavior.SetNull, false); - DeleteOrphansSample(DeleteBehavior.Restrict, false); + await DeleteBehaviorSample(DeleteBehavior.Cascade, true); + await DeleteBehaviorSample(DeleteBehavior.ClientSetNull, true); + await DeleteBehaviorSample(DeleteBehavior.SetNull, true); + await DeleteBehaviorSample(DeleteBehavior.Restrict, true); + + await DeleteBehaviorSample(DeleteBehavior.Cascade, false); + await DeleteBehaviorSample(DeleteBehavior.ClientSetNull, false); + await DeleteBehaviorSample(DeleteBehavior.SetNull, false); + await DeleteBehaviorSample(DeleteBehavior.Restrict, false); + + await DeleteOrphansSample(DeleteBehavior.Cascade, true); + await DeleteOrphansSample(DeleteBehavior.ClientSetNull, true); + await DeleteOrphansSample(DeleteBehavior.SetNull, true); + await DeleteOrphansSample(DeleteBehavior.Restrict, true); + + await DeleteOrphansSample(DeleteBehavior.Cascade, false); + await DeleteOrphansSample(DeleteBehavior.ClientSetNull, false); + await DeleteOrphansSample(DeleteBehavior.SetNull, false); + await DeleteOrphansSample(DeleteBehavior.Restrict, false); } - private static void DeleteBehaviorSample(DeleteBehavior deleteBehavior, bool requiredRelationship) + private static async Task DeleteBehaviorSample(DeleteBehavior deleteBehavior, bool requiredRelationship) { Console.WriteLine( $"Test using DeleteBehavior.{deleteBehavior} with {(requiredRelationship ? "required" : "optional")} relationship:"); - InitializeDatabase(requiredRelationship); + await InitializeDatabase(requiredRelationship); using var context = new BloggingContext(deleteBehavior, requiredRelationship); #region DeleteBehaviorVariations - var blog = context.Blogs.Include(b => b.Posts).First(); + var blog = await context.Blogs.Include(b => b.Posts).FirstAsync(); var posts = blog.Posts.ToList(); DumpEntities(" After loading entities:", context, blog, posts); @@ -54,7 +55,7 @@ private static void DeleteBehaviorSample(DeleteBehavior deleteBehavior, bool req Console.WriteLine(); Console.WriteLine(" Saving changes:"); - context.SaveChanges(); + await context.SaveChangesAsync(); DumpSql(); @@ -73,17 +74,17 @@ private static void DeleteBehaviorSample(DeleteBehavior deleteBehavior, bool req Console.WriteLine(); } - private static void DeleteOrphansSample(DeleteBehavior deleteBehavior, bool requiredRelationship) + private static async Task DeleteOrphansSample(DeleteBehavior deleteBehavior, bool requiredRelationship) { Console.WriteLine( $"Test deleting orphans with DeleteBehavior.{deleteBehavior} and {(requiredRelationship ? "a required" : "an optional")} relationship:"); - InitializeDatabase(requiredRelationship); + await InitializeDatabase(requiredRelationship); using var context = new BloggingContext(deleteBehavior, requiredRelationship); #region DeleteOrphansVariations - var blog = context.Blogs.Include(b => b.Posts).First(); + var blog = await context.Blogs.Include(b => b.Posts).FirstAsync(); var posts = blog.Posts.ToList(); DumpEntities(" After loading entities:", context, blog, posts); @@ -97,7 +98,7 @@ private static void DeleteOrphansSample(DeleteBehavior deleteBehavior, bool requ Console.WriteLine(); Console.WriteLine(" Saving changes:"); - context.SaveChanges(); + await context.SaveChangesAsync(); DumpSql(); @@ -116,11 +117,11 @@ private static void DeleteOrphansSample(DeleteBehavior deleteBehavior, bool requ Console.WriteLine(); } - private static void InitializeDatabase(bool requiredRelationship) + private static async Task InitializeDatabase(bool requiredRelationship) { using var context = new BloggingContext(DeleteBehavior.ClientSetNull, requiredRelationship); - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); context.Blogs.Add( new Blog @@ -129,7 +130,7 @@ private static void InitializeDatabase(bool requiredRelationship) Posts = new List { new Post { Title = "Saving Data with EF" }, new Post { Title = "Cascade Delete with EF" } } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } private static void DumpEntities(string message, BloggingContext context, Blog blog, IList posts) @@ -158,4 +159,4 @@ private static void DumpSql() Console.WriteLine(" " + logMessage); } } -} \ No newline at end of file +} diff --git a/samples/core/Saving/Concurrency/BasicSample.cs b/samples/core/Saving/Concurrency/BasicSample.cs index 12574e3d08..76f3b6037e 100644 --- a/samples/core/Saving/Concurrency/BasicSample.cs +++ b/samples/core/Saving/Concurrency/BasicSample.cs @@ -1,62 +1,63 @@ using System; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFSaving.Concurrency; public class BasicSample { - public static void Run() + public static async Task Run() { // Ensure database is created and has a person in it using (var setupContext = new PersonContext()) { - setupContext.Database.EnsureDeleted(); - setupContext.Database.EnsureCreated(); + await setupContext.Database.EnsureDeletedAsync(); + await setupContext.Database.EnsureCreatedAsync(); setupContext.People.Add(new Person { FirstName = "John", LastName = "Doe" }); setupContext.People.Add(new Person { FirstName = "Marie", LastName = "Jane" }); - setupContext.SaveChanges(); + await setupContext.SaveChangesAsync(); } - SuccessfulUpdate(); - ConcurrencyFailure(); + await SuccessfulUpdate(); + await ConcurrencyFailure(); } // This shows a successful update, where no concurrent change happens - private static void SuccessfulUpdate() + private static async Task SuccessfulUpdate() { using var context = new PersonContext(); - var person = context.People.Single(b => b.FirstName == "John"); + var person = await context.People.SingleAsync(b => b.FirstName == "John"); person.FirstName = "Paul"; - context.SaveChanges(); + await context.SaveChangesAsync(); Console.WriteLine("The change completed successfully."); } // This simulates a concurrency failure by modifying the row via another context after it was loaded. - private static void ConcurrencyFailure() + private static async Task ConcurrencyFailure() { using var context1 = new PersonContext(); - var person = context1.People.Single(b => b.FirstName == "Marie"); + var person = await context1.People.SingleAsync(b => b.FirstName == "Marie"); person.FirstName = "Stephanie"; // We loaded the Blog instance - along with its concurrency token - and made a change on it. // Let's simulate a concurrent change by updating the row from another context using (var context2 = new PersonContext()) { - var person2 = context2.People.Single(b => b.FirstName == "Marie"); + var person2 = await context2.People.SingleAsync(b => b.FirstName == "Marie"); person2.FirstName = "Rachel"; - context2.SaveChanges(); + await context2.SaveChangesAsync(); } // The tracked person in EF's change tracker has an out of date concurrency token, so calling SaveChanges will now throw // a DbUpdateConcurrencyException Console.WriteLine("SaveChanges should now throw:"); - context1.SaveChanges(); + await context1.SaveChangesAsync(); } public class PersonContext : DbContext @@ -67,7 +68,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // Requires NuGet package Microsoft.EntityFrameworkCore.SqlServer optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Concurrency;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Concurrency;Trusted_Connection=True;ConnectRetryCount=0"); } } diff --git a/samples/core/Saving/Concurrency/ConflictResolutionSample.cs b/samples/core/Saving/Concurrency/ConflictResolutionSample.cs index b78870e2e9..1b87155cca 100644 --- a/samples/core/Saving/Concurrency/ConflictResolutionSample.cs +++ b/samples/core/Saving/Concurrency/ConflictResolutionSample.cs @@ -1,32 +1,33 @@ using System; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFSaving.Concurrency; public class ConflictResolutionSample { - public static void Run() + public static async Task Run() { // Ensure database is created and has a person in it using (var setupContext = new PersonContext()) { - setupContext.Database.EnsureDeleted(); - setupContext.Database.EnsureCreated(); + await setupContext.Database.EnsureDeletedAsync(); + await setupContext.Database.EnsureCreatedAsync(); setupContext.People.Add(new Person { FirstName = "John", LastName = "Doe" }); - setupContext.SaveChanges(); + await setupContext.SaveChangesAsync(); } #region ConcurrencyHandlingCode using var context = new PersonContext(); // Fetch a person from database and change phone number - var person = context.People.Single(p => p.PersonId == 1); + var person = await context.People.SingleAsync(p => p.PersonId == 1); person.PhoneNumber = "555-555-5555"; // Change the person's name in the database to simulate a concurrency conflict - context.Database.ExecuteSqlRaw( + await context.Database.ExecuteSqlRawAsync( "UPDATE dbo.People SET FirstName = 'Jane' WHERE PersonId = 1"); var saved = false; @@ -35,7 +36,7 @@ public static void Run() try { // Attempt to save changes to the database - context.SaveChanges(); + await context.SaveChangesAsync(); saved = true; } catch (DbUpdateConcurrencyException ex) @@ -45,7 +46,7 @@ public static void Run() if (entry.Entity is Person) { var proposedValues = entry.CurrentValues; - var databaseValues = entry.GetDatabaseValues(); + var databaseValues = await entry.GetDatabaseValuesAsync(); foreach (var property in proposedValues.Properties) { @@ -79,7 +80,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // Requires NuGet package Microsoft.EntityFrameworkCore.SqlServer optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Concurrency;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Concurrency;Trusted_Connection=True;ConnectRetryCount=0"); } } diff --git a/samples/core/Saving/Disconnected/BloggingContext.cs b/samples/core/Saving/Disconnected/BloggingContext.cs index d61f01d111..41f30b9b59 100644 --- a/samples/core/Saving/Disconnected/BloggingContext.cs +++ b/samples/core/Saving/Disconnected/BloggingContext.cs @@ -10,6 +10,6 @@ public class BloggingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Disconnected;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Disconnected;Trusted_Connection=True;ConnectRetryCount=0"); } -} \ No newline at end of file +} diff --git a/samples/core/Saving/Disconnected/Sample.cs b/samples/core/Saving/Disconnected/Sample.cs index d89235ab7c..9da1d50fa8 100644 --- a/samples/core/Saving/Disconnected/Sample.cs +++ b/samples/core/Saving/Disconnected/Sample.cs @@ -1,32 +1,33 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFSaving.Disconnected; public class Sample { - public static void Run() + public static async Task Run() { using (var context = new BloggingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } - IsItNew(); - InsertAndUpdateSingleEntity(); - InsertOrUpdateSingleEntityStoreGenerated(); - InsertOrUpdateSingleEntityFind(); - InsertAndUpdateGraph(); - InsertOrUpdateGraphStoreGenerated(); - InsertOrUpdateGraphFind(); - InsertUpdateOrDeleteGraphFind(); - InsertUpdateOrDeleteTrackGraph(); + await IsItNew(); + await InsertAndUpdateSingleEntity(); + await InsertOrUpdateSingleEntityStoreGenerated(); + await InsertOrUpdateSingleEntityFind(); + await InsertAndUpdateGraph(); + await InsertOrUpdateGraphStoreGenerated(); + await InsertOrUpdateGraphFind(); + await InsertUpdateOrDeleteGraphFind(); + await InsertUpdateOrDeleteTrackGraph(); } - private static void IsItNew() + private static async Task IsItNew() { Console.WriteLine(); Console.WriteLine("Show entity-specific check for key set:"); @@ -38,7 +39,7 @@ private static void IsItNew() Console.WriteLine($" Blog entity is {(IsItNew(blog) ? "new" : "existing")}."); context.Add(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); // Key is now set Console.WriteLine($" Blog entity is {(IsItNew(blog) ? "new" : "existing")}."); @@ -54,7 +55,7 @@ private static void IsItNew() Console.WriteLine($" Blog entity is {(IsItNew(context, (object)blog) ? "new" : "existing")}."); context.Add(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); // Key is now set Console.WriteLine($" Blog entity is {(IsItNew(context, (object)blog) ? "new" : "existing")}."); @@ -81,16 +82,16 @@ private static void IsItNew() { var blog = new Blog { Url = "http://sample.com/" }; - Console.WriteLine($" Blog entity is {(IsItNew(context, blog) ? "new" : "existing")}."); + Console.WriteLine($" Blog entity is {(await IsItNew(context, blog) ? "new" : "existing")}."); context.Add(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); - Console.WriteLine($" Blog entity is {(IsItNew(context, blog) ? "new" : "existing")}."); + Console.WriteLine($" Blog entity is {(await IsItNew(context, blog) ? "new" : "existing")}."); } } - private static void InsertAndUpdateSingleEntity() + private static async Task InsertAndUpdateSingleEntity() { Console.WriteLine(); Console.WriteLine("Save single entity with explicit insert or update:"); @@ -99,28 +100,28 @@ private static void InsertAndUpdateSingleEntity() using (var context = new BloggingContext()) { Console.WriteLine($" Inserting with URL {blog.Url}"); - Insert(context, blog); + await Insert(context, blog); } using (var context = new BloggingContext()) { - Console.WriteLine($" Found with URL {context.Blogs.Single(b => b.BlogId == blog.BlogId).Url}"); + Console.WriteLine($" Found with URL {(await context.Blogs.SingleAsync(b => b.BlogId == blog.BlogId)).Url}"); } using (var context = new BloggingContext()) { blog.Url = "https://sample.com/"; Console.WriteLine($" Updating with URL {blog.Url}"); - Update(context, blog); + await Update(context, blog); } using (var context = new BloggingContext()) { - Console.WriteLine($" Found with URL {(context.Blogs.Single(b => b.BlogId == blog.BlogId)).Url}"); + Console.WriteLine($" Found with URL {((await context.Blogs.SingleAsync(b => b.BlogId == blog.BlogId))).Url}"); } } - private static void InsertOrUpdateSingleEntityStoreGenerated() + private static async Task InsertOrUpdateSingleEntityStoreGenerated() { Console.WriteLine(); Console.WriteLine("Save single entity with auto-generated key:"); @@ -129,28 +130,28 @@ private static void InsertOrUpdateSingleEntityStoreGenerated() using (var context = new BloggingContext()) { Console.WriteLine($" Inserting with URL {blog.Url}"); - InsertOrUpdate(context, (object)blog); + await InsertOrUpdate(context, (object)blog); } using (var context = new BloggingContext()) { - Console.WriteLine($" Found with URL {context.Blogs.Single(b => b.BlogId == blog.BlogId).Url}"); + Console.WriteLine($" Found with URL {(await context.Blogs.SingleAsync(b => b.BlogId == blog.BlogId)).Url}"); } using (var context = new BloggingContext()) { blog.Url = "https://sample.com/"; Console.WriteLine($" Updating with URL {blog.Url}"); - InsertOrUpdate(context, (object)blog); + await InsertOrUpdate(context, (object)blog); } using (var context = new BloggingContext()) { - Console.WriteLine($" Found with URL {(context.Blogs.Single(b => b.BlogId == blog.BlogId)).Url}"); + Console.WriteLine($" Found with URL {((await context.Blogs.SingleAsync(b => b.BlogId == blog.BlogId))).Url}"); } } - private static void InsertOrUpdateSingleEntityFind() + private static async Task InsertOrUpdateSingleEntityFind() { Console.WriteLine(); Console.WriteLine("Save single entity with any kind of key:"); @@ -159,28 +160,28 @@ private static void InsertOrUpdateSingleEntityFind() using (var context = new BloggingContext()) { Console.WriteLine($" Inserting with URL {blog.Url}"); - InsertOrUpdate(context, blog); + await InsertOrUpdate(context, blog); } using (var context = new BloggingContext()) { - Console.WriteLine($" Found with URL {context.Blogs.Single(b => b.BlogId == blog.BlogId).Url}"); + Console.WriteLine($" Found with URL {(await context.Blogs.SingleAsync(b => b.BlogId == blog.BlogId)).Url}"); } using (var context = new BloggingContext()) { blog.Url = "https://sample.com/"; Console.WriteLine($" Updating with URL {blog.Url}"); - InsertOrUpdate(context, blog); + await InsertOrUpdate(context, blog); } using (var context = new BloggingContext()) { - Console.WriteLine($" Found with URL {context.Blogs.Single(b => b.BlogId == blog.BlogId).Url}"); + Console.WriteLine($" Found with URL {(await context.Blogs.SingleAsync(b => b.BlogId == blog.BlogId)).Url}"); } } - private static void InsertAndUpdateGraph() + private static async Task InsertAndUpdateGraph() { Console.WriteLine(); Console.WriteLine("Save graph with explicit insert or update:"); @@ -189,12 +190,12 @@ private static void InsertAndUpdateGraph() using (var context = new BloggingContext()) { Console.WriteLine($" Inserting with URL {blog.Url} and {blog.Posts[0].Title}, {blog.Posts[1].Title}"); - InsertGraph(context, blog); + await InsertGraph(context, blog); } using (var context = new BloggingContext()) { - var read = context.Blogs.Include(b => b.Posts).Single(b => b.BlogId == blog.BlogId); + var read = await context.Blogs.Include(b => b.Posts).SingleAsync(b => b.BlogId == blog.BlogId); Console.WriteLine($" Found with URL {read.Url} and {read.Posts[0].Title}, {read.Posts[1].Title}"); } @@ -205,17 +206,17 @@ private static void InsertAndUpdateGraph() blog.Posts[1].Title = "Post B"; Console.WriteLine($" Updating with URL {blog.Url}"); - UpdateGraph(context, blog); + await UpdateGraph(context, blog); } using (var context = new BloggingContext()) { - var read = context.Blogs.Include(b => b.Posts).Single(b => b.BlogId == blog.BlogId); + var read = await context.Blogs.Include(b => b.Posts).SingleAsync(b => b.BlogId == blog.BlogId); Console.WriteLine($" Found with URL {read.Url} and {read.Posts[0].Title}, {read.Posts[1].Title}"); } } - private static void InsertOrUpdateGraphStoreGenerated() + private static async Task InsertOrUpdateGraphStoreGenerated() { Console.WriteLine(); Console.WriteLine("Save graph with auto-generated key:"); @@ -224,12 +225,12 @@ private static void InsertOrUpdateGraphStoreGenerated() using (var context = new BloggingContext()) { Console.WriteLine($" Inserting with URL {blog.Url} and {blog.Posts[0].Title}, {blog.Posts[1].Title}"); - InsertOrUpdateGraph(context, (object)blog); + await InsertOrUpdateGraph(context, (object)blog); } using (var context = new BloggingContext()) { - var read = context.Blogs.Include(b => b.Posts).Single(b => b.BlogId == blog.BlogId); + var read = await context.Blogs.Include(b => b.Posts).SingleAsync(b => b.BlogId == blog.BlogId); Console.WriteLine($" Found with URL {read.Url} and {read.Posts[0].Title}, {read.Posts[1].Title}"); } @@ -241,17 +242,17 @@ private static void InsertOrUpdateGraphStoreGenerated() blog.Posts.Add(new Post { Title = "New Post" }); Console.WriteLine($" Updating with URL {blog.Url}"); - InsertOrUpdateGraph(context, (object)blog); + await InsertOrUpdateGraph(context, (object)blog); } using (var context = new BloggingContext()) { - var read = context.Blogs.Include(b => b.Posts).Single(b => b.BlogId == blog.BlogId); + var read = await context.Blogs.Include(b => b.Posts).SingleAsync(b => b.BlogId == blog.BlogId); Console.WriteLine($" Found with URL {read.Url} and {read.Posts[0].Title}, {read.Posts[1].Title}, {read.Posts[2].Title}"); } } - private static void InsertOrUpdateGraphFind() + private static async Task InsertOrUpdateGraphFind() { Console.WriteLine(); Console.WriteLine("Save graph with any kind of key:"); @@ -260,12 +261,12 @@ private static void InsertOrUpdateGraphFind() using (var context = new BloggingContext()) { Console.WriteLine($" Inserting with URL {blog.Url} and {blog.Posts[0].Title}, {blog.Posts[1].Title}"); - InsertOrUpdateGraph(context, blog); + await InsertOrUpdateGraph(context, blog); } using (var context = new BloggingContext()) { - var read = context.Blogs.Include(b => b.Posts).Single(b => b.BlogId == blog.BlogId); + var read = await context.Blogs.Include(b => b.Posts).SingleAsync(b => b.BlogId == blog.BlogId); Console.WriteLine($" Found with URL {read.Url} and {read.Posts[0].Title}, {read.Posts[1].Title}"); } @@ -277,17 +278,17 @@ private static void InsertOrUpdateGraphFind() blog.Posts.Add(new Post { Title = "New Post" }); Console.WriteLine($" Updating with URL {blog.Url}"); - InsertOrUpdateGraph(context, blog); + await InsertOrUpdateGraph(context, blog); } using (var context = new BloggingContext()) { - var read = context.Blogs.Include(b => b.Posts).Single(b => b.BlogId == blog.BlogId); + var read = await context.Blogs.Include(b => b.Posts).SingleAsync(b => b.BlogId == blog.BlogId); Console.WriteLine($" Found with URL {read.Url} and {read.Posts[0].Title}, {read.Posts[1].Title}, {read.Posts[2].Title}"); } } - private static void InsertUpdateOrDeleteGraphFind() + private static async Task InsertUpdateOrDeleteGraphFind() { Console.WriteLine(); Console.WriteLine("Save graph with deletes and any kind of key:"); @@ -296,12 +297,12 @@ private static void InsertUpdateOrDeleteGraphFind() using (var context = new BloggingContext()) { Console.WriteLine($" Inserting with URL {blog.Url} and {blog.Posts[0].Title}, {blog.Posts[1].Title}"); - InsertUpdateOrDeleteGraph(context, blog); + await InsertUpdateOrDeleteGraph(context, blog); } using (var context = new BloggingContext()) { - var read = context.Blogs.Include(b => b.Posts).Single(b => b.BlogId == blog.BlogId); + var read = await context.Blogs.Include(b => b.Posts).SingleAsync(b => b.BlogId == blog.BlogId); Console.WriteLine($" Found with URL {read.Url} and {read.Posts[0].Title}, {read.Posts[1].Title}"); } @@ -313,17 +314,17 @@ private static void InsertUpdateOrDeleteGraphFind() blog.Posts.Add(new Post { Title = "New Post" }); Console.WriteLine($" Updating with URL {blog.Url}"); - InsertUpdateOrDeleteGraph(context, blog); + await InsertUpdateOrDeleteGraph(context, blog); } using (var context = new BloggingContext()) { - var read = context.Blogs.Include(b => b.Posts).Single(b => b.BlogId == blog.BlogId); + var read = await context.Blogs.Include(b => b.Posts).SingleAsync(b => b.BlogId == blog.BlogId); Console.WriteLine($" Found with URL {read.Url} and {read.Posts[0].Title}, {read.Posts[1].Title}"); } } - private static void InsertUpdateOrDeleteTrackGraph() + private static async Task InsertUpdateOrDeleteTrackGraph() { Console.WriteLine(); Console.WriteLine("Save graph using TrackGraph:"); @@ -335,12 +336,12 @@ private static void InsertUpdateOrDeleteTrackGraph() using (var context = new BloggingContext()) { Console.WriteLine($" Inserting with URL {blog.Url} and {blog.Posts[0].Title}, {blog.Posts[1].Title}"); - SaveAnnotatedGraph(context, blog); + await SaveAnnotatedGraph(context, blog); } using (var context = new BloggingContext()) { - var read = context.Blogs.Include(b => b.Posts).Single(b => b.BlogId == blog.BlogId); + var read = await context.Blogs.Include(b => b.Posts).SingleAsync(b => b.BlogId == blog.BlogId); Console.WriteLine($" Found with URL {read.Url} and {read.Posts[0].Title}, {read.Posts[1].Title}"); } @@ -358,12 +359,12 @@ private static void InsertUpdateOrDeleteTrackGraph() blog.Posts.Add(new Post { Title = "New Post", IsNew = true }); Console.WriteLine($" Updating with URL {blog.Url}"); - SaveAnnotatedGraph(context, blog); + await SaveAnnotatedGraph(context, blog); } using (var context = new BloggingContext()) { - var read = context.Blogs.Include(b => b.Posts).Single(b => b.BlogId == blog.BlogId); + var read = await context.Blogs.Include(b => b.Posts).SingleAsync(b => b.BlogId == blog.BlogId); Console.WriteLine($" Found with URL {read.Url} and {read.Posts[0].Title}, {read.Posts[1].Title}"); } } @@ -379,36 +380,36 @@ public static bool IsItNew(DbContext context, object entity) #endregion #region IsItNewQuery - public static bool IsItNew(BloggingContext context, Blog blog) - => context.Blogs.Find(blog.BlogId) == null; + public static async Task IsItNew(BloggingContext context, Blog blog) + => (await context.Blogs.FindAsync(blog.BlogId)) == null; #endregion #region InsertAndUpdateSingleEntity - public static void Insert(DbContext context, object entity) + public static async Task Insert(DbContext context, object entity) { context.Add(entity); - context.SaveChanges(); + await context.SaveChangesAsync(); } - public static void Update(DbContext context, object entity) + public static async Task Update(DbContext context, object entity) { context.Update(entity); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion #region InsertOrUpdateSingleEntity - public static void InsertOrUpdate(DbContext context, object entity) + public static async Task InsertOrUpdate(DbContext context, object entity) { context.Update(entity); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion #region InsertOrUpdateSingleEntityWithFind - public static void InsertOrUpdate(BloggingContext context, Blog blog) + public static async Task InsertOrUpdate(BloggingContext context, Blog blog) { - var existingBlog = context.Blogs.Find(blog.BlogId); + var existingBlog = await context.Blogs.FindAsync(blog.BlogId); if (existingBlog == null) { context.Add(blog); @@ -418,7 +419,7 @@ public static void InsertOrUpdate(BloggingContext context, Blog blog) context.Entry(existingBlog).CurrentValues.SetValues(blog); } - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion @@ -435,35 +436,35 @@ private static Blog CreateBlogAndPosts() } #region InsertGraph - public static void InsertGraph(DbContext context, object rootEntity) + public static async Task InsertGraph(DbContext context, object rootEntity) { context.Add(rootEntity); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion #region UpdateGraph - public static void UpdateGraph(DbContext context, object rootEntity) + public static async Task UpdateGraph(DbContext context, object rootEntity) { context.Update(rootEntity); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion #region InsertOrUpdateGraph - public static void InsertOrUpdateGraph(DbContext context, object rootEntity) + public static async Task InsertOrUpdateGraph(DbContext context, object rootEntity) { context.Update(rootEntity); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion #region InsertOrUpdateGraphWithFind - public static void InsertOrUpdateGraph(BloggingContext context, Blog blog) + public static async Task InsertOrUpdateGraph(BloggingContext context, Blog blog) { - var existingBlog = context.Blogs + var existingBlog = await context.Blogs .Include(b => b.Posts) - .FirstOrDefault(b => b.BlogId == blog.BlogId); + .FirstOrDefaultAsync(b => b.BlogId == blog.BlogId); if (existingBlog == null) { @@ -488,16 +489,16 @@ public static void InsertOrUpdateGraph(BloggingContext context, Blog blog) } } - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion #region InsertUpdateOrDeleteGraphWithFind - public static void InsertUpdateOrDeleteGraph(BloggingContext context, Blog blog) + public static async Task InsertUpdateOrDeleteGraph(BloggingContext context, Blog blog) { - var existingBlog = context.Blogs + var existingBlog = await context.Blogs .Include(b => b.Posts) - .FirstOrDefault(b => b.BlogId == blog.BlogId); + .FirstOrDefaultAsync(b => b.BlogId == blog.BlogId); if (existingBlog == null) { @@ -530,12 +531,12 @@ public static void InsertUpdateOrDeleteGraph(BloggingContext context, Blog blog) } } - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion #region TrackGraph - public static void SaveAnnotatedGraph(DbContext context, object rootEntity) + public static async Task SaveAnnotatedGraph(DbContext context, object rootEntity) { context.ChangeTracker.TrackGraph( rootEntity, @@ -551,7 +552,7 @@ public static void SaveAnnotatedGraph(DbContext context, object rootEntity) : EntityState.Unchanged; }); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Saving/Program.cs b/samples/core/Saving/Program.cs index 146b91759c..861e1463ee 100644 --- a/samples/core/Saving/Program.cs +++ b/samples/core/Saving/Program.cs @@ -1,21 +1,22 @@ -using EFSaving.Basics; +using System.Threading.Tasks; +using EFSaving.Basics; using EFSaving.Transactions; namespace EFSaving; internal class Program { - private static void Main(string[] args) + private static async Task Main(string[] args) { - Sample.Run(); - RelatedData.Sample.Run(); - CascadeDelete.Sample.Run(); - Concurrency.BasicSample.Run(); - Concurrency.ConflictResolutionSample.Run(); - ControllingTransaction.Run(); - ManagingSavepoints.Run(); - SharingTransaction.Run(); - ExternalDbTransaction.Run(); - Disconnected.Sample.Run(); + await Sample.Run(); + await RelatedData.Sample.Run(); + await CascadeDelete.Sample.Run(); + await Concurrency.BasicSample.Run(); + await Concurrency.ConflictResolutionSample.Run(); + await ControllingTransaction.Run(); + await ManagingSavepoints.Run(); + await SharingTransaction.Run(); + await ExternalDbTransaction.Run(); + await Disconnected.Sample.Run(); } } diff --git a/samples/core/Saving/RelatedData/Sample.cs b/samples/core/Saving/RelatedData/Sample.cs index 820f74e82d..83d03cda51 100644 --- a/samples/core/Saving/RelatedData/Sample.cs +++ b/samples/core/Saving/RelatedData/Sample.cs @@ -1,17 +1,18 @@ using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFSaving.RelatedData; public class Sample { - public static void Run() + public static async Task Run() { using (var context = new BloggingContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region AddingGraphOfEntities @@ -29,18 +30,18 @@ public static void Run() }; context.Blogs.Add(blog); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion #region AddingRelatedEntity using (var context = new BloggingContext()) { - var blog = context.Blogs.Include(b => b.Posts).First(); + var blog = await context.Blogs.Include(b => b.Posts).FirstAsync(); var post = new Post { Title = "Intro to EF Core" }; blog.Posts.Add(post); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion @@ -48,21 +49,21 @@ public static void Run() using (var context = new BloggingContext()) { var blog = new Blog { Url = "http://blogs.msdn.com/visualstudio" }; - var post = context.Posts.First(); + var post = await context.Posts.FirstAsync(); post.Blog = blog; - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion #region RemovingRelationships using (var context = new BloggingContext()) { - var blog = context.Blogs.Include(b => b.Posts).First(); + var blog = await context.Blogs.Include(b => b.Posts).FirstAsync(); var post = blog.Posts.First(); blog.Posts.Remove(post); - context.SaveChanges(); + await context.SaveChangesAsync(); } #endregion } @@ -75,7 +76,7 @@ public class BloggingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.RelatedData;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.RelatedData;Trusted_Connection=True;ConnectRetryCount=0"); } } @@ -96,4 +97,4 @@ public class Post public int BlogId { get; set; } public Blog Blog { get; set; } } -} \ No newline at end of file +} diff --git a/samples/core/Saving/Transactions/AmbientTransaction.cs b/samples/core/Saving/Transactions/AmbientTransaction.cs index 4ff410c99a..55e9b29c88 100644 --- a/samples/core/Saving/Transactions/AmbientTransaction.cs +++ b/samples/core/Saving/Transactions/AmbientTransaction.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using System.Transactions; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; @@ -7,18 +8,18 @@ namespace EFSaving.Transactions; public class AmbientTransaction { - public static void Run() + public static async Task Run() { var connectionString = - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True"; + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True;ConnectRetryCount=0"; using (var context = new BloggingContext( new DbContextOptionsBuilder() .UseSqlServer(connectionString) .Options)) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region Transaction @@ -27,14 +28,14 @@ public static void Run() new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) { using var connection = new SqlConnection(connectionString); - connection.Open(); + await connection.OpenAsync(); try { // Run raw ADO.NET command in the transaction var command = connection.CreateCommand(); command.CommandText = "DELETE FROM dbo.Blogs"; - command.ExecuteNonQuery(); + await command.ExecuteNonQueryAsync(); // Run an EF Core command in the transaction var options = new DbContextOptionsBuilder() @@ -44,7 +45,7 @@ public static void Run() using (var context = new BloggingContext(options)) { context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } // Commit transaction if all commands succeed, transaction will auto-rollback @@ -74,4 +75,4 @@ public class Blog public int BlogId { get; set; } public string Url { get; set; } } -} \ No newline at end of file +} diff --git a/samples/core/Saving/Transactions/CommitableTransaction.cs b/samples/core/Saving/Transactions/CommitableTransaction.cs index 9cd2e39ef1..dd834bd477 100644 --- a/samples/core/Saving/Transactions/CommitableTransaction.cs +++ b/samples/core/Saving/Transactions/CommitableTransaction.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using System.Transactions; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; @@ -7,18 +8,18 @@ namespace EFSaving.Transactions; public class CommitableTransaction { - public static void Run() + public static async Task Run() { var connectionString = - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True"; + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True;ConnectRetryCount=0"; using (var context = new BloggingContext( new DbContextOptionsBuilder() .UseSqlServer(connectionString) .Options)) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region Transaction @@ -35,18 +36,18 @@ public static void Run() using (var context = new BloggingContext(options)) { - context.Database.OpenConnection(); + await context.Database.OpenConnectionAsync(); context.Database.EnlistTransaction(transaction); // Run raw ADO.NET command in the transaction var command = connection.CreateCommand(); command.CommandText = "DELETE FROM dbo.Blogs"; - command.ExecuteNonQuery(); + await command.ExecuteNonQueryAsync(); // Run an EF Core command in the transaction context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); - context.SaveChanges(); - context.Database.CloseConnection(); + await context.SaveChangesAsync(); + await context.Database.CloseConnectionAsync(); } // Commit transaction if all commands succeed, transaction will auto-rollback @@ -76,4 +77,4 @@ public class Blog public int BlogId { get; set; } public string Url { get; set; } } -} \ No newline at end of file +} diff --git a/samples/core/Saving/Transactions/ControllingTransaction.cs b/samples/core/Saving/Transactions/ControllingTransaction.cs index 267fb9bd11..2e043bd9ac 100644 --- a/samples/core/Saving/Transactions/ControllingTransaction.cs +++ b/samples/core/Saving/Transactions/ControllingTransaction.cs @@ -1,38 +1,39 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFSaving.Transactions; public class ControllingTransaction { - public static void Run() + public static async Task Run() { using (var setupContext = new BloggingContext()) { - setupContext.Database.EnsureDeleted(); - setupContext.Database.EnsureCreated(); + await setupContext.Database.EnsureDeletedAsync(); + await setupContext.Database.EnsureCreatedAsync(); } #region Transaction using var context = new BloggingContext(); - using var transaction = context.Database.BeginTransaction(); + await using var transaction = await context.Database.BeginTransactionAsync(); try { context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); - context.SaveChanges(); + await context.SaveChangesAsync(); context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/visualstudio" }); - context.SaveChanges(); + await context.SaveChangesAsync(); - var blogs = context.Blogs + var blogs = await context.Blogs .OrderBy(b => b.Url) - .ToList(); + .ToListAsync(); // Commit transaction if all commands succeed, transaction will auto-rollback // when disposed if either commands fails - transaction.Commit(); + await transaction.CommitAsync(); } catch (Exception) { @@ -48,7 +49,7 @@ public class BloggingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True;ConnectRetryCount=0"); } } @@ -57,4 +58,4 @@ public class Blog public int BlogId { get; set; } public string Url { get; set; } } -} \ No newline at end of file +} diff --git a/samples/core/Saving/Transactions/ExternalDbTransaction.cs b/samples/core/Saving/Transactions/ExternalDbTransaction.cs index df7da8a663..0ea8f878e1 100644 --- a/samples/core/Saving/Transactions/ExternalDbTransaction.cs +++ b/samples/core/Saving/Transactions/ExternalDbTransaction.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; @@ -6,25 +7,25 @@ namespace EFSaving.Transactions; public class ExternalDbTransaction { - public static void Run() + public static async Task Run() { var connectionString = - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True"; + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True;ConnectRetryCount=0"; using (var context = new BloggingContext( new DbContextOptionsBuilder() .UseSqlServer(connectionString) .Options)) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region Transaction using var connection = new SqlConnection(connectionString); - connection.Open(); + await connection.OpenAsync(); - using var transaction = connection.BeginTransaction(); + await using var transaction = (SqlTransaction)await connection.BeginTransactionAsync(); try { // Run raw ADO.NET command in the transaction @@ -40,14 +41,14 @@ public static void Run() using (var context = new BloggingContext(options)) { - context.Database.UseTransaction(transaction); + await context.Database.UseTransactionAsync(transaction); context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); - context.SaveChanges(); + await context.SaveChangesAsync(); } // Commit transaction if all commands succeed, transaction will auto-rollback // when disposed if either commands fails - transaction.Commit(); + await transaction.CommitAsync(); } catch (Exception) { @@ -71,4 +72,4 @@ public class Blog public int BlogId { get; set; } public string Url { get; set; } } -} \ No newline at end of file +} diff --git a/samples/core/Saving/Transactions/ManagingSavepoints.cs b/samples/core/Saving/Transactions/ManagingSavepoints.cs index 38df73d7ba..d0a5f05fac 100644 --- a/samples/core/Saving/Transactions/ManagingSavepoints.cs +++ b/samples/core/Saving/Transactions/ManagingSavepoints.cs @@ -1,39 +1,40 @@ using System; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace EFSaving.Transactions; public class ManagingSavepoints { - public static void Run() + public static async Task Run() { using (var setupContext = new BloggingContext()) { - setupContext.Database.EnsureDeleted(); - setupContext.Database.EnsureCreated(); + await setupContext.Database.EnsureDeletedAsync(); + await setupContext.Database.EnsureCreatedAsync(); } #region Savepoints using var context = new BloggingContext(); - using var transaction = context.Database.BeginTransaction(); + await using var transaction = await context.Database.BeginTransactionAsync(); try { context.Blogs.Add(new Blog { Url = "https://devblogs.microsoft.com/dotnet/" }); - context.SaveChanges(); + await context.SaveChangesAsync(); - transaction.CreateSavepoint("BeforeMoreBlogs"); + await transaction.CreateSavepointAsync("BeforeMoreBlogs"); context.Blogs.Add(new Blog { Url = "https://devblogs.microsoft.com/visualstudio/" }); context.Blogs.Add(new Blog { Url = "https://devblogs.microsoft.com/aspnet/" }); - context.SaveChanges(); + await context.SaveChangesAsync(); - transaction.Commit(); + await transaction.CommitAsync(); } catch (Exception) { // If a failure occurred, we rollback to the savepoint and can continue the transaction - transaction.RollbackToSavepoint("BeforeMoreBlogs"); + await transaction.RollbackToSavepointAsync("BeforeMoreBlogs"); // TODO: Handle failure, possibly retry inserting blogs } @@ -47,7 +48,7 @@ public class BloggingContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True;ConnectRetryCount=0"); } } @@ -56,4 +57,4 @@ public class Blog public int BlogId { get; set; } public string Url { get; set; } } -} \ No newline at end of file +} diff --git a/samples/core/Saving/Transactions/SharingTransaction.cs b/samples/core/Saving/Transactions/SharingTransaction.cs index d841b106c4..ad7af12dad 100644 --- a/samples/core/Saving/Transactions/SharingTransaction.cs +++ b/samples/core/Saving/Transactions/SharingTransaction.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; @@ -8,18 +9,18 @@ namespace EFSaving.Transactions; public class SharingTransaction { - public static void Run() + public static async Task Run() { var connectionString = - @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True"; + @"Server=(localdb)\mssqllocaldb;Database=EFSaving.Transactions;Trusted_Connection=True;ConnectRetryCount=0"; using (var context = new BloggingContext( new DbContextOptionsBuilder() .UseSqlServer(connectionString) .Options)) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region Transaction @@ -29,27 +30,27 @@ public static void Run() .Options; using var context1 = new BloggingContext(options); - using var transaction = context1.Database.BeginTransaction(); + await using var transaction = await context1.Database.BeginTransactionAsync(); try { context1.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" }); - context1.SaveChanges(); + await context1.SaveChangesAsync(); using (var context2 = new BloggingContext(options)) { - context2.Database.UseTransaction(transaction.GetDbTransaction()); + await context2.Database.UseTransactionAsync(transaction.GetDbTransaction()); - var blogs = context2.Blogs + var blogs = await context2.Blogs .OrderBy(b => b.Url) - .ToList(); - + .ToListAsync(); + context2.Blogs.Add(new Blog { Url = "http://dot.net/" }); - context2.SaveChanges(); + await context2.SaveChangesAsync(); } // Commit transaction if all commands succeed, transaction will auto-rollback // when disposed if either commands fails - transaction.Commit(); + await transaction.CommitAsync(); } catch (Exception) { diff --git a/samples/core/Schemas/Migrations/CustomOperation.cs b/samples/core/Schemas/Migrations/CustomOperation.cs index 4e5a6b4517..afa709dea2 100644 --- a/samples/core/Schemas/Migrations/CustomOperation.cs +++ b/samples/core/Schemas/Migrations/CustomOperation.cs @@ -74,7 +74,7 @@ private void Generate( internal class CustomOperationContext : DbContext { - private readonly string _connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Sample"; + private readonly string _connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Sample;ConnectRetryCount=0"; #region snippet_OnConfiguring protected override void OnConfiguring(DbContextOptionsBuilder options) diff --git a/samples/core/Schemas/Migrations/MigrationTableNameContext.cs b/samples/core/Schemas/Migrations/MigrationTableNameContext.cs index 1124346a58..8d0d343d78 100644 --- a/samples/core/Schemas/Migrations/MigrationTableNameContext.cs +++ b/samples/core/Schemas/Migrations/MigrationTableNameContext.cs @@ -4,7 +4,7 @@ namespace Migrations; public class MigrationTableNameContext : DbContext { - private readonly string _connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Sample"; + private readonly string _connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Sample;ConnectRetryCount=0"; #region TableNameContext protected override void OnConfiguring(DbContextOptionsBuilder options) @@ -12,4 +12,4 @@ protected override void OnConfiguring(DbContextOptionsBuilder options) _connectionString, x => x.MigrationsHistoryTable("__MyMigrationsHistory", "mySchema")); #endregion -} \ No newline at end of file +} diff --git a/samples/core/Schemas/Migrations/MyHistoryRepository.cs b/samples/core/Schemas/Migrations/MyHistoryRepository.cs index 55f3e1c7f7..a5b7413115 100644 --- a/samples/core/Schemas/Migrations/MyHistoryRepository.cs +++ b/samples/core/Schemas/Migrations/MyHistoryRepository.cs @@ -9,7 +9,7 @@ namespace Migrations; public class MyHistoryRepositoryContext : DbContext { - private readonly string _connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Sample"; + private readonly string _connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Sample;ConnectRetryCount=0"; #region HistoryRepositoryContext protected override void OnConfiguring(DbContextOptionsBuilder options) @@ -34,4 +34,4 @@ protected override void ConfigureTable(EntityTypeBuilder history) history.Property(h => h.MigrationId).HasColumnName("Id"); } } -#endregion \ No newline at end of file +#endregion diff --git a/samples/core/Schemas/ThreeProjectMigrations/WebApplication1/Properties/launchSettings.json b/samples/core/Schemas/ThreeProjectMigrations/WebApplication1/Properties/launchSettings.json new file mode 100644 index 0000000000..4ea55d68cb --- /dev/null +++ b/samples/core/Schemas/ThreeProjectMigrations/WebApplication1/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "WebApplication1": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:58211;http://localhost:58215" + } + } +} \ No newline at end of file diff --git a/samples/core/Spatial/SqlServer/Models/WideWorldImportersContext.cs b/samples/core/Spatial/SqlServer/Models/WideWorldImportersContext.cs index 6180a81ac6..ece5a8ddfd 100644 --- a/samples/core/Spatial/SqlServer/Models/WideWorldImportersContext.cs +++ b/samples/core/Spatial/SqlServer/Models/WideWorldImportersContext.cs @@ -13,7 +13,7 @@ internal class WideWorldImportersContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder options) => #region snippet_UseNetTopologySuite options.UseSqlServer( - @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=WideWorldImporters", + @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=WideWorldImporters;ConnectRetryCount=0", x => x.UseNetTopologySuite()); #endregion -} \ No newline at end of file +} diff --git a/samples/core/Spatial/SqlServer/Program.cs b/samples/core/Spatial/SqlServer/Program.cs index 9f419d459f..49b1dc03b4 100644 --- a/samples/core/Spatial/SqlServer/Program.cs +++ b/samples/core/Spatial/SqlServer/Program.cs @@ -1,14 +1,15 @@ using System; using System.IO; using System.Linq; +using Microsoft.EntityFrameworkCore; using NetTopologySuite.Geometries; using NetTopologySuite.IO; using SqlServer.Models; using (var context = new WideWorldImportersContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); context.AddRange( new City { CityName = "Bellemondville", Location = new Point(-122.128822, 47.643703) { SRID = 4326 } }, @@ -25,32 +26,32 @@ })) { SRID = 4326 } }); - context.SaveChanges(); + await context.SaveChangesAsync(); } var currentLocation = new Point(-122.128822, 47.643703) { SRID = 4326 }; using var db = new WideWorldImportersContext(); #region snippet_Distance // Find the nearest city -var nearestCity = db.Cities +var nearestCity = await db.Cities .OrderBy(c => c.Location.Distance(currentLocation)) - .FirstOrDefault(); + .FirstOrDefaultAsync(); #endregion Console.WriteLine($"Nearest city: {nearestCity.CityName}"); #region snippet_Contains // Find the containing country -var currentCountry = db.Countries - .FirstOrDefault(c => c.Border.Contains(currentLocation)); +var currentCountry = await db.Countries + .FirstOrDefaultAsync(c => c.Border.Contains(currentLocation)); #endregion Console.WriteLine($"Current country: {currentCountry.CountryName}"); // Find which states/provinces a route intersects var route = new GeoJsonReader().Read(File.ReadAllText("seattle-to-new-york.json")); route.SRID = 4326; -var statePorvincesIntersected = (from s in db.StateProvinces +var statePorvincesIntersected = await (from s in db.StateProvinces where s.Border.Intersects(route) orderby s.Border.Distance(currentLocation) - select s).ToList(); + select s).ToListAsync(); Console.WriteLine("States/provinces intersected:"); foreach (var state in statePorvincesIntersected) { diff --git a/samples/core/SqlServer/ValueGeneration/ExplicitIdentityValues.cs b/samples/core/SqlServer/ValueGeneration/ExplicitIdentityValues.cs index 0caac4a6b2..e9a26300ae 100644 --- a/samples/core/SqlServer/ValueGeneration/ExplicitIdentityValues.cs +++ b/samples/core/SqlServer/ValueGeneration/ExplicitIdentityValues.cs @@ -1,3 +1,4 @@ +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace SqlServer.ValueGeneration; @@ -13,12 +14,12 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) public class ExplicitIdentityValues { - public static void Run() + public static async Task Run() { using (var context = new ExplicitIdentityValuesContext()) { - context.Database.EnsureDeleted(); - context.Database.EnsureCreated(); + await context.Database.EnsureDeletedAsync(); + await context.Database.EnsureCreatedAsync(); } #region ExplicitIdentityValues @@ -27,18 +28,18 @@ public static void Run() context.Blogs.Add(new Blog { BlogId = 100, Url = "http://blog1.somesite.com/" }); context.Blogs.Add(new Blog { BlogId = 101, Url = "http://blog2.somesite.com/" }); - context.Database.OpenConnection(); + await context.Database.OpenConnectionAsync(); try { - context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Blogs ON"); - context.SaveChanges(); - context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Blogs OFF"); + await context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT dbo.Blogs ON"); + await context.SaveChangesAsync(); + await context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT dbo.Blogs OFF"); } finally { - context.Database.CloseConnection(); + await context.Database.CloseConnectionAsync(); } } #endregion } -} \ No newline at end of file +} diff --git a/samples/core/Testing/BloggingWebApi/Controllers/BloggingController.cs b/samples/core/Testing/BloggingWebApi/Controllers/BloggingController.cs index e9c100b64c..fe4feee86f 100644 --- a/samples/core/Testing/BloggingWebApi/Controllers/BloggingController.cs +++ b/samples/core/Testing/BloggingWebApi/Controllers/BloggingController.cs @@ -1,5 +1,7 @@ -using System.Data; +using System.Collections.Generic; +using System.Data; using System.Linq; +using System.Threading.Tasks; using EF.Testing.BusinessLogic; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; @@ -17,23 +19,23 @@ public BloggingController(BloggingContext context) #region GetBlog [HttpGet] - public ActionResult GetBlog(string name) + public async Task> GetBlog(string name) { - var blog = _context.Blogs.FirstOrDefault(b => b.Name == name); + var blog = await _context.Blogs.FirstOrDefaultAsync(b => b.Name == name); return blog is null ? NotFound() : blog; } #endregion [HttpGet] - public ActionResult GetAllBlogs() - => _context.Blogs.OrderBy(b => b.Name).ToArray(); + public IAsyncEnumerable GetAllBlogs() + => _context.Blogs.OrderBy(b => b.Name).AsAsyncEnumerable(); #region AddBlog [HttpPost] - public ActionResult AddBlog(string name, string url) + public async Task AddBlog(string name, string url) { _context.Blogs.Add(new Blog { Name = name, Url = url }); - _context.SaveChanges(); + await _context.SaveChangesAsync(); return Ok(); } @@ -41,22 +43,22 @@ public ActionResult AddBlog(string name, string url) #region UpdateBlogUrl [HttpPost] - public ActionResult UpdateBlogUrl(string name, string url) + public async Task UpdateBlogUrl(string name, string url) { // Note: it isn't usually necessary to start a transaction for updating. This is done here for illustration purposes only. - using var transaction = _context.Database.BeginTransaction(IsolationLevel.Serializable); + await using var transaction = await _context.Database.BeginTransactionAsync(IsolationLevel.Serializable); - var blog = _context.Blogs.FirstOrDefault(b => b.Name == name); + var blog = await _context.Blogs.FirstOrDefaultAsync(b => b.Name == name); if (blog is null) { return NotFound(); } blog.Url = url; - _context.SaveChanges(); + await _context.SaveChangesAsync(); - transaction.Commit(); + await transaction.CommitAsync(); return Ok(); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Testing/BloggingWebApi/Controllers/BloggingControllerWithRepository.cs b/samples/core/Testing/BloggingWebApi/Controllers/BloggingControllerWithRepository.cs index d5f2077445..f5d61ca109 100644 --- a/samples/core/Testing/BloggingWebApi/Controllers/BloggingControllerWithRepository.cs +++ b/samples/core/Testing/BloggingWebApi/Controllers/BloggingControllerWithRepository.cs @@ -1,6 +1,8 @@ using System; +using System.Collections.Generic; using System.Data; using System.Linq; +using System.Threading.Tasks; using EF.Testing.BusinessLogic; using Microsoft.AspNetCore.Mvc; @@ -17,35 +19,33 @@ public BloggingControllerWithRepository(IBloggingRepository repository) => _repository = repository; [HttpGet] - public Blog GetBlog(string name) - => _repository.GetBlogByName(name); + public async Task GetBlog(string name) + => await _repository.GetBlogByNameAsync(name); #endregion [HttpGet] - public ActionResult GetAllBlogs() - => _repository.GetAllBlogs().ToArray(); + public IAsyncEnumerable GetAllBlogs() + => _repository.GetAllBlogsAsync(); [HttpPost] - public ActionResult AddBlog(string name, string url) + public async Task AddBlog(string name, string url) { _repository.AddBlog(new Blog { Name = name, Url = url }); - _repository.SaveChanges(); - - return Ok(); + await _repository.SaveChangesAsync(); } [HttpPost] - public ActionResult UpdateBlogUrl(string name, string url) + public async Task UpdateBlogUrl(string name, string url) { - var blog = _repository.GetBlogByName(name); + var blog = await _repository.GetBlogByNameAsync(name); if (blog is null) { return NotFound(); } blog.Url = url; - _repository.SaveChanges(); + await _repository.SaveChangesAsync(); return Ok(); } -} \ No newline at end of file +} diff --git a/samples/core/Testing/BloggingWebApi/Properties/launchSettings.json b/samples/core/Testing/BloggingWebApi/Properties/launchSettings.json new file mode 100644 index 0000000000..117c7b9765 --- /dev/null +++ b/samples/core/Testing/BloggingWebApi/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "BloggingWebApi": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:58208;http://localhost:58212" + } + } +} \ No newline at end of file diff --git a/samples/core/Testing/BloggingWebApi/Startup.cs b/samples/core/Testing/BloggingWebApi/Startup.cs index 617faedb9f..85dd5fd101 100644 --- a/samples/core/Testing/BloggingWebApi/Startup.cs +++ b/samples/core/Testing/BloggingWebApi/Startup.cs @@ -23,7 +23,7 @@ public void ConfigureServices(IServiceCollection services) services.AddDbContext( b => b.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFTestSample;Trusted_Connection=True")); + @"Server=(localdb)\mssqllocaldb;Database=EFTestSample;Trusted_Connection=True;ConnectRetryCount=0")); #region RegisterRepositoryInDI services.AddScoped(); @@ -42,4 +42,4 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } -} \ No newline at end of file +} diff --git a/samples/core/Testing/BusinessLogic/BloggingContext.cs b/samples/core/Testing/BusinessLogic/BloggingContext.cs index 71649a16e6..be93d0a4cc 100644 --- a/samples/core/Testing/BusinessLogic/BloggingContext.cs +++ b/samples/core/Testing/BusinessLogic/BloggingContext.cs @@ -28,7 +28,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer( - @"Server=(localdb)\mssqllocaldb;Database=EFProviders.InMemory;Trusted_Connection=True"); + @"Server=(localdb)\mssqllocaldb;Database=EFProviders.InMemory;Trusted_Connection=True;ConnectRetryCount=0"); } } #endregion @@ -43,4 +43,4 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) _modelCustomizer(this, modelBuilder); } } -} \ No newline at end of file +} diff --git a/samples/core/Testing/BusinessLogic/BloggingRepository.cs b/samples/core/Testing/BusinessLogic/BloggingRepository.cs index 8c445fcf8a..9fdf05d074 100644 --- a/samples/core/Testing/BusinessLogic/BloggingRepository.cs +++ b/samples/core/Testing/BusinessLogic/BloggingRepository.cs @@ -1,5 +1,7 @@ using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; namespace EF.Testing.BusinessLogic; @@ -11,16 +13,16 @@ public class BloggingRepository : IBloggingRepository public BloggingRepository(BloggingContext context) => _context = context; - public Blog GetBlogByName(string name) - => _context.Blogs.FirstOrDefault(b => b.Name == name); + public async Task GetBlogByNameAsync(string name) + => await _context.Blogs.FirstOrDefaultAsync(b => b.Name == name); #endregion - public IEnumerable GetAllBlogs() - => _context.Blogs; + public IAsyncEnumerable GetAllBlogsAsync() + => _context.Blogs.AsAsyncEnumerable(); public void AddBlog(Blog blog) => _context.Add(blog); - public void SaveChanges() - => _context.SaveChanges(); -} \ No newline at end of file + public async Task SaveChangesAsync() + => await _context.SaveChangesAsync(); +} diff --git a/samples/core/Testing/BusinessLogic/IBloggingRepository.cs b/samples/core/Testing/BusinessLogic/IBloggingRepository.cs index 3be7df33ac..d96a45a788 100644 --- a/samples/core/Testing/BusinessLogic/IBloggingRepository.cs +++ b/samples/core/Testing/BusinessLogic/IBloggingRepository.cs @@ -1,16 +1,17 @@ using System.Collections.Generic; +using System.Threading.Tasks; namespace EF.Testing.BusinessLogic; #region IBloggingRepository public interface IBloggingRepository { - Blog GetBlogByName(string name); + Task GetBlogByNameAsync(string name); - IEnumerable GetAllBlogs(); + IAsyncEnumerable GetAllBlogsAsync(); void AddBlog(Blog blog); - void SaveChanges(); + Task SaveChangesAsync(); } -#endregion \ No newline at end of file +#endregion diff --git a/samples/core/Testing/TestingWithTheDatabase/BloggingControllerTest.cs b/samples/core/Testing/TestingWithTheDatabase/BloggingControllerTest.cs index abb2dc0695..82670b92cb 100644 --- a/samples/core/Testing/TestingWithTheDatabase/BloggingControllerTest.cs +++ b/samples/core/Testing/TestingWithTheDatabase/BloggingControllerTest.cs @@ -1,5 +1,7 @@ using System.Linq; +using System.Threading.Tasks; using EF.Testing.BloggingWebApi.Controllers; +using Microsoft.EntityFrameworkCore; using Xunit; namespace EF.Testing.IntegrationTests; @@ -15,12 +17,12 @@ public BloggingControllerTest(TestDatabaseFixture fixture) #region GetBlog [Fact] - public void GetBlog() + public async Task GetBlog() { using var context = Fixture.CreateContext(); var controller = new BloggingController(context); - var blog = controller.GetBlog("Blog2").Value; + var blog = (await controller.GetBlog("Blog2")).Value; Assert.Equal("http://blog2.com/", blog.Url); } @@ -28,12 +30,12 @@ public void GetBlog() #region GetAllBlogs [Fact] - public void GetAllBlogs() + public async Task GetAllBlogs() { using var context = Fixture.CreateContext(); var controller = new BloggingController(context); - var blogs = controller.GetAllBlogs().Value; + var blogs = await controller.GetAllBlogs().ToListAsync(); Assert.Collection( blogs, @@ -44,19 +46,19 @@ public void GetAllBlogs() #region AddBlog [Fact] - public void AddBlog() + public async Task AddBlog() { using var context = Fixture.CreateContext(); context.Database.BeginTransaction(); var controller = new BloggingController(context); - controller.AddBlog("Blog3", "http://blog3.com/"); + await controller.AddBlog("Blog3", "http://blog3.com/"); context.ChangeTracker.Clear(); - var blog = context.Blogs.Single(b => b.Name == "Blog3"); + var blog = await context.Blogs.SingleAsync(b => b.Name == "Blog3"); Assert.Equal("http://blog3.com/", blog.Url); } #endregion -} \ No newline at end of file +} diff --git a/samples/core/Testing/TestingWithTheDatabase/TestDatabaseFixture.cs b/samples/core/Testing/TestingWithTheDatabase/TestDatabaseFixture.cs index 843c6700d7..7b396bc1f8 100644 --- a/samples/core/Testing/TestingWithTheDatabase/TestDatabaseFixture.cs +++ b/samples/core/Testing/TestingWithTheDatabase/TestDatabaseFixture.cs @@ -6,7 +6,7 @@ namespace EF.Testing.IntegrationTests; #region TestDatabaseFixture public class TestDatabaseFixture { - private const string ConnectionString = @"Server=(localdb)\mssqllocaldb;Database=EFTestSample;Trusted_Connection=True"; + private const string ConnectionString = @"Server=(localdb)\mssqllocaldb;Database=EFTestSample;Trusted_Connection=True;ConnectRetryCount=0"; private static readonly object _lock = new(); private static bool _databaseInitialized; @@ -39,4 +39,4 @@ public BloggingContext CreateContext() .UseSqlServer(ConnectionString) .Options); } -#endregion \ No newline at end of file +#endregion diff --git a/samples/core/Testing/TestingWithTheDatabase/TestingWithTheDatabase.csproj b/samples/core/Testing/TestingWithTheDatabase/TestingWithTheDatabase.csproj index 7a17738a81..7a71dc5369 100644 --- a/samples/core/Testing/TestingWithTheDatabase/TestingWithTheDatabase.csproj +++ b/samples/core/Testing/TestingWithTheDatabase/TestingWithTheDatabase.csproj @@ -14,6 +14,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all + diff --git a/samples/core/Testing/TestingWithTheDatabase/TransactionalBloggingControllerTest.cs b/samples/core/Testing/TestingWithTheDatabase/TransactionalBloggingControllerTest.cs index c6c63e92e3..b9b220446f 100644 --- a/samples/core/Testing/TestingWithTheDatabase/TransactionalBloggingControllerTest.cs +++ b/samples/core/Testing/TestingWithTheDatabase/TransactionalBloggingControllerTest.cs @@ -1,6 +1,8 @@ using System; using System.Linq; +using System.Threading.Tasks; using EF.Testing.BloggingWebApi.Controllers; +using Microsoft.EntityFrameworkCore; using Xunit; namespace EF.Testing.IntegrationTests; @@ -17,17 +19,17 @@ public TransactionalBloggingControllerTest(TransactionalTestDatabaseFixture fixt #region UpdateBlogUrl [Fact] - public void UpdateBlogUrl() + public async Task UpdateBlogUrl() { using (var context = Fixture.CreateContext()) { var controller = new BloggingController(context); - controller.UpdateBlogUrl("Blog2", "http://blog2_updated.com/"); + await controller.UpdateBlogUrl("Blog2", "http://blog2_updated.com/"); } using (var context = Fixture.CreateContext()) { - var blog = context.Blogs.Single(b => b.Name == "Blog2"); + var blog = await context.Blogs.SingleAsync(b => b.Name == "Blog2"); Assert.Equal("http://blog2_updated.com/", blog.Url); } } @@ -37,4 +39,4 @@ public void UpdateBlogUrl() public void Dispose() => Fixture.Cleanup(); #endregion -} \ No newline at end of file +} diff --git a/samples/core/Testing/TestingWithTheDatabase/TransactionalTestDatabaseFixture.cs b/samples/core/Testing/TestingWithTheDatabase/TransactionalTestDatabaseFixture.cs index 2f26f78d4f..0dba2699a7 100644 --- a/samples/core/Testing/TestingWithTheDatabase/TransactionalTestDatabaseFixture.cs +++ b/samples/core/Testing/TestingWithTheDatabase/TransactionalTestDatabaseFixture.cs @@ -7,7 +7,7 @@ namespace EF.Testing.IntegrationTests; #region TransactionalTestDatabaseFixture public class TransactionalTestDatabaseFixture { - private const string ConnectionString = @"Server=(localdb)\mssqllocaldb;Database=EFTransactionalTestSample;Trusted_Connection=True"; + private const string ConnectionString = @"Server=(localdb)\mssqllocaldb;Database=EFTransactionalTestSample;Trusted_Connection=True;ConnectRetryCount=0"; public BloggingContext CreateContext() => new BloggingContext( @@ -45,4 +45,4 @@ public void Cleanup() public class TransactionalTestsCollection : ICollectionFixture { } -#endregion \ No newline at end of file +#endregion diff --git a/samples/core/Testing/TestingWithoutTheDatabase/InMemoryBloggingControllerTest.cs b/samples/core/Testing/TestingWithoutTheDatabase/InMemoryBloggingControllerTest.cs index ba75766531..2c3744d999 100644 --- a/samples/core/Testing/TestingWithoutTheDatabase/InMemoryBloggingControllerTest.cs +++ b/samples/core/Testing/TestingWithoutTheDatabase/InMemoryBloggingControllerTest.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading.Tasks; using EF.Testing.BloggingWebApi.Controllers; using EF.Testing.BusinessLogic; using Microsoft.EntityFrameworkCore; @@ -34,24 +35,24 @@ public InMemoryBloggingControllerTest() #region GetBlog [Fact] - public void GetBlog() + public async Task GetBlog() { using var context = CreateContext(); var controller = new BloggingController(context); - var blog = controller.GetBlog("Blog2").Value; + var blog = (await controller.GetBlog("Blog2")).Value; Assert.Equal("http://blog2.com/", blog.Url); } #endregion [Fact] - public void GetAllBlogs() + public async Task GetAllBlogs() { using var context = CreateContext(); var controller = new BloggingController(context); - var blogs = controller.GetAllBlogs().Value; + var blogs = await controller.GetAllBlogs().ToListAsync(); Assert.Collection( blogs, @@ -60,26 +61,26 @@ public void GetAllBlogs() } [Fact] - public void AddBlog() + public async Task AddBlog() { using var context = CreateContext(); var controller = new BloggingController(context); - controller.AddBlog("Blog3", "http://blog3.com/"); + await controller.AddBlog("Blog3", "http://blog3.com/"); - var blog = context.Blogs.Single(b => b.Name == "Blog3"); + var blog = await context.Blogs.SingleAsync(b => b.Name == "Blog3"); Assert.Equal("http://blog3.com/", blog.Url); } [Fact] - public void UpdateBlogUrl() + public async Task UpdateBlogUrl() { using var context = CreateContext(); var controller = new BloggingController(context); - controller.UpdateBlogUrl("Blog2", "http://blog2_updated.com/"); + await controller.UpdateBlogUrl("Blog2", "http://blog2_updated.com/"); - var blog = context.Blogs.Single(b => b.Name == "Blog2"); + var blog = await context.Blogs.SingleAsync(b => b.Name == "Blog2"); Assert.Equal("http://blog2_updated.com/", blog.Url); } @@ -90,4 +91,4 @@ public void UpdateBlogUrl() .ToInMemoryQuery(() => context.Blogs.Select(b => new UrlResource { Url = b.Url })); #endregion }); -} \ No newline at end of file +} diff --git a/samples/core/Testing/TestingWithoutTheDatabase/RepositoryBloggingControllerTest.cs b/samples/core/Testing/TestingWithoutTheDatabase/RepositoryBloggingControllerTest.cs index 29b3db5c79..5913a88539 100644 --- a/samples/core/Testing/TestingWithoutTheDatabase/RepositoryBloggingControllerTest.cs +++ b/samples/core/Testing/TestingWithoutTheDatabase/RepositoryBloggingControllerTest.cs @@ -1,3 +1,5 @@ +using System.Linq; +using System.Threading.Tasks; using EF.Testing.BloggingWebApi.Controllers; using EF.Testing.BusinessLogic; using Moq; @@ -9,83 +11,83 @@ public class RepositoryBloggingControllerTest { #region GetBlog [Fact] - public void GetBlog() + public async Task GetBlog() { // Arrange var repositoryMock = new Mock(); repositoryMock - .Setup(r => r.GetBlogByName("Blog2")) - .Returns(new Blog { Name = "Blog2", Url = "http://blog2.com/" }); + .Setup(r => r.GetBlogByNameAsync("Blog2")) + .Returns(Task.FromResult(new Blog { Name = "Blog2", Url = "http://blog2.com/" })); var controller = new BloggingControllerWithRepository(repositoryMock.Object); // Act - var blog = controller.GetBlog("Blog2"); + var blog = await controller.GetBlog("Blog2"); // Assert - repositoryMock.Verify(r => r.GetBlogByName("Blog2")); + repositoryMock.Verify(r => r.GetBlogByNameAsync("Blog2")); Assert.Equal("http://blog2.com/", blog.Url); } #endregion [Fact] - public void GetAllBlogs() + public async Task GetAllBlogs() { // Arrange var repositoryMock = new Mock(); repositoryMock - .Setup(r => r.GetAllBlogs()) + .Setup(r => r.GetAllBlogsAsync()) .Returns(new[] { new Blog { Name = "Blog1", Url = "http://blog1.com/" }, new Blog { Name = "Blog2", Url = "http://blog2.com/" } - }); + }.ToAsyncEnumerable()); var controller = new BloggingControllerWithRepository(repositoryMock.Object); // Act - var blogs = controller.GetAllBlogs().Value; + var blogs = await controller.GetAllBlogs().ToListAsync(); // Assert - repositoryMock.Verify(r => r.GetAllBlogs()); + repositoryMock.Verify(r => r.GetAllBlogsAsync()); Assert.Equal("http://blog1.com/", blogs[0].Url); Assert.Equal("http://blog2.com/", blogs[1].Url); } [Fact] - public void AddBlog() + public async Task AddBlog() { // Arrange var repositoryMock = new Mock(); var controller = new BloggingControllerWithRepository(repositoryMock.Object); // Act - controller.AddBlog("Blog2", "http://blog2.com/"); + await controller.AddBlog("Blog2", "http://blog2.com/"); // Assert repositoryMock.Verify(r => r.AddBlog(It.IsAny())); - repositoryMock.Verify(r => r.SaveChanges()); + repositoryMock.Verify(r => r.SaveChangesAsync()); } [Fact] - public void UpdateBlogUrl() + public async Task UpdateBlogUrl() { var blog = new Blog { Name = "Blog2", Url = "http://blog2.com/" }; // Arrange var repositoryMock = new Mock(); repositoryMock - .Setup(r => r.GetBlogByName("Blog2")) - .Returns(blog); + .Setup(r => r.GetBlogByNameAsync("Blog2")) + .Returns(Task.FromResult(blog)); var controller = new BloggingControllerWithRepository(repositoryMock.Object); // Act - controller.UpdateBlogUrl("Blog2", "http://blog2_updated.com/"); + await controller.UpdateBlogUrl("Blog2", "http://blog2_updated.com/"); // Assert - repositoryMock.Verify(r => r.GetBlogByName("Blog2")); - repositoryMock.Verify(r => r.SaveChanges()); + repositoryMock.Verify(r => r.GetBlogByNameAsync("Blog2")); + repositoryMock.Verify(r => r.SaveChangesAsync()); Assert.Equal("http://blog2_updated.com/", blog.Url); } -} \ No newline at end of file +} diff --git a/samples/core/Testing/TestingWithoutTheDatabase/SqliteInMemoryBloggingControllerTest.cs b/samples/core/Testing/TestingWithoutTheDatabase/SqliteInMemoryBloggingControllerTest.cs index 9c2990e434..09806d0017 100644 --- a/samples/core/Testing/TestingWithoutTheDatabase/SqliteInMemoryBloggingControllerTest.cs +++ b/samples/core/Testing/TestingWithoutTheDatabase/SqliteInMemoryBloggingControllerTest.cs @@ -1,6 +1,7 @@ using System; using System.Data.Common; using System.Linq; +using System.Threading.Tasks; using EF.Testing.BloggingWebApi.Controllers; using EF.Testing.BusinessLogic; using Microsoft.Data.Sqlite; @@ -53,24 +54,24 @@ SELECT Url #region GetBlog [Fact] - public void GetBlog() + public async Task GetBlog() { using var context = CreateContext(); var controller = new BloggingController(context); - var blog = controller.GetBlog("Blog2").Value; + var blog = (await controller.GetBlog("Blog2")).Value; Assert.Equal("http://blog2.com/", blog.Url); } #endregion [Fact] - public void GetAllBlogs() + public async Task GetAllBlogs() { using var context = CreateContext(); var controller = new BloggingController(context); - var blogs = controller.GetAllBlogs().Value; + var blogs = await controller.GetAllBlogs().ToListAsync(); Assert.Collection( blogs, @@ -79,26 +80,26 @@ public void GetAllBlogs() } [Fact] - public void AddBlog() + public async Task AddBlog() { using var context = CreateContext(); var controller = new BloggingController(context); - controller.AddBlog("Blog3", "http://blog3.com/"); + await controller.AddBlog("Blog3", "http://blog3.com/"); - var blog = context.Blogs.Single(b => b.Name == "Blog3"); + var blog = await context.Blogs.SingleAsync(b => b.Name == "Blog3"); Assert.Equal("http://blog3.com/", blog.Url); } [Fact] - public void UpdateBlogUrl() + public async Task UpdateBlogUrl() { using var context = CreateContext(); var controller = new BloggingController(context); - controller.UpdateBlogUrl("Blog2", "http://blog2_updated.com/"); + await controller.UpdateBlogUrl("Blog2", "http://blog2_updated.com/"); - var blog = context.Blogs.Single(b => b.Name == "Blog2"); + var blog = await context.Blogs.SingleAsync(b => b.Name == "Blog2"); Assert.Equal("http://blog2_updated.com/", blog.Url); } -} \ No newline at end of file +} diff --git a/samples/core/Testing/TestingWithoutTheDatabase/TestingWithoutTheDatabase.csproj b/samples/core/Testing/TestingWithoutTheDatabase/TestingWithoutTheDatabase.csproj index 88cfd81fe5..e7a5c084df 100644 --- a/samples/core/Testing/TestingWithoutTheDatabase/TestingWithoutTheDatabase.csproj +++ b/samples/core/Testing/TestingWithoutTheDatabase/TestingWithoutTheDatabase.csproj @@ -18,6 +18,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all + diff --git a/samples/core/Xamarin/EFGetStarted.Android/Assets/AboutAssets.txt b/samples/core/Xamarin/EFGetStarted.Android/Assets/AboutAssets.txt deleted file mode 100644 index 072563f8f8..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/Assets/AboutAssets.txt +++ /dev/null @@ -1,19 +0,0 @@ -Any raw assets you want to be deployed with your application can be placed in -this directory (and child directories) and given a Build Action of "AndroidAsset". - -These files will be deployed with your package and will be accessible using Android's -AssetManager, like this: - -public class ReadAsset : Activity -{ - protected override void OnCreate (Bundle bundle) - { - base.OnCreate (bundle); - - InputStream input = Assets.Open ("my_asset.txt"); - } -} - -Additionally, some Android functions will automatically load asset files: - -Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); diff --git a/samples/core/Xamarin/EFGetStarted.Android/EFGetStarted.Android.csproj b/samples/core/Xamarin/EFGetStarted.Android/EFGetStarted.Android.csproj deleted file mode 100644 index f8d6e70fc9..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/EFGetStarted.Android.csproj +++ /dev/null @@ -1,99 +0,0 @@ - - - - Debug - AnyCPU - {8969C333-0071-4893-91BE-18050B0343C9} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {c9e5eea5-ca05-42a1-839b-61506e0a37df} - Library - EFGetStarted.Droid - EFGetStarted.Android - True - True - Resources\Resource.designer.cs - Resource - Properties\AndroidManifest.xml - Resources - Assets - v9.0 - true - true - Xamarin.Android.Net.AndroidClientHandler - - - - - true - portable - false - bin\Debug - DEBUG; - prompt - 4 - None - - - true - portable - true - bin\Release - prompt - 4 - true - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F} - EFGetStarted - - - - diff --git a/samples/core/Xamarin/EFGetStarted.Android/MainActivity.cs b/samples/core/Xamarin/EFGetStarted.Android/MainActivity.cs deleted file mode 100644 index f0f23c1cbb..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/MainActivity.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; - -using Android.App; -using Android.Content.PM; -using Android.Runtime; -using Android.Views; -using Android.Widget; -using Android.OS; - -namespace EFGetStarted.Droid -{ - [Activity(Label = "EFGetStarted", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] - public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity - { - protected override void OnCreate(Bundle savedInstanceState) - { - TabLayoutResource = Resource.Layout.Tabbar; - ToolbarResource = Resource.Layout.Toolbar; - - base.OnCreate(savedInstanceState); - - Xamarin.Essentials.Platform.Init(this, savedInstanceState); - global::Xamarin.Forms.Forms.Init(this, savedInstanceState); - LoadApplication(new App()); - } - public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) - { - Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); - - base.OnRequestPermissionsResult(requestCode, permissions, grantResults); - } - } -} \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted.Android/Properties/AndroidManifest.xml b/samples/core/Xamarin/EFGetStarted.Android/Properties/AndroidManifest.xml deleted file mode 100644 index 6531c979f1..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/Properties/AndroidManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted.Android/Properties/AssemblyInfo.cs b/samples/core/Xamarin/EFGetStarted.Android/Properties/AssemblyInfo.cs deleted file mode 100644 index ae2da40bc1..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Android.App; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("EFGetStarted.Android")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("EFGetStarted.Android")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] - -// Add some common permissions, these can be removed if not needed -[assembly: UsesPermission(Android.Manifest.Permission.Internet)] -[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)] diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/AboutResources.txt b/samples/core/Xamarin/EFGetStarted.Android/Resources/AboutResources.txt deleted file mode 100644 index cb30f20b1c..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/Resources/AboutResources.txt +++ /dev/null @@ -1,50 +0,0 @@ -Images, layout descriptions, binary blobs and string dictionaries can be included -in your application as resource files. Various Android APIs are designed to -operate on the resource IDs instead of dealing with images, strings or binary blobs -directly. - -For example, a sample Android app that contains a user interface layout (main.xml), -an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) -would keep its resources in the "Resources" directory of the application: - -Resources/ - drawable-hdpi/ - icon.png - - drawable-ldpi/ - icon.png - - drawable-mdpi/ - icon.png - - layout/ - main.xml - - values/ - strings.xml - -In order to get the build system to recognize Android resources, set the build action to -"AndroidResource". The native Android APIs do not operate directly with filenames, but -instead operate on resource IDs. When you compile an Android application that uses resources, -the build system will package the resources for distribution and generate a class called -"Resource" that contains the tokens for each one of the resources included. For example, -for the above Resources layout, this is what the Resource class would expose: - -public class Resource { - public class drawable { - public const int icon = 0x123; - } - - public class layout { - public const int main = 0x456; - } - - public class strings { - public const int first_string = 0xabc; - public const int second_string = 0xbcd; - } -} - -You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main -to reference the layout/main.xml file, or Resource.strings.first_string to reference the first -string in the dictionary file values/strings.xml. diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/Resource.designer.cs b/samples/core/Xamarin/EFGetStarted.Android/Resources/Resource.designer.cs deleted file mode 100644 index 3a4d3d0789..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/Resources/Resource.designer.cs +++ /dev/null @@ -1,14047 +0,0 @@ -#pragma warning disable 1591 -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -[assembly: global::Android.Runtime.ResourceDesignerAttribute("EFGetStarted.Droid.Resource", IsApplication=true)] - -namespace EFGetStarted.Droid -{ - - - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] - public partial class Resource - { - - static Resource() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - public static void UpdateIdValues() - { - global::Xamarin.Essentials.Resource.Attribute.alpha = global::EFGetStarted.Droid.Resource.Attribute.alpha; - global::Xamarin.Essentials.Resource.Attribute.coordinatorLayoutStyle = global::EFGetStarted.Droid.Resource.Attribute.coordinatorLayoutStyle; - global::Xamarin.Essentials.Resource.Attribute.font = global::EFGetStarted.Droid.Resource.Attribute.font; - global::Xamarin.Essentials.Resource.Attribute.fontProviderAuthority = global::EFGetStarted.Droid.Resource.Attribute.fontProviderAuthority; - global::Xamarin.Essentials.Resource.Attribute.fontProviderCerts = global::EFGetStarted.Droid.Resource.Attribute.fontProviderCerts; - global::Xamarin.Essentials.Resource.Attribute.fontProviderFetchStrategy = global::EFGetStarted.Droid.Resource.Attribute.fontProviderFetchStrategy; - global::Xamarin.Essentials.Resource.Attribute.fontProviderFetchTimeout = global::EFGetStarted.Droid.Resource.Attribute.fontProviderFetchTimeout; - global::Xamarin.Essentials.Resource.Attribute.fontProviderPackage = global::EFGetStarted.Droid.Resource.Attribute.fontProviderPackage; - global::Xamarin.Essentials.Resource.Attribute.fontProviderQuery = global::EFGetStarted.Droid.Resource.Attribute.fontProviderQuery; - global::Xamarin.Essentials.Resource.Attribute.fontStyle = global::EFGetStarted.Droid.Resource.Attribute.fontStyle; - global::Xamarin.Essentials.Resource.Attribute.fontVariationSettings = global::EFGetStarted.Droid.Resource.Attribute.fontVariationSettings; - global::Xamarin.Essentials.Resource.Attribute.fontWeight = global::EFGetStarted.Droid.Resource.Attribute.fontWeight; - global::Xamarin.Essentials.Resource.Attribute.keylines = global::EFGetStarted.Droid.Resource.Attribute.keylines; - global::Xamarin.Essentials.Resource.Attribute.layout_anchor = global::EFGetStarted.Droid.Resource.Attribute.layout_anchor; - global::Xamarin.Essentials.Resource.Attribute.layout_anchorGravity = global::EFGetStarted.Droid.Resource.Attribute.layout_anchorGravity; - global::Xamarin.Essentials.Resource.Attribute.layout_behavior = global::EFGetStarted.Droid.Resource.Attribute.layout_behavior; - global::Xamarin.Essentials.Resource.Attribute.layout_dodgeInsetEdges = global::EFGetStarted.Droid.Resource.Attribute.layout_dodgeInsetEdges; - global::Xamarin.Essentials.Resource.Attribute.layout_insetEdge = global::EFGetStarted.Droid.Resource.Attribute.layout_insetEdge; - global::Xamarin.Essentials.Resource.Attribute.layout_keyline = global::EFGetStarted.Droid.Resource.Attribute.layout_keyline; - global::Xamarin.Essentials.Resource.Attribute.statusBarBackground = global::EFGetStarted.Droid.Resource.Attribute.statusBarBackground; - global::Xamarin.Essentials.Resource.Attribute.ttcIndex = global::EFGetStarted.Droid.Resource.Attribute.ttcIndex; - global::Xamarin.Essentials.Resource.Color.browser_actions_bg_grey = global::EFGetStarted.Droid.Resource.Color.browser_actions_bg_grey; - global::Xamarin.Essentials.Resource.Color.browser_actions_divider_color = global::EFGetStarted.Droid.Resource.Color.browser_actions_divider_color; - global::Xamarin.Essentials.Resource.Color.browser_actions_text_color = global::EFGetStarted.Droid.Resource.Color.browser_actions_text_color; - global::Xamarin.Essentials.Resource.Color.browser_actions_title_color = global::EFGetStarted.Droid.Resource.Color.browser_actions_title_color; - global::Xamarin.Essentials.Resource.Color.notification_action_color_filter = global::EFGetStarted.Droid.Resource.Color.notification_action_color_filter; - global::Xamarin.Essentials.Resource.Color.notification_icon_bg_color = global::EFGetStarted.Droid.Resource.Color.notification_icon_bg_color; - global::Xamarin.Essentials.Resource.Color.ripple_material_light = global::EFGetStarted.Droid.Resource.Color.ripple_material_light; - global::Xamarin.Essentials.Resource.Color.secondary_text_default_material_light = global::EFGetStarted.Droid.Resource.Color.secondary_text_default_material_light; - global::Xamarin.Essentials.Resource.Dimension.browser_actions_context_menu_max_width = global::EFGetStarted.Droid.Resource.Dimension.browser_actions_context_menu_max_width; - global::Xamarin.Essentials.Resource.Dimension.browser_actions_context_menu_min_padding = global::EFGetStarted.Droid.Resource.Dimension.browser_actions_context_menu_min_padding; - global::Xamarin.Essentials.Resource.Dimension.compat_button_inset_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_inset_horizontal_material; - global::Xamarin.Essentials.Resource.Dimension.compat_button_inset_vertical_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_inset_vertical_material; - global::Xamarin.Essentials.Resource.Dimension.compat_button_padding_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_padding_horizontal_material; - global::Xamarin.Essentials.Resource.Dimension.compat_button_padding_vertical_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_padding_vertical_material; - global::Xamarin.Essentials.Resource.Dimension.compat_control_corner_material = global::EFGetStarted.Droid.Resource.Dimension.compat_control_corner_material; - global::Xamarin.Essentials.Resource.Dimension.compat_notification_large_icon_max_height = global::EFGetStarted.Droid.Resource.Dimension.compat_notification_large_icon_max_height; - global::Xamarin.Essentials.Resource.Dimension.compat_notification_large_icon_max_width = global::EFGetStarted.Droid.Resource.Dimension.compat_notification_large_icon_max_width; - global::Xamarin.Essentials.Resource.Dimension.notification_action_icon_size = global::EFGetStarted.Droid.Resource.Dimension.notification_action_icon_size; - global::Xamarin.Essentials.Resource.Dimension.notification_action_text_size = global::EFGetStarted.Droid.Resource.Dimension.notification_action_text_size; - global::Xamarin.Essentials.Resource.Dimension.notification_big_circle_margin = global::EFGetStarted.Droid.Resource.Dimension.notification_big_circle_margin; - global::Xamarin.Essentials.Resource.Dimension.notification_content_margin_start = global::EFGetStarted.Droid.Resource.Dimension.notification_content_margin_start; - global::Xamarin.Essentials.Resource.Dimension.notification_large_icon_height = global::EFGetStarted.Droid.Resource.Dimension.notification_large_icon_height; - global::Xamarin.Essentials.Resource.Dimension.notification_large_icon_width = global::EFGetStarted.Droid.Resource.Dimension.notification_large_icon_width; - global::Xamarin.Essentials.Resource.Dimension.notification_main_column_padding_top = global::EFGetStarted.Droid.Resource.Dimension.notification_main_column_padding_top; - global::Xamarin.Essentials.Resource.Dimension.notification_media_narrow_margin = global::EFGetStarted.Droid.Resource.Dimension.notification_media_narrow_margin; - global::Xamarin.Essentials.Resource.Dimension.notification_right_icon_size = global::EFGetStarted.Droid.Resource.Dimension.notification_right_icon_size; - global::Xamarin.Essentials.Resource.Dimension.notification_right_side_padding_top = global::EFGetStarted.Droid.Resource.Dimension.notification_right_side_padding_top; - global::Xamarin.Essentials.Resource.Dimension.notification_small_icon_background_padding = global::EFGetStarted.Droid.Resource.Dimension.notification_small_icon_background_padding; - global::Xamarin.Essentials.Resource.Dimension.notification_small_icon_size_as_large = global::EFGetStarted.Droid.Resource.Dimension.notification_small_icon_size_as_large; - global::Xamarin.Essentials.Resource.Dimension.notification_subtext_size = global::EFGetStarted.Droid.Resource.Dimension.notification_subtext_size; - global::Xamarin.Essentials.Resource.Dimension.notification_top_pad = global::EFGetStarted.Droid.Resource.Dimension.notification_top_pad; - global::Xamarin.Essentials.Resource.Dimension.notification_top_pad_large_text = global::EFGetStarted.Droid.Resource.Dimension.notification_top_pad_large_text; - global::Xamarin.Essentials.Resource.Drawable.notification_action_background = global::EFGetStarted.Droid.Resource.Drawable.notification_action_background; - global::Xamarin.Essentials.Resource.Drawable.notification_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_bg; - global::Xamarin.Essentials.Resource.Drawable.notification_bg_low = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_low; - global::Xamarin.Essentials.Resource.Drawable.notification_bg_low_normal = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_low_normal; - global::Xamarin.Essentials.Resource.Drawable.notification_bg_low_pressed = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_low_pressed; - global::Xamarin.Essentials.Resource.Drawable.notification_bg_normal = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_normal; - global::Xamarin.Essentials.Resource.Drawable.notification_bg_normal_pressed = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_normal_pressed; - global::Xamarin.Essentials.Resource.Drawable.notification_icon_background = global::EFGetStarted.Droid.Resource.Drawable.notification_icon_background; - global::Xamarin.Essentials.Resource.Drawable.notification_template_icon_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_template_icon_bg; - global::Xamarin.Essentials.Resource.Drawable.notification_template_icon_low_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_template_icon_low_bg; - global::Xamarin.Essentials.Resource.Drawable.notification_tile_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_tile_bg; - global::Xamarin.Essentials.Resource.Drawable.notify_panel_notification_icon_bg = global::EFGetStarted.Droid.Resource.Drawable.notify_panel_notification_icon_bg; - global::Xamarin.Essentials.Resource.Id.actions = global::EFGetStarted.Droid.Resource.Id.actions; - global::Xamarin.Essentials.Resource.Id.action_container = global::EFGetStarted.Droid.Resource.Id.action_container; - global::Xamarin.Essentials.Resource.Id.action_divider = global::EFGetStarted.Droid.Resource.Id.action_divider; - global::Xamarin.Essentials.Resource.Id.action_image = global::EFGetStarted.Droid.Resource.Id.action_image; - global::Xamarin.Essentials.Resource.Id.action_text = global::EFGetStarted.Droid.Resource.Id.action_text; - global::Xamarin.Essentials.Resource.Id.all = global::EFGetStarted.Droid.Resource.Id.all; - global::Xamarin.Essentials.Resource.Id.async = global::EFGetStarted.Droid.Resource.Id.async; - global::Xamarin.Essentials.Resource.Id.blocking = global::EFGetStarted.Droid.Resource.Id.blocking; - global::Xamarin.Essentials.Resource.Id.bottom = global::EFGetStarted.Droid.Resource.Id.bottom; - global::Xamarin.Essentials.Resource.Id.browser_actions_header_text = global::EFGetStarted.Droid.Resource.Id.browser_actions_header_text; - global::Xamarin.Essentials.Resource.Id.browser_actions_menu_items = global::EFGetStarted.Droid.Resource.Id.browser_actions_menu_items; - global::Xamarin.Essentials.Resource.Id.browser_actions_menu_item_icon = global::EFGetStarted.Droid.Resource.Id.browser_actions_menu_item_icon; - global::Xamarin.Essentials.Resource.Id.browser_actions_menu_item_text = global::EFGetStarted.Droid.Resource.Id.browser_actions_menu_item_text; - global::Xamarin.Essentials.Resource.Id.browser_actions_menu_view = global::EFGetStarted.Droid.Resource.Id.browser_actions_menu_view; - global::Xamarin.Essentials.Resource.Id.center = global::EFGetStarted.Droid.Resource.Id.center; - global::Xamarin.Essentials.Resource.Id.center_horizontal = global::EFGetStarted.Droid.Resource.Id.center_horizontal; - global::Xamarin.Essentials.Resource.Id.center_vertical = global::EFGetStarted.Droid.Resource.Id.center_vertical; - global::Xamarin.Essentials.Resource.Id.chronometer = global::EFGetStarted.Droid.Resource.Id.chronometer; - global::Xamarin.Essentials.Resource.Id.clip_horizontal = global::EFGetStarted.Droid.Resource.Id.clip_horizontal; - global::Xamarin.Essentials.Resource.Id.clip_vertical = global::EFGetStarted.Droid.Resource.Id.clip_vertical; - global::Xamarin.Essentials.Resource.Id.end = global::EFGetStarted.Droid.Resource.Id.end; - global::Xamarin.Essentials.Resource.Id.fill = global::EFGetStarted.Droid.Resource.Id.fill; - global::Xamarin.Essentials.Resource.Id.fill_horizontal = global::EFGetStarted.Droid.Resource.Id.fill_horizontal; - global::Xamarin.Essentials.Resource.Id.fill_vertical = global::EFGetStarted.Droid.Resource.Id.fill_vertical; - global::Xamarin.Essentials.Resource.Id.forever = global::EFGetStarted.Droid.Resource.Id.forever; - global::Xamarin.Essentials.Resource.Id.icon = global::EFGetStarted.Droid.Resource.Id.icon; - global::Xamarin.Essentials.Resource.Id.icon_group = global::EFGetStarted.Droid.Resource.Id.icon_group; - global::Xamarin.Essentials.Resource.Id.info = global::EFGetStarted.Droid.Resource.Id.info; - global::Xamarin.Essentials.Resource.Id.italic = global::EFGetStarted.Droid.Resource.Id.italic; - global::Xamarin.Essentials.Resource.Id.left = global::EFGetStarted.Droid.Resource.Id.left; - global::Xamarin.Essentials.Resource.Id.line1 = global::EFGetStarted.Droid.Resource.Id.line1; - global::Xamarin.Essentials.Resource.Id.line3 = global::EFGetStarted.Droid.Resource.Id.line3; - global::Xamarin.Essentials.Resource.Id.none = global::EFGetStarted.Droid.Resource.Id.none; - global::Xamarin.Essentials.Resource.Id.normal = global::EFGetStarted.Droid.Resource.Id.normal; - global::Xamarin.Essentials.Resource.Id.notification_background = global::EFGetStarted.Droid.Resource.Id.notification_background; - global::Xamarin.Essentials.Resource.Id.notification_main_column = global::EFGetStarted.Droid.Resource.Id.notification_main_column; - global::Xamarin.Essentials.Resource.Id.notification_main_column_container = global::EFGetStarted.Droid.Resource.Id.notification_main_column_container; - global::Xamarin.Essentials.Resource.Id.right = global::EFGetStarted.Droid.Resource.Id.right; - global::Xamarin.Essentials.Resource.Id.right_icon = global::EFGetStarted.Droid.Resource.Id.right_icon; - global::Xamarin.Essentials.Resource.Id.right_side = global::EFGetStarted.Droid.Resource.Id.right_side; - global::Xamarin.Essentials.Resource.Id.start = global::EFGetStarted.Droid.Resource.Id.start; - global::Xamarin.Essentials.Resource.Id.tag_transition_group = global::EFGetStarted.Droid.Resource.Id.tag_transition_group; - global::Xamarin.Essentials.Resource.Id.tag_unhandled_key_event_manager = global::EFGetStarted.Droid.Resource.Id.tag_unhandled_key_event_manager; - global::Xamarin.Essentials.Resource.Id.tag_unhandled_key_listeners = global::EFGetStarted.Droid.Resource.Id.tag_unhandled_key_listeners; - global::Xamarin.Essentials.Resource.Id.text = global::EFGetStarted.Droid.Resource.Id.text; - global::Xamarin.Essentials.Resource.Id.text2 = global::EFGetStarted.Droid.Resource.Id.text2; - global::Xamarin.Essentials.Resource.Id.time = global::EFGetStarted.Droid.Resource.Id.time; - global::Xamarin.Essentials.Resource.Id.title = global::EFGetStarted.Droid.Resource.Id.title; - global::Xamarin.Essentials.Resource.Id.top = global::EFGetStarted.Droid.Resource.Id.top; - global::Xamarin.Essentials.Resource.Integer.status_bar_notification_info_maxnum = global::EFGetStarted.Droid.Resource.Integer.status_bar_notification_info_maxnum; - global::Xamarin.Essentials.Resource.Layout.browser_actions_context_menu_page = global::EFGetStarted.Droid.Resource.Layout.browser_actions_context_menu_page; - global::Xamarin.Essentials.Resource.Layout.browser_actions_context_menu_row = global::EFGetStarted.Droid.Resource.Layout.browser_actions_context_menu_row; - global::Xamarin.Essentials.Resource.Layout.notification_action = global::EFGetStarted.Droid.Resource.Layout.notification_action; - global::Xamarin.Essentials.Resource.Layout.notification_action_tombstone = global::EFGetStarted.Droid.Resource.Layout.notification_action_tombstone; - global::Xamarin.Essentials.Resource.Layout.notification_template_custom_big = global::EFGetStarted.Droid.Resource.Layout.notification_template_custom_big; - global::Xamarin.Essentials.Resource.Layout.notification_template_icon_group = global::EFGetStarted.Droid.Resource.Layout.notification_template_icon_group; - global::Xamarin.Essentials.Resource.Layout.notification_template_part_chronometer = global::EFGetStarted.Droid.Resource.Layout.notification_template_part_chronometer; - global::Xamarin.Essentials.Resource.Layout.notification_template_part_time = global::EFGetStarted.Droid.Resource.Layout.notification_template_part_time; - global::Xamarin.Essentials.Resource.String.status_bar_notification_info_overflow = global::EFGetStarted.Droid.Resource.String.status_bar_notification_info_overflow; - global::Xamarin.Essentials.Resource.Style.TextAppearance_Compat_Notification = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification; - global::Xamarin.Essentials.Resource.Style.TextAppearance_Compat_Notification_Info = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Info; - global::Xamarin.Essentials.Resource.Style.TextAppearance_Compat_Notification_Line2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2; - global::Xamarin.Essentials.Resource.Style.TextAppearance_Compat_Notification_Time = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Time; - global::Xamarin.Essentials.Resource.Style.TextAppearance_Compat_Notification_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Title; - global::Xamarin.Essentials.Resource.Style.Widget_Compat_NotificationActionContainer = global::EFGetStarted.Droid.Resource.Style.Widget_Compat_NotificationActionContainer; - global::Xamarin.Essentials.Resource.Style.Widget_Compat_NotificationActionText = global::EFGetStarted.Droid.Resource.Style.Widget_Compat_NotificationActionText; - global::Xamarin.Essentials.Resource.Style.Widget_Support_CoordinatorLayout = global::EFGetStarted.Droid.Resource.Style.Widget_Support_CoordinatorLayout; - global::Xamarin.Essentials.Resource.Styleable.ColorStateListItem = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem; - global::Xamarin.Essentials.Resource.Styleable.ColorStateListItem_alpha = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem_alpha; - global::Xamarin.Essentials.Resource.Styleable.ColorStateListItem_android_alpha = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem_android_alpha; - global::Xamarin.Essentials.Resource.Styleable.ColorStateListItem_android_color = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem_android_color; - global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout; - global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_keylines = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_keylines; - global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout; - global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity; - global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor; - global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity; - global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior; - global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges; - global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge; - global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline; - global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_statusBarBackground = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_statusBarBackground; - global::Xamarin.Essentials.Resource.Styleable.FontFamily = global::EFGetStarted.Droid.Resource.Styleable.FontFamily; - global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont; - global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_android_font = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_font; - global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_android_fontStyle = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_fontStyle; - global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_android_fontVariationSettings = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_fontVariationSettings; - global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_android_fontWeight = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_fontWeight; - global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_android_ttcIndex = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_ttcIndex; - global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_font = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_font; - global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_fontStyle = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_fontStyle; - global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_fontVariationSettings = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_fontVariationSettings; - global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_fontWeight = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_fontWeight; - global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_ttcIndex = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_ttcIndex; - global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderAuthority = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderAuthority; - global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderCerts = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderCerts; - global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderFetchStrategy = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderFetchStrategy; - global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderFetchTimeout = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderFetchTimeout; - global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderPackage = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderPackage; - global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderQuery = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderQuery; - global::Xamarin.Essentials.Resource.Styleable.GradientColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor; - global::Xamarin.Essentials.Resource.Styleable.GradientColorItem = global::EFGetStarted.Droid.Resource.Styleable.GradientColorItem; - global::Xamarin.Essentials.Resource.Styleable.GradientColorItem_android_color = global::EFGetStarted.Droid.Resource.Styleable.GradientColorItem_android_color; - global::Xamarin.Essentials.Resource.Styleable.GradientColorItem_android_offset = global::EFGetStarted.Droid.Resource.Styleable.GradientColorItem_android_offset; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_centerColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_centerColor; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_centerX = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_centerX; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_centerY = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_centerY; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_endColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_endColor; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_endX = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_endX; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_endY = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_endY; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_gradientRadius = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_gradientRadius; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_startColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_startColor; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_startX = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_startX; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_startY = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_startY; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_tileMode = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_tileMode; - global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_type = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_type; - global::Xamarin.Essentials.Resource.Xml.xamarin_essentials_fileprovider_file_paths = global::EFGetStarted.Droid.Resource.Xml.xamarin_essentials_fileprovider_file_paths; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_fade_in = global::EFGetStarted.Droid.Resource.Animation.abc_fade_in; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_fade_out = global::EFGetStarted.Droid.Resource.Animation.abc_fade_out; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_grow_fade_in_from_bottom = global::EFGetStarted.Droid.Resource.Animation.abc_grow_fade_in_from_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_popup_enter = global::EFGetStarted.Droid.Resource.Animation.abc_popup_enter; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_popup_exit = global::EFGetStarted.Droid.Resource.Animation.abc_popup_exit; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_shrink_fade_out_from_bottom = global::EFGetStarted.Droid.Resource.Animation.abc_shrink_fade_out_from_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_in_bottom = global::EFGetStarted.Droid.Resource.Animation.abc_slide_in_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_in_top = global::EFGetStarted.Droid.Resource.Animation.abc_slide_in_top; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_out_bottom = global::EFGetStarted.Droid.Resource.Animation.abc_slide_out_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_out_top = global::EFGetStarted.Droid.Resource.Animation.abc_slide_out_top; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_tooltip_enter = global::EFGetStarted.Droid.Resource.Animation.abc_tooltip_enter; - global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_tooltip_exit = global::EFGetStarted.Droid.Resource.Animation.abc_tooltip_exit; - global::Xamarin.Forms.Platform.Android.Resource.Animation.design_bottom_sheet_slide_in = global::EFGetStarted.Droid.Resource.Animation.design_bottom_sheet_slide_in; - global::Xamarin.Forms.Platform.Android.Resource.Animation.design_bottom_sheet_slide_out = global::EFGetStarted.Droid.Resource.Animation.design_bottom_sheet_slide_out; - global::Xamarin.Forms.Platform.Android.Resource.Animation.design_snackbar_in = global::EFGetStarted.Droid.Resource.Animation.design_snackbar_in; - global::Xamarin.Forms.Platform.Android.Resource.Animation.design_snackbar_out = global::EFGetStarted.Droid.Resource.Animation.design_snackbar_out; - global::Xamarin.Forms.Platform.Android.Resource.Animation.EnterFromLeft = global::EFGetStarted.Droid.Resource.Animation.EnterFromLeft; - global::Xamarin.Forms.Platform.Android.Resource.Animation.EnterFromRight = global::EFGetStarted.Droid.Resource.Animation.EnterFromRight; - global::Xamarin.Forms.Platform.Android.Resource.Animation.ExitToLeft = global::EFGetStarted.Droid.Resource.Animation.ExitToLeft; - global::Xamarin.Forms.Platform.Android.Resource.Animation.ExitToRight = global::EFGetStarted.Droid.Resource.Animation.ExitToRight; - global::Xamarin.Forms.Platform.Android.Resource.Animator.design_appbar_state_list_animator = global::EFGetStarted.Droid.Resource.Animator.design_appbar_state_list_animator; - global::Xamarin.Forms.Platform.Android.Resource.Animator.design_fab_hide_motion_spec = global::EFGetStarted.Droid.Resource.Animator.design_fab_hide_motion_spec; - global::Xamarin.Forms.Platform.Android.Resource.Animator.design_fab_show_motion_spec = global::EFGetStarted.Droid.Resource.Animator.design_fab_show_motion_spec; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_btn_state_list_anim = global::EFGetStarted.Droid.Resource.Animator.mtrl_btn_state_list_anim; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_btn_unelevated_state_list_anim = global::EFGetStarted.Droid.Resource.Animator.mtrl_btn_unelevated_state_list_anim; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_chip_state_list_anim = global::EFGetStarted.Droid.Resource.Animator.mtrl_chip_state_list_anim; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_hide_motion_spec = global::EFGetStarted.Droid.Resource.Animator.mtrl_fab_hide_motion_spec; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_show_motion_spec = global::EFGetStarted.Droid.Resource.Animator.mtrl_fab_show_motion_spec; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec = global::EFGetStarted.Droid.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec; - global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec = global::EFGetStarted.Droid.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarDivider = global::EFGetStarted.Droid.Resource.Attribute.actionBarDivider; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarItemBackground = global::EFGetStarted.Droid.Resource.Attribute.actionBarItemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarPopupTheme = global::EFGetStarted.Droid.Resource.Attribute.actionBarPopupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarSize = global::EFGetStarted.Droid.Resource.Attribute.actionBarSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarSplitStyle = global::EFGetStarted.Droid.Resource.Attribute.actionBarSplitStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarStyle = global::EFGetStarted.Droid.Resource.Attribute.actionBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTabBarStyle = global::EFGetStarted.Droid.Resource.Attribute.actionBarTabBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTabStyle = global::EFGetStarted.Droid.Resource.Attribute.actionBarTabStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTabTextStyle = global::EFGetStarted.Droid.Resource.Attribute.actionBarTabTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTheme = global::EFGetStarted.Droid.Resource.Attribute.actionBarTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarWidgetTheme = global::EFGetStarted.Droid.Resource.Attribute.actionBarWidgetTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.actionButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionDropDownStyle = global::EFGetStarted.Droid.Resource.Attribute.actionDropDownStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionLayout = global::EFGetStarted.Droid.Resource.Attribute.actionLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionMenuTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.actionMenuTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionMenuTextColor = global::EFGetStarted.Droid.Resource.Attribute.actionMenuTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeBackground = global::EFGetStarted.Droid.Resource.Attribute.actionModeBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCloseButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.actionModeCloseButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCloseDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeCloseDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCopyDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeCopyDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCutDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeCutDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeFindDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeFindDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModePasteDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModePasteDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModePopupWindowStyle = global::EFGetStarted.Droid.Resource.Attribute.actionModePopupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeSelectAllDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeSelectAllDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeShareDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeShareDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeSplitBackground = global::EFGetStarted.Droid.Resource.Attribute.actionModeSplitBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeStyle = global::EFGetStarted.Droid.Resource.Attribute.actionModeStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeWebSearchDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeWebSearchDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionOverflowButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.actionOverflowButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionOverflowMenuStyle = global::EFGetStarted.Droid.Resource.Attribute.actionOverflowMenuStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionProviderClass = global::EFGetStarted.Droid.Resource.Attribute.actionProviderClass; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionViewClass = global::EFGetStarted.Droid.Resource.Attribute.actionViewClass; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.activityChooserViewStyle = global::EFGetStarted.Droid.Resource.Attribute.activityChooserViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogButtonGroupStyle = global::EFGetStarted.Droid.Resource.Attribute.alertDialogButtonGroupStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogCenterButtons = global::EFGetStarted.Droid.Resource.Attribute.alertDialogCenterButtons; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogStyle = global::EFGetStarted.Droid.Resource.Attribute.alertDialogStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogTheme = global::EFGetStarted.Droid.Resource.Attribute.alertDialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.allowStacking = global::EFGetStarted.Droid.Resource.Attribute.allowStacking; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alpha = global::EFGetStarted.Droid.Resource.Attribute.alpha; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.alphabeticModifiers = global::EFGetStarted.Droid.Resource.Attribute.alphabeticModifiers; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.arrowHeadLength = global::EFGetStarted.Droid.Resource.Attribute.arrowHeadLength; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.arrowShaftLength = global::EFGetStarted.Droid.Resource.Attribute.arrowShaftLength; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoCompleteTextViewStyle = global::EFGetStarted.Droid.Resource.Attribute.autoCompleteTextViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeMaxTextSize = global::EFGetStarted.Droid.Resource.Attribute.autoSizeMaxTextSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeMinTextSize = global::EFGetStarted.Droid.Resource.Attribute.autoSizeMinTextSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizePresetSizes = global::EFGetStarted.Droid.Resource.Attribute.autoSizePresetSizes; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeStepGranularity = global::EFGetStarted.Droid.Resource.Attribute.autoSizeStepGranularity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeTextType = global::EFGetStarted.Droid.Resource.Attribute.autoSizeTextType; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.background = global::EFGetStarted.Droid.Resource.Attribute.background; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundSplit = global::EFGetStarted.Droid.Resource.Attribute.backgroundSplit; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundStacked = global::EFGetStarted.Droid.Resource.Attribute.backgroundStacked; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundTint = global::EFGetStarted.Droid.Resource.Attribute.backgroundTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundTintMode = global::EFGetStarted.Droid.Resource.Attribute.backgroundTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.barLength = global::EFGetStarted.Droid.Resource.Attribute.barLength; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_autoHide = global::EFGetStarted.Droid.Resource.Attribute.behavior_autoHide; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_fitToContents = global::EFGetStarted.Droid.Resource.Attribute.behavior_fitToContents; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_hideable = global::EFGetStarted.Droid.Resource.Attribute.behavior_hideable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_overlapTop = global::EFGetStarted.Droid.Resource.Attribute.behavior_overlapTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_peekHeight = global::EFGetStarted.Droid.Resource.Attribute.behavior_peekHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_skipCollapsed = global::EFGetStarted.Droid.Resource.Attribute.behavior_skipCollapsed; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.borderlessButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.borderlessButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.borderWidth = global::EFGetStarted.Droid.Resource.Attribute.borderWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomAppBarStyle = global::EFGetStarted.Droid.Resource.Attribute.bottomAppBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomNavigationStyle = global::EFGetStarted.Droid.Resource.Attribute.bottomNavigationStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomSheetDialogTheme = global::EFGetStarted.Droid.Resource.Attribute.bottomSheetDialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomSheetStyle = global::EFGetStarted.Droid.Resource.Attribute.bottomSheetStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxBackgroundColor = global::EFGetStarted.Droid.Resource.Attribute.boxBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxBackgroundMode = global::EFGetStarted.Droid.Resource.Attribute.boxBackgroundMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCollapsedPaddingTop = global::EFGetStarted.Droid.Resource.Attribute.boxCollapsedPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusBottomEnd = global::EFGetStarted.Droid.Resource.Attribute.boxCornerRadiusBottomEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusBottomStart = global::EFGetStarted.Droid.Resource.Attribute.boxCornerRadiusBottomStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusTopEnd = global::EFGetStarted.Droid.Resource.Attribute.boxCornerRadiusTopEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusTopStart = global::EFGetStarted.Droid.Resource.Attribute.boxCornerRadiusTopStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxStrokeColor = global::EFGetStarted.Droid.Resource.Attribute.boxStrokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxStrokeWidth = global::EFGetStarted.Droid.Resource.Attribute.boxStrokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonBarButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarNegativeButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonBarNegativeButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarNeutralButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonBarNeutralButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarPositiveButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonBarPositiveButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonGravity = global::EFGetStarted.Droid.Resource.Attribute.buttonGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonIconDimen = global::EFGetStarted.Droid.Resource.Attribute.buttonIconDimen; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonPanelSideLayout = global::EFGetStarted.Droid.Resource.Attribute.buttonPanelSideLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonStyleSmall = global::EFGetStarted.Droid.Resource.Attribute.buttonStyleSmall; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonTint = global::EFGetStarted.Droid.Resource.Attribute.buttonTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonTintMode = global::EFGetStarted.Droid.Resource.Attribute.buttonTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardBackgroundColor = global::EFGetStarted.Droid.Resource.Attribute.cardBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardCornerRadius = global::EFGetStarted.Droid.Resource.Attribute.cardCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardElevation = global::EFGetStarted.Droid.Resource.Attribute.cardElevation; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardMaxElevation = global::EFGetStarted.Droid.Resource.Attribute.cardMaxElevation; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardPreventCornerOverlap = global::EFGetStarted.Droid.Resource.Attribute.cardPreventCornerOverlap; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardUseCompatPadding = global::EFGetStarted.Droid.Resource.Attribute.cardUseCompatPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardViewStyle = global::EFGetStarted.Droid.Resource.Attribute.cardViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkboxStyle = global::EFGetStarted.Droid.Resource.Attribute.checkboxStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedChip = global::EFGetStarted.Droid.Resource.Attribute.checkedChip; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedIcon = global::EFGetStarted.Droid.Resource.Attribute.checkedIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedIconEnabled = global::EFGetStarted.Droid.Resource.Attribute.checkedIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedIconVisible = global::EFGetStarted.Droid.Resource.Attribute.checkedIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedTextViewStyle = global::EFGetStarted.Droid.Resource.Attribute.checkedTextViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipBackgroundColor = global::EFGetStarted.Droid.Resource.Attribute.chipBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipCornerRadius = global::EFGetStarted.Droid.Resource.Attribute.chipCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipEndPadding = global::EFGetStarted.Droid.Resource.Attribute.chipEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipGroupStyle = global::EFGetStarted.Droid.Resource.Attribute.chipGroupStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIcon = global::EFGetStarted.Droid.Resource.Attribute.chipIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconEnabled = global::EFGetStarted.Droid.Resource.Attribute.chipIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconSize = global::EFGetStarted.Droid.Resource.Attribute.chipIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconTint = global::EFGetStarted.Droid.Resource.Attribute.chipIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconVisible = global::EFGetStarted.Droid.Resource.Attribute.chipIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipMinHeight = global::EFGetStarted.Droid.Resource.Attribute.chipMinHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipSpacing = global::EFGetStarted.Droid.Resource.Attribute.chipSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipSpacingHorizontal = global::EFGetStarted.Droid.Resource.Attribute.chipSpacingHorizontal; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipSpacingVertical = global::EFGetStarted.Droid.Resource.Attribute.chipSpacingVertical; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStandaloneStyle = global::EFGetStarted.Droid.Resource.Attribute.chipStandaloneStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStartPadding = global::EFGetStarted.Droid.Resource.Attribute.chipStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStrokeColor = global::EFGetStarted.Droid.Resource.Attribute.chipStrokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStrokeWidth = global::EFGetStarted.Droid.Resource.Attribute.chipStrokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStyle = global::EFGetStarted.Droid.Resource.Attribute.chipStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIcon = global::EFGetStarted.Droid.Resource.Attribute.closeIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconEnabled = global::EFGetStarted.Droid.Resource.Attribute.closeIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconEndPadding = global::EFGetStarted.Droid.Resource.Attribute.closeIconEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconSize = global::EFGetStarted.Droid.Resource.Attribute.closeIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconStartPadding = global::EFGetStarted.Droid.Resource.Attribute.closeIconStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconTint = global::EFGetStarted.Droid.Resource.Attribute.closeIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconVisible = global::EFGetStarted.Droid.Resource.Attribute.closeIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeItemLayout = global::EFGetStarted.Droid.Resource.Attribute.closeItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapseContentDescription = global::EFGetStarted.Droid.Resource.Attribute.collapseContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapsedTitleGravity = global::EFGetStarted.Droid.Resource.Attribute.collapsedTitleGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapsedTitleTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.collapsedTitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapseIcon = global::EFGetStarted.Droid.Resource.Attribute.collapseIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.collectionViewStyle = global::EFGetStarted.Droid.Resource.Attribute.collectionViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.color = global::EFGetStarted.Droid.Resource.Attribute.color; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorAccent = global::EFGetStarted.Droid.Resource.Attribute.colorAccent; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorBackgroundFloating = global::EFGetStarted.Droid.Resource.Attribute.colorBackgroundFloating; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorButtonNormal = global::EFGetStarted.Droid.Resource.Attribute.colorButtonNormal; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorControlActivated = global::EFGetStarted.Droid.Resource.Attribute.colorControlActivated; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorControlHighlight = global::EFGetStarted.Droid.Resource.Attribute.colorControlHighlight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorControlNormal = global::EFGetStarted.Droid.Resource.Attribute.colorControlNormal; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorError = global::EFGetStarted.Droid.Resource.Attribute.colorError; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorPrimary = global::EFGetStarted.Droid.Resource.Attribute.colorPrimary; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorPrimaryDark = global::EFGetStarted.Droid.Resource.Attribute.colorPrimaryDark; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorSecondary = global::EFGetStarted.Droid.Resource.Attribute.colorSecondary; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorSwitchThumbNormal = global::EFGetStarted.Droid.Resource.Attribute.colorSwitchThumbNormal; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.commitIcon = global::EFGetStarted.Droid.Resource.Attribute.commitIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentDescription = global::EFGetStarted.Droid.Resource.Attribute.contentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetEnd = global::EFGetStarted.Droid.Resource.Attribute.contentInsetEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetEndWithActions = global::EFGetStarted.Droid.Resource.Attribute.contentInsetEndWithActions; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetLeft = global::EFGetStarted.Droid.Resource.Attribute.contentInsetLeft; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetRight = global::EFGetStarted.Droid.Resource.Attribute.contentInsetRight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetStart = global::EFGetStarted.Droid.Resource.Attribute.contentInsetStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetStartWithNavigation = global::EFGetStarted.Droid.Resource.Attribute.contentInsetStartWithNavigation; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPadding = global::EFGetStarted.Droid.Resource.Attribute.contentPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingBottom = global::EFGetStarted.Droid.Resource.Attribute.contentPaddingBottom; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingLeft = global::EFGetStarted.Droid.Resource.Attribute.contentPaddingLeft; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingRight = global::EFGetStarted.Droid.Resource.Attribute.contentPaddingRight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingTop = global::EFGetStarted.Droid.Resource.Attribute.contentPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentScrim = global::EFGetStarted.Droid.Resource.Attribute.contentScrim; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.controlBackground = global::EFGetStarted.Droid.Resource.Attribute.controlBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.coordinatorLayoutStyle = global::EFGetStarted.Droid.Resource.Attribute.coordinatorLayoutStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.cornerRadius = global::EFGetStarted.Droid.Resource.Attribute.cornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterEnabled = global::EFGetStarted.Droid.Resource.Attribute.counterEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterMaxLength = global::EFGetStarted.Droid.Resource.Attribute.counterMaxLength; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterOverflowTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.counterOverflowTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.counterTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.customNavigationLayout = global::EFGetStarted.Droid.Resource.Attribute.customNavigationLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.defaultQueryHint = global::EFGetStarted.Droid.Resource.Attribute.defaultQueryHint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dialogCornerRadius = global::EFGetStarted.Droid.Resource.Attribute.dialogCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dialogPreferredPadding = global::EFGetStarted.Droid.Resource.Attribute.dialogPreferredPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dialogTheme = global::EFGetStarted.Droid.Resource.Attribute.dialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.displayOptions = global::EFGetStarted.Droid.Resource.Attribute.displayOptions; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.divider = global::EFGetStarted.Droid.Resource.Attribute.divider; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dividerHorizontal = global::EFGetStarted.Droid.Resource.Attribute.dividerHorizontal; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dividerPadding = global::EFGetStarted.Droid.Resource.Attribute.dividerPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dividerVertical = global::EFGetStarted.Droid.Resource.Attribute.dividerVertical; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.drawableSize = global::EFGetStarted.Droid.Resource.Attribute.drawableSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.drawerArrowStyle = global::EFGetStarted.Droid.Resource.Attribute.drawerArrowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dropdownListPreferredItemHeight = global::EFGetStarted.Droid.Resource.Attribute.dropdownListPreferredItemHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.dropDownListViewStyle = global::EFGetStarted.Droid.Resource.Attribute.dropDownListViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.editTextBackground = global::EFGetStarted.Droid.Resource.Attribute.editTextBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.editTextColor = global::EFGetStarted.Droid.Resource.Attribute.editTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.editTextStyle = global::EFGetStarted.Droid.Resource.Attribute.editTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.elevation = global::EFGetStarted.Droid.Resource.Attribute.elevation; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.enforceMaterialTheme = global::EFGetStarted.Droid.Resource.Attribute.enforceMaterialTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.enforceTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.enforceTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.errorEnabled = global::EFGetStarted.Droid.Resource.Attribute.errorEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.errorTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.errorTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandActivityOverflowButtonDrawable = global::EFGetStarted.Droid.Resource.Attribute.expandActivityOverflowButtonDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expanded = global::EFGetStarted.Droid.Resource.Attribute.expanded; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleGravity = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMargin = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginBottom = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleMarginBottom; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginEnd = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleMarginEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginStart = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleMarginStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginTop = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleMarginTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabAlignmentMode = global::EFGetStarted.Droid.Resource.Attribute.fabAlignmentMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCradleMargin = global::EFGetStarted.Droid.Resource.Attribute.fabCradleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCradleRoundedCornerRadius = global::EFGetStarted.Droid.Resource.Attribute.fabCradleRoundedCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCradleVerticalOffset = global::EFGetStarted.Droid.Resource.Attribute.fabCradleVerticalOffset; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCustomSize = global::EFGetStarted.Droid.Resource.Attribute.fabCustomSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabSize = global::EFGetStarted.Droid.Resource.Attribute.fabSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollEnabled = global::EFGetStarted.Droid.Resource.Attribute.fastScrollEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollHorizontalThumbDrawable = global::EFGetStarted.Droid.Resource.Attribute.fastScrollHorizontalThumbDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollHorizontalTrackDrawable = global::EFGetStarted.Droid.Resource.Attribute.fastScrollHorizontalTrackDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollVerticalThumbDrawable = global::EFGetStarted.Droid.Resource.Attribute.fastScrollVerticalThumbDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollVerticalTrackDrawable = global::EFGetStarted.Droid.Resource.Attribute.fastScrollVerticalTrackDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.firstBaselineToTopHeight = global::EFGetStarted.Droid.Resource.Attribute.firstBaselineToTopHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.floatingActionButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.floatingActionButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.font = global::EFGetStarted.Droid.Resource.Attribute.font; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontFamily = global::EFGetStarted.Droid.Resource.Attribute.fontFamily; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderAuthority = global::EFGetStarted.Droid.Resource.Attribute.fontProviderAuthority; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderCerts = global::EFGetStarted.Droid.Resource.Attribute.fontProviderCerts; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderFetchStrategy = global::EFGetStarted.Droid.Resource.Attribute.fontProviderFetchStrategy; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderFetchTimeout = global::EFGetStarted.Droid.Resource.Attribute.fontProviderFetchTimeout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderPackage = global::EFGetStarted.Droid.Resource.Attribute.fontProviderPackage; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderQuery = global::EFGetStarted.Droid.Resource.Attribute.fontProviderQuery; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontStyle = global::EFGetStarted.Droid.Resource.Attribute.fontStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontVariationSettings = global::EFGetStarted.Droid.Resource.Attribute.fontVariationSettings; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontWeight = global::EFGetStarted.Droid.Resource.Attribute.fontWeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.foregroundInsidePadding = global::EFGetStarted.Droid.Resource.Attribute.foregroundInsidePadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.gapBetweenBars = global::EFGetStarted.Droid.Resource.Attribute.gapBetweenBars; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.goIcon = global::EFGetStarted.Droid.Resource.Attribute.goIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.headerLayout = global::EFGetStarted.Droid.Resource.Attribute.headerLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.height = global::EFGetStarted.Droid.Resource.Attribute.height; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.helperText = global::EFGetStarted.Droid.Resource.Attribute.helperText; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.helperTextEnabled = global::EFGetStarted.Droid.Resource.Attribute.helperTextEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.helperTextTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.helperTextTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hideMotionSpec = global::EFGetStarted.Droid.Resource.Attribute.hideMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hideOnContentScroll = global::EFGetStarted.Droid.Resource.Attribute.hideOnContentScroll; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hideOnScroll = global::EFGetStarted.Droid.Resource.Attribute.hideOnScroll; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hintAnimationEnabled = global::EFGetStarted.Droid.Resource.Attribute.hintAnimationEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hintEnabled = global::EFGetStarted.Droid.Resource.Attribute.hintEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hintTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.hintTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.homeAsUpIndicator = global::EFGetStarted.Droid.Resource.Attribute.homeAsUpIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.homeLayout = global::EFGetStarted.Droid.Resource.Attribute.homeLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.hoveredFocusedTranslationZ = global::EFGetStarted.Droid.Resource.Attribute.hoveredFocusedTranslationZ; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.icon = global::EFGetStarted.Droid.Resource.Attribute.icon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconEndPadding = global::EFGetStarted.Droid.Resource.Attribute.iconEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconGravity = global::EFGetStarted.Droid.Resource.Attribute.iconGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconifiedByDefault = global::EFGetStarted.Droid.Resource.Attribute.iconifiedByDefault; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconPadding = global::EFGetStarted.Droid.Resource.Attribute.iconPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconSize = global::EFGetStarted.Droid.Resource.Attribute.iconSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconStartPadding = global::EFGetStarted.Droid.Resource.Attribute.iconStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconTint = global::EFGetStarted.Droid.Resource.Attribute.iconTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconTintMode = global::EFGetStarted.Droid.Resource.Attribute.iconTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.imageButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.imageButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.indeterminateProgressStyle = global::EFGetStarted.Droid.Resource.Attribute.indeterminateProgressStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.initialActivityCount = global::EFGetStarted.Droid.Resource.Attribute.initialActivityCount; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.insetForeground = global::EFGetStarted.Droid.Resource.Attribute.insetForeground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.isLightTheme = global::EFGetStarted.Droid.Resource.Attribute.isLightTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemBackground = global::EFGetStarted.Droid.Resource.Attribute.itemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemHorizontalPadding = global::EFGetStarted.Droid.Resource.Attribute.itemHorizontalPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemHorizontalTranslationEnabled = global::EFGetStarted.Droid.Resource.Attribute.itemHorizontalTranslationEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemIconPadding = global::EFGetStarted.Droid.Resource.Attribute.itemIconPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemIconSize = global::EFGetStarted.Droid.Resource.Attribute.itemIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemIconTint = global::EFGetStarted.Droid.Resource.Attribute.itemIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemPadding = global::EFGetStarted.Droid.Resource.Attribute.itemPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemSpacing = global::EFGetStarted.Droid.Resource.Attribute.itemSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.itemTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextAppearanceActive = global::EFGetStarted.Droid.Resource.Attribute.itemTextAppearanceActive; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextAppearanceInactive = global::EFGetStarted.Droid.Resource.Attribute.itemTextAppearanceInactive; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextColor = global::EFGetStarted.Droid.Resource.Attribute.itemTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.keylines = global::EFGetStarted.Droid.Resource.Attribute.keylines; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.labelVisibilityMode = global::EFGetStarted.Droid.Resource.Attribute.labelVisibilityMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.lastBaselineToBottomHeight = global::EFGetStarted.Droid.Resource.Attribute.lastBaselineToBottomHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout = global::EFGetStarted.Droid.Resource.Attribute.layout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layoutManager = global::EFGetStarted.Droid.Resource.Attribute.layoutManager; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_anchor = global::EFGetStarted.Droid.Resource.Attribute.layout_anchor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_anchorGravity = global::EFGetStarted.Droid.Resource.Attribute.layout_anchorGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_behavior = global::EFGetStarted.Droid.Resource.Attribute.layout_behavior; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_collapseMode = global::EFGetStarted.Droid.Resource.Attribute.layout_collapseMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_collapseParallaxMultiplier = global::EFGetStarted.Droid.Resource.Attribute.layout_collapseParallaxMultiplier; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_dodgeInsetEdges = global::EFGetStarted.Droid.Resource.Attribute.layout_dodgeInsetEdges; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_insetEdge = global::EFGetStarted.Droid.Resource.Attribute.layout_insetEdge; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_keyline = global::EFGetStarted.Droid.Resource.Attribute.layout_keyline; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_scrollFlags = global::EFGetStarted.Droid.Resource.Attribute.layout_scrollFlags; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_scrollInterpolator = global::EFGetStarted.Droid.Resource.Attribute.layout_scrollInterpolator; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.liftOnScroll = global::EFGetStarted.Droid.Resource.Attribute.liftOnScroll; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.lineHeight = global::EFGetStarted.Droid.Resource.Attribute.lineHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.lineSpacing = global::EFGetStarted.Droid.Resource.Attribute.lineSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listChoiceBackgroundIndicator = global::EFGetStarted.Droid.Resource.Attribute.listChoiceBackgroundIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listDividerAlertDialog = global::EFGetStarted.Droid.Resource.Attribute.listDividerAlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listItemLayout = global::EFGetStarted.Droid.Resource.Attribute.listItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listLayout = global::EFGetStarted.Droid.Resource.Attribute.listLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listMenuViewStyle = global::EFGetStarted.Droid.Resource.Attribute.listMenuViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPopupWindowStyle = global::EFGetStarted.Droid.Resource.Attribute.listPopupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemHeight = global::EFGetStarted.Droid.Resource.Attribute.listPreferredItemHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemHeightLarge = global::EFGetStarted.Droid.Resource.Attribute.listPreferredItemHeightLarge; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemHeightSmall = global::EFGetStarted.Droid.Resource.Attribute.listPreferredItemHeightSmall; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemPaddingLeft = global::EFGetStarted.Droid.Resource.Attribute.listPreferredItemPaddingLeft; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemPaddingRight = global::EFGetStarted.Droid.Resource.Attribute.listPreferredItemPaddingRight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.logo = global::EFGetStarted.Droid.Resource.Attribute.logo; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.logoDescription = global::EFGetStarted.Droid.Resource.Attribute.logoDescription; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.materialButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.materialButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.materialCardViewStyle = global::EFGetStarted.Droid.Resource.Attribute.materialCardViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.maxActionInlineWidth = global::EFGetStarted.Droid.Resource.Attribute.maxActionInlineWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.maxButtonHeight = global::EFGetStarted.Droid.Resource.Attribute.maxButtonHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.maxImageSize = global::EFGetStarted.Droid.Resource.Attribute.maxImageSize; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.measureWithLargestChild = global::EFGetStarted.Droid.Resource.Attribute.measureWithLargestChild; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.menu = global::EFGetStarted.Droid.Resource.Attribute.menu; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.multiChoiceItemLayout = global::EFGetStarted.Droid.Resource.Attribute.multiChoiceItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationContentDescription = global::EFGetStarted.Droid.Resource.Attribute.navigationContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationIcon = global::EFGetStarted.Droid.Resource.Attribute.navigationIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationMode = global::EFGetStarted.Droid.Resource.Attribute.navigationMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationViewStyle = global::EFGetStarted.Droid.Resource.Attribute.navigationViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.numericModifiers = global::EFGetStarted.Droid.Resource.Attribute.numericModifiers; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.overlapAnchor = global::EFGetStarted.Droid.Resource.Attribute.overlapAnchor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingBottomNoButtons = global::EFGetStarted.Droid.Resource.Attribute.paddingBottomNoButtons; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingEnd = global::EFGetStarted.Droid.Resource.Attribute.paddingEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingStart = global::EFGetStarted.Droid.Resource.Attribute.paddingStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingTopNoTitle = global::EFGetStarted.Droid.Resource.Attribute.paddingTopNoTitle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.panelBackground = global::EFGetStarted.Droid.Resource.Attribute.panelBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.panelMenuListTheme = global::EFGetStarted.Droid.Resource.Attribute.panelMenuListTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.panelMenuListWidth = global::EFGetStarted.Droid.Resource.Attribute.panelMenuListWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleContentDescription = global::EFGetStarted.Droid.Resource.Attribute.passwordToggleContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleDrawable = global::EFGetStarted.Droid.Resource.Attribute.passwordToggleDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleEnabled = global::EFGetStarted.Droid.Resource.Attribute.passwordToggleEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleTint = global::EFGetStarted.Droid.Resource.Attribute.passwordToggleTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleTintMode = global::EFGetStarted.Droid.Resource.Attribute.passwordToggleTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.popupMenuStyle = global::EFGetStarted.Droid.Resource.Attribute.popupMenuStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.popupTheme = global::EFGetStarted.Droid.Resource.Attribute.popupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.popupWindowStyle = global::EFGetStarted.Droid.Resource.Attribute.popupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.preserveIconSpacing = global::EFGetStarted.Droid.Resource.Attribute.preserveIconSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.pressedTranslationZ = global::EFGetStarted.Droid.Resource.Attribute.pressedTranslationZ; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.progressBarPadding = global::EFGetStarted.Droid.Resource.Attribute.progressBarPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.progressBarStyle = global::EFGetStarted.Droid.Resource.Attribute.progressBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.queryBackground = global::EFGetStarted.Droid.Resource.Attribute.queryBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.queryHint = global::EFGetStarted.Droid.Resource.Attribute.queryHint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.radioButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.radioButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.ratingBarStyle = global::EFGetStarted.Droid.Resource.Attribute.ratingBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.ratingBarStyleIndicator = global::EFGetStarted.Droid.Resource.Attribute.ratingBarStyleIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.ratingBarStyleSmall = global::EFGetStarted.Droid.Resource.Attribute.ratingBarStyleSmall; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.reverseLayout = global::EFGetStarted.Droid.Resource.Attribute.reverseLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.rippleColor = global::EFGetStarted.Droid.Resource.Attribute.rippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.scrimAnimationDuration = global::EFGetStarted.Droid.Resource.Attribute.scrimAnimationDuration; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.scrimBackground = global::EFGetStarted.Droid.Resource.Attribute.scrimBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.scrimVisibleHeightTrigger = global::EFGetStarted.Droid.Resource.Attribute.scrimVisibleHeightTrigger; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.scrollViewStyle = global::EFGetStarted.Droid.Resource.Attribute.scrollViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.searchHintIcon = global::EFGetStarted.Droid.Resource.Attribute.searchHintIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.searchIcon = global::EFGetStarted.Droid.Resource.Attribute.searchIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.searchViewStyle = global::EFGetStarted.Droid.Resource.Attribute.searchViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.seekBarStyle = global::EFGetStarted.Droid.Resource.Attribute.seekBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.selectableItemBackground = global::EFGetStarted.Droid.Resource.Attribute.selectableItemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.selectableItemBackgroundBorderless = global::EFGetStarted.Droid.Resource.Attribute.selectableItemBackgroundBorderless; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.showAsAction = global::EFGetStarted.Droid.Resource.Attribute.showAsAction; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.showDividers = global::EFGetStarted.Droid.Resource.Attribute.showDividers; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.showMotionSpec = global::EFGetStarted.Droid.Resource.Attribute.showMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.showText = global::EFGetStarted.Droid.Resource.Attribute.showText; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.showTitle = global::EFGetStarted.Droid.Resource.Attribute.showTitle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.singleChoiceItemLayout = global::EFGetStarted.Droid.Resource.Attribute.singleChoiceItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.singleLine = global::EFGetStarted.Droid.Resource.Attribute.singleLine; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.singleSelection = global::EFGetStarted.Droid.Resource.Attribute.singleSelection; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.snackbarButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.snackbarButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.snackbarStyle = global::EFGetStarted.Droid.Resource.Attribute.snackbarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.spanCount = global::EFGetStarted.Droid.Resource.Attribute.spanCount; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.spinBars = global::EFGetStarted.Droid.Resource.Attribute.spinBars; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.spinnerDropDownItemStyle = global::EFGetStarted.Droid.Resource.Attribute.spinnerDropDownItemStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.spinnerStyle = global::EFGetStarted.Droid.Resource.Attribute.spinnerStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.splitTrack = global::EFGetStarted.Droid.Resource.Attribute.splitTrack; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.srcCompat = global::EFGetStarted.Droid.Resource.Attribute.srcCompat; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.stackFromEnd = global::EFGetStarted.Droid.Resource.Attribute.stackFromEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_above_anchor = global::EFGetStarted.Droid.Resource.Attribute.state_above_anchor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_collapsed = global::EFGetStarted.Droid.Resource.Attribute.state_collapsed; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_collapsible = global::EFGetStarted.Droid.Resource.Attribute.state_collapsible; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_liftable = global::EFGetStarted.Droid.Resource.Attribute.state_liftable; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_lifted = global::EFGetStarted.Droid.Resource.Attribute.state_lifted; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.statusBarBackground = global::EFGetStarted.Droid.Resource.Attribute.statusBarBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.statusBarScrim = global::EFGetStarted.Droid.Resource.Attribute.statusBarScrim; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.strokeColor = global::EFGetStarted.Droid.Resource.Attribute.strokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.strokeWidth = global::EFGetStarted.Droid.Resource.Attribute.strokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.subMenuArrow = global::EFGetStarted.Droid.Resource.Attribute.subMenuArrow; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.submitBackground = global::EFGetStarted.Droid.Resource.Attribute.submitBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitle = global::EFGetStarted.Droid.Resource.Attribute.subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitleTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.subtitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitleTextColor = global::EFGetStarted.Droid.Resource.Attribute.subtitleTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitleTextStyle = global::EFGetStarted.Droid.Resource.Attribute.subtitleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.suggestionRowLayout = global::EFGetStarted.Droid.Resource.Attribute.suggestionRowLayout; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchMinWidth = global::EFGetStarted.Droid.Resource.Attribute.switchMinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchPadding = global::EFGetStarted.Droid.Resource.Attribute.switchPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchStyle = global::EFGetStarted.Droid.Resource.Attribute.switchStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.switchTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabBackground = global::EFGetStarted.Droid.Resource.Attribute.tabBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabContentStart = global::EFGetStarted.Droid.Resource.Attribute.tabContentStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabGravity = global::EFGetStarted.Droid.Resource.Attribute.tabGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIconTint = global::EFGetStarted.Droid.Resource.Attribute.tabIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIconTintMode = global::EFGetStarted.Droid.Resource.Attribute.tabIconTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicator = global::EFGetStarted.Droid.Resource.Attribute.tabIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorAnimationDuration = global::EFGetStarted.Droid.Resource.Attribute.tabIndicatorAnimationDuration; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorColor = global::EFGetStarted.Droid.Resource.Attribute.tabIndicatorColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorFullWidth = global::EFGetStarted.Droid.Resource.Attribute.tabIndicatorFullWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorGravity = global::EFGetStarted.Droid.Resource.Attribute.tabIndicatorGravity; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorHeight = global::EFGetStarted.Droid.Resource.Attribute.tabIndicatorHeight; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabInlineLabel = global::EFGetStarted.Droid.Resource.Attribute.tabInlineLabel; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabMaxWidth = global::EFGetStarted.Droid.Resource.Attribute.tabMaxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabMinWidth = global::EFGetStarted.Droid.Resource.Attribute.tabMinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabMode = global::EFGetStarted.Droid.Resource.Attribute.tabMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPadding = global::EFGetStarted.Droid.Resource.Attribute.tabPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingBottom = global::EFGetStarted.Droid.Resource.Attribute.tabPaddingBottom; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingEnd = global::EFGetStarted.Droid.Resource.Attribute.tabPaddingEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingStart = global::EFGetStarted.Droid.Resource.Attribute.tabPaddingStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingTop = global::EFGetStarted.Droid.Resource.Attribute.tabPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabRippleColor = global::EFGetStarted.Droid.Resource.Attribute.tabRippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabSelectedTextColor = global::EFGetStarted.Droid.Resource.Attribute.tabSelectedTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabStyle = global::EFGetStarted.Droid.Resource.Attribute.tabStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.tabTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabTextColor = global::EFGetStarted.Droid.Resource.Attribute.tabTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabUnboundedRipple = global::EFGetStarted.Droid.Resource.Attribute.tabUnboundedRipple; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAllCaps = global::EFGetStarted.Droid.Resource.Attribute.textAllCaps; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceBody1 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceBody1; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceBody2 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceBody2; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceButton = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceButton; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceCaption = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceCaption; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline1 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline1; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline2 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline2; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline3 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline3; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline4 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline4; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline5 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline5; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline6 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline6; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceLargePopupMenu = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceLargePopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceListItem = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceListItem; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceListItemSecondary = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceListItemSecondary; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceListItemSmall = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceListItemSmall; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceOverline = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceOverline; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearancePopupMenuHeader = global::EFGetStarted.Droid.Resource.Attribute.textAppearancePopupMenuHeader; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSearchResultSubtitle = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceSearchResultSubtitle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSearchResultTitle = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceSearchResultTitle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSmallPopupMenu = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceSmallPopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSubtitle1 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceSubtitle1; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSubtitle2 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceSubtitle2; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textColorAlertDialogListItem = global::EFGetStarted.Droid.Resource.Attribute.textColorAlertDialogListItem; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textColorSearchUrl = global::EFGetStarted.Droid.Resource.Attribute.textColorSearchUrl; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textEndPadding = global::EFGetStarted.Droid.Resource.Attribute.textEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textInputStyle = global::EFGetStarted.Droid.Resource.Attribute.textInputStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.textStartPadding = global::EFGetStarted.Droid.Resource.Attribute.textStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.theme = global::EFGetStarted.Droid.Resource.Attribute.theme; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.thickness = global::EFGetStarted.Droid.Resource.Attribute.thickness; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.thumbTextPadding = global::EFGetStarted.Droid.Resource.Attribute.thumbTextPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.thumbTint = global::EFGetStarted.Droid.Resource.Attribute.thumbTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.thumbTintMode = global::EFGetStarted.Droid.Resource.Attribute.thumbTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tickMark = global::EFGetStarted.Droid.Resource.Attribute.tickMark; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tickMarkTint = global::EFGetStarted.Droid.Resource.Attribute.tickMarkTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tickMarkTintMode = global::EFGetStarted.Droid.Resource.Attribute.tickMarkTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tint = global::EFGetStarted.Droid.Resource.Attribute.tint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tintMode = global::EFGetStarted.Droid.Resource.Attribute.tintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.title = global::EFGetStarted.Droid.Resource.Attribute.title; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleEnabled = global::EFGetStarted.Droid.Resource.Attribute.titleEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMargin = global::EFGetStarted.Droid.Resource.Attribute.titleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginBottom = global::EFGetStarted.Droid.Resource.Attribute.titleMarginBottom; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginEnd = global::EFGetStarted.Droid.Resource.Attribute.titleMarginEnd; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMargins = global::EFGetStarted.Droid.Resource.Attribute.titleMargins; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginStart = global::EFGetStarted.Droid.Resource.Attribute.titleMarginStart; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginTop = global::EFGetStarted.Droid.Resource.Attribute.titleMarginTop; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.titleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleTextColor = global::EFGetStarted.Droid.Resource.Attribute.titleTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleTextStyle = global::EFGetStarted.Droid.Resource.Attribute.titleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.toolbarId = global::EFGetStarted.Droid.Resource.Attribute.toolbarId; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.toolbarNavigationButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.toolbarNavigationButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.toolbarStyle = global::EFGetStarted.Droid.Resource.Attribute.toolbarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tooltipForegroundColor = global::EFGetStarted.Droid.Resource.Attribute.tooltipForegroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tooltipFrameBackground = global::EFGetStarted.Droid.Resource.Attribute.tooltipFrameBackground; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.tooltipText = global::EFGetStarted.Droid.Resource.Attribute.tooltipText; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.track = global::EFGetStarted.Droid.Resource.Attribute.track; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.trackTint = global::EFGetStarted.Droid.Resource.Attribute.trackTint; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.trackTintMode = global::EFGetStarted.Droid.Resource.Attribute.trackTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.ttcIndex = global::EFGetStarted.Droid.Resource.Attribute.ttcIndex; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.useCompatPadding = global::EFGetStarted.Droid.Resource.Attribute.useCompatPadding; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.viewInflaterClass = global::EFGetStarted.Droid.Resource.Attribute.viewInflaterClass; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.voiceIcon = global::EFGetStarted.Droid.Resource.Attribute.voiceIcon; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowActionBar = global::EFGetStarted.Droid.Resource.Attribute.windowActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowActionBarOverlay = global::EFGetStarted.Droid.Resource.Attribute.windowActionBarOverlay; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowActionModeOverlay = global::EFGetStarted.Droid.Resource.Attribute.windowActionModeOverlay; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedHeightMajor = global::EFGetStarted.Droid.Resource.Attribute.windowFixedHeightMajor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedHeightMinor = global::EFGetStarted.Droid.Resource.Attribute.windowFixedHeightMinor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedWidthMajor = global::EFGetStarted.Droid.Resource.Attribute.windowFixedWidthMajor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedWidthMinor = global::EFGetStarted.Droid.Resource.Attribute.windowFixedWidthMinor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowMinWidthMajor = global::EFGetStarted.Droid.Resource.Attribute.windowMinWidthMajor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowMinWidthMinor = global::EFGetStarted.Droid.Resource.Attribute.windowMinWidthMinor; - global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowNoTitle = global::EFGetStarted.Droid.Resource.Attribute.windowNoTitle; - global::Xamarin.Forms.Platform.Android.Resource.Boolean.abc_action_bar_embed_tabs = global::EFGetStarted.Droid.Resource.Boolean.abc_action_bar_embed_tabs; - global::Xamarin.Forms.Platform.Android.Resource.Boolean.abc_allow_stacked_button_bar = global::EFGetStarted.Droid.Resource.Boolean.abc_allow_stacked_button_bar; - global::Xamarin.Forms.Platform.Android.Resource.Boolean.abc_config_actionMenuItemAllCaps = global::EFGetStarted.Droid.Resource.Boolean.abc_config_actionMenuItemAllCaps; - global::Xamarin.Forms.Platform.Android.Resource.Boolean.mtrl_btn_textappearance_all_caps = global::EFGetStarted.Droid.Resource.Boolean.mtrl_btn_textappearance_all_caps; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_background_cache_hint_selector_material_dark = global::EFGetStarted.Droid.Resource.Color.abc_background_cache_hint_selector_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_background_cache_hint_selector_material_light = global::EFGetStarted.Droid.Resource.Color.abc_background_cache_hint_selector_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_btn_colored_borderless_text_material = global::EFGetStarted.Droid.Resource.Color.abc_btn_colored_borderless_text_material; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_btn_colored_text_material = global::EFGetStarted.Droid.Resource.Color.abc_btn_colored_text_material; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_color_highlight_material = global::EFGetStarted.Droid.Resource.Color.abc_color_highlight_material; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_hint_foreground_material_dark = global::EFGetStarted.Droid.Resource.Color.abc_hint_foreground_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_hint_foreground_material_light = global::EFGetStarted.Droid.Resource.Color.abc_hint_foreground_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_input_method_navigation_guard = global::EFGetStarted.Droid.Resource.Color.abc_input_method_navigation_guard; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_disable_only_material_dark = global::EFGetStarted.Droid.Resource.Color.abc_primary_text_disable_only_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_disable_only_material_light = global::EFGetStarted.Droid.Resource.Color.abc_primary_text_disable_only_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_material_dark = global::EFGetStarted.Droid.Resource.Color.abc_primary_text_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_material_light = global::EFGetStarted.Droid.Resource.Color.abc_primary_text_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text = global::EFGetStarted.Droid.Resource.Color.abc_search_url_text; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text_normal = global::EFGetStarted.Droid.Resource.Color.abc_search_url_text_normal; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text_pressed = global::EFGetStarted.Droid.Resource.Color.abc_search_url_text_pressed; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text_selected = global::EFGetStarted.Droid.Resource.Color.abc_search_url_text_selected; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_secondary_text_material_dark = global::EFGetStarted.Droid.Resource.Color.abc_secondary_text_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_secondary_text_material_light = global::EFGetStarted.Droid.Resource.Color.abc_secondary_text_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_btn_checkable = global::EFGetStarted.Droid.Resource.Color.abc_tint_btn_checkable; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_default = global::EFGetStarted.Droid.Resource.Color.abc_tint_default; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_edittext = global::EFGetStarted.Droid.Resource.Color.abc_tint_edittext; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_seek_thumb = global::EFGetStarted.Droid.Resource.Color.abc_tint_seek_thumb; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_spinner = global::EFGetStarted.Droid.Resource.Color.abc_tint_spinner; - global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_switch_track = global::EFGetStarted.Droid.Resource.Color.abc_tint_switch_track; - global::Xamarin.Forms.Platform.Android.Resource.Color.accent_material_dark = global::EFGetStarted.Droid.Resource.Color.accent_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.accent_material_light = global::EFGetStarted.Droid.Resource.Color.accent_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.background_floating_material_dark = global::EFGetStarted.Droid.Resource.Color.background_floating_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.background_floating_material_light = global::EFGetStarted.Droid.Resource.Color.background_floating_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.background_material_dark = global::EFGetStarted.Droid.Resource.Color.background_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.background_material_light = global::EFGetStarted.Droid.Resource.Color.background_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_disabled_material_dark = global::EFGetStarted.Droid.Resource.Color.bright_foreground_disabled_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_disabled_material_light = global::EFGetStarted.Droid.Resource.Color.bright_foreground_disabled_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_inverse_material_dark = global::EFGetStarted.Droid.Resource.Color.bright_foreground_inverse_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_inverse_material_light = global::EFGetStarted.Droid.Resource.Color.bright_foreground_inverse_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_material_dark = global::EFGetStarted.Droid.Resource.Color.bright_foreground_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_material_light = global::EFGetStarted.Droid.Resource.Color.bright_foreground_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.button_material_dark = global::EFGetStarted.Droid.Resource.Color.button_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.button_material_light = global::EFGetStarted.Droid.Resource.Color.button_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_dark_background = global::EFGetStarted.Droid.Resource.Color.cardview_dark_background; - global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_light_background = global::EFGetStarted.Droid.Resource.Color.cardview_light_background; - global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_shadow_end_color = global::EFGetStarted.Droid.Resource.Color.cardview_shadow_end_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_shadow_start_color = global::EFGetStarted.Droid.Resource.Color.cardview_shadow_start_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_bottom_navigation_shadow_color = global::EFGetStarted.Droid.Resource.Color.design_bottom_navigation_shadow_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_default_color_primary = global::EFGetStarted.Droid.Resource.Color.design_default_color_primary; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_default_color_primary_dark = global::EFGetStarted.Droid.Resource.Color.design_default_color_primary_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_error = global::EFGetStarted.Droid.Resource.Color.design_error; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_shadow_end_color = global::EFGetStarted.Droid.Resource.Color.design_fab_shadow_end_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_shadow_mid_color = global::EFGetStarted.Droid.Resource.Color.design_fab_shadow_mid_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_shadow_start_color = global::EFGetStarted.Droid.Resource.Color.design_fab_shadow_start_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_end_inner_color = global::EFGetStarted.Droid.Resource.Color.design_fab_stroke_end_inner_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_end_outer_color = global::EFGetStarted.Droid.Resource.Color.design_fab_stroke_end_outer_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_top_inner_color = global::EFGetStarted.Droid.Resource.Color.design_fab_stroke_top_inner_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_top_outer_color = global::EFGetStarted.Droid.Resource.Color.design_fab_stroke_top_outer_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_snackbar_background_color = global::EFGetStarted.Droid.Resource.Color.design_snackbar_background_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.design_tint_password_toggle = global::EFGetStarted.Droid.Resource.Color.design_tint_password_toggle; - global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_disabled_material_dark = global::EFGetStarted.Droid.Resource.Color.dim_foreground_disabled_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_disabled_material_light = global::EFGetStarted.Droid.Resource.Color.dim_foreground_disabled_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_material_dark = global::EFGetStarted.Droid.Resource.Color.dim_foreground_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_material_light = global::EFGetStarted.Droid.Resource.Color.dim_foreground_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.error_color_material_dark = global::EFGetStarted.Droid.Resource.Color.error_color_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.error_color_material_light = global::EFGetStarted.Droid.Resource.Color.error_color_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.foreground_material_dark = global::EFGetStarted.Droid.Resource.Color.foreground_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.foreground_material_light = global::EFGetStarted.Droid.Resource.Color.foreground_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.highlighted_text_material_dark = global::EFGetStarted.Droid.Resource.Color.highlighted_text_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.highlighted_text_material_light = global::EFGetStarted.Droid.Resource.Color.highlighted_text_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_blue_grey_800 = global::EFGetStarted.Droid.Resource.Color.material_blue_grey_800; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_blue_grey_900 = global::EFGetStarted.Droid.Resource.Color.material_blue_grey_900; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_blue_grey_950 = global::EFGetStarted.Droid.Resource.Color.material_blue_grey_950; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_deep_teal_200 = global::EFGetStarted.Droid.Resource.Color.material_deep_teal_200; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_deep_teal_500 = global::EFGetStarted.Droid.Resource.Color.material_deep_teal_500; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_100 = global::EFGetStarted.Droid.Resource.Color.material_grey_100; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_300 = global::EFGetStarted.Droid.Resource.Color.material_grey_300; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_50 = global::EFGetStarted.Droid.Resource.Color.material_grey_50; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_600 = global::EFGetStarted.Droid.Resource.Color.material_grey_600; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_800 = global::EFGetStarted.Droid.Resource.Color.material_grey_800; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_850 = global::EFGetStarted.Droid.Resource.Color.material_grey_850; - global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_900 = global::EFGetStarted.Droid.Resource.Color.material_grey_900; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_bottom_nav_colored_item_tint = global::EFGetStarted.Droid.Resource.Color.mtrl_bottom_nav_colored_item_tint; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_bottom_nav_item_tint = global::EFGetStarted.Droid.Resource.Color.mtrl_bottom_nav_item_tint; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_bg_color_disabled = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_bg_color_disabled; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_bg_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_bg_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_stroke_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_stroke_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_text_btn_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_text_btn_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_text_color_disabled = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_text_color_disabled; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_text_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_text_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_transparent_bg_color = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_transparent_bg_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_background_color = global::EFGetStarted.Droid.Resource.Color.mtrl_chip_background_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_close_icon_tint = global::EFGetStarted.Droid.Resource.Color.mtrl_chip_close_icon_tint; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_chip_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_text_color = global::EFGetStarted.Droid.Resource.Color.mtrl_chip_text_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_fab_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_fab_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_scrim_color = global::EFGetStarted.Droid.Resource.Color.mtrl_scrim_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_colored_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_tabs_colored_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_icon_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_tabs_icon_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_icon_color_selector_colored = global::EFGetStarted.Droid.Resource.Color.mtrl_tabs_icon_color_selector_colored; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_legacy_text_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_tabs_legacy_text_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_tabs_ripple_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_default_box_stroke_color = global::EFGetStarted.Droid.Resource.Color.mtrl_textinput_default_box_stroke_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_disabled_color = global::EFGetStarted.Droid.Resource.Color.mtrl_textinput_disabled_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_filled_box_default_background_color = global::EFGetStarted.Droid.Resource.Color.mtrl_textinput_filled_box_default_background_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_hovered_box_stroke_color = global::EFGetStarted.Droid.Resource.Color.mtrl_textinput_hovered_box_stroke_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_text_btn_text_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_text_btn_text_color_selector; - global::Xamarin.Forms.Platform.Android.Resource.Color.notification_action_color_filter = global::EFGetStarted.Droid.Resource.Color.notification_action_color_filter; - global::Xamarin.Forms.Platform.Android.Resource.Color.notification_icon_bg_color = global::EFGetStarted.Droid.Resource.Color.notification_icon_bg_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.notification_material_background_media_default_color = global::EFGetStarted.Droid.Resource.Color.notification_material_background_media_default_color; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_dark_material_dark = global::EFGetStarted.Droid.Resource.Color.primary_dark_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_dark_material_light = global::EFGetStarted.Droid.Resource.Color.primary_dark_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_material_dark = global::EFGetStarted.Droid.Resource.Color.primary_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_material_light = global::EFGetStarted.Droid.Resource.Color.primary_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_default_material_dark = global::EFGetStarted.Droid.Resource.Color.primary_text_default_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_default_material_light = global::EFGetStarted.Droid.Resource.Color.primary_text_default_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_disabled_material_dark = global::EFGetStarted.Droid.Resource.Color.primary_text_disabled_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_disabled_material_light = global::EFGetStarted.Droid.Resource.Color.primary_text_disabled_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.ripple_material_dark = global::EFGetStarted.Droid.Resource.Color.ripple_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.ripple_material_light = global::EFGetStarted.Droid.Resource.Color.ripple_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_default_material_dark = global::EFGetStarted.Droid.Resource.Color.secondary_text_default_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_default_material_light = global::EFGetStarted.Droid.Resource.Color.secondary_text_default_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_disabled_material_dark = global::EFGetStarted.Droid.Resource.Color.secondary_text_disabled_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_disabled_material_light = global::EFGetStarted.Droid.Resource.Color.secondary_text_disabled_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_disabled_material_dark = global::EFGetStarted.Droid.Resource.Color.switch_thumb_disabled_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_disabled_material_light = global::EFGetStarted.Droid.Resource.Color.switch_thumb_disabled_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_material_dark = global::EFGetStarted.Droid.Resource.Color.switch_thumb_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_material_light = global::EFGetStarted.Droid.Resource.Color.switch_thumb_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_normal_material_dark = global::EFGetStarted.Droid.Resource.Color.switch_thumb_normal_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_normal_material_light = global::EFGetStarted.Droid.Resource.Color.switch_thumb_normal_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Color.tooltip_background_dark = global::EFGetStarted.Droid.Resource.Color.tooltip_background_dark; - global::Xamarin.Forms.Platform.Android.Resource.Color.tooltip_background_light = global::EFGetStarted.Droid.Resource.Color.tooltip_background_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_content_inset_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_content_inset_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_content_inset_with_nav = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_content_inset_with_nav; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_default_height_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_default_height_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_default_padding_end_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_default_padding_end_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_default_padding_start_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_default_padding_start_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_elevation_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_elevation_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_icon_vertical_padding_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_icon_vertical_padding_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_overflow_padding_end_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_overflow_padding_end_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_overflow_padding_start_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_overflow_padding_start_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_stacked_max_height = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_stacked_max_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_stacked_tab_max_width = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_stacked_tab_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_subtitle_top_margin_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_subtitle_top_margin_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_button_min_height_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_button_min_height_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_button_min_width_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_button_min_width_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_button_min_width_overflow_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_button_min_width_overflow_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_alert_dialog_button_bar_height = global::EFGetStarted.Droid.Resource.Dimension.abc_alert_dialog_button_bar_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_alert_dialog_button_dimen = global::EFGetStarted.Droid.Resource.Dimension.abc_alert_dialog_button_dimen; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_inset_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.abc_button_inset_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_inset_vertical_material = global::EFGetStarted.Droid.Resource.Dimension.abc_button_inset_vertical_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_padding_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.abc_button_padding_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_padding_vertical_material = global::EFGetStarted.Droid.Resource.Dimension.abc_button_padding_vertical_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_cascading_menus_min_smallest_width = global::EFGetStarted.Droid.Resource.Dimension.abc_cascading_menus_min_smallest_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_config_prefDialogWidth = global::EFGetStarted.Droid.Resource.Dimension.abc_config_prefDialogWidth; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_control_corner_material = global::EFGetStarted.Droid.Resource.Dimension.abc_control_corner_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_control_inset_material = global::EFGetStarted.Droid.Resource.Dimension.abc_control_inset_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_control_padding_material = global::EFGetStarted.Droid.Resource.Dimension.abc_control_padding_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_corner_radius_material = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_corner_radius_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_height_major = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_fixed_height_major; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_height_minor = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_fixed_height_minor; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_width_major = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_fixed_width_major; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_width_minor = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_fixed_width_minor; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_list_padding_top_no_title = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_list_padding_top_no_title; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_min_width_major = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_min_width_major; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_min_width_minor = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_min_width_minor; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_padding_material = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_padding_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_padding_top_material = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_padding_top_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_title_divider_material = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_title_divider_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_disabled_alpha_material_dark = global::EFGetStarted.Droid.Resource.Dimension.abc_disabled_alpha_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_disabled_alpha_material_light = global::EFGetStarted.Droid.Resource.Dimension.abc_disabled_alpha_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dropdownitem_icon_width = global::EFGetStarted.Droid.Resource.Dimension.abc_dropdownitem_icon_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dropdownitem_text_padding_left = global::EFGetStarted.Droid.Resource.Dimension.abc_dropdownitem_text_padding_left; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dropdownitem_text_padding_right = global::EFGetStarted.Droid.Resource.Dimension.abc_dropdownitem_text_padding_right; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_edit_text_inset_bottom_material = global::EFGetStarted.Droid.Resource.Dimension.abc_edit_text_inset_bottom_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_edit_text_inset_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.abc_edit_text_inset_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_edit_text_inset_top_material = global::EFGetStarted.Droid.Resource.Dimension.abc_edit_text_inset_top_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_floating_window_z = global::EFGetStarted.Droid.Resource.Dimension.abc_floating_window_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_list_item_padding_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.abc_list_item_padding_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_panel_menu_list_width = global::EFGetStarted.Droid.Resource.Dimension.abc_panel_menu_list_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_progress_bar_height_material = global::EFGetStarted.Droid.Resource.Dimension.abc_progress_bar_height_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_search_view_preferred_height = global::EFGetStarted.Droid.Resource.Dimension.abc_search_view_preferred_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_search_view_preferred_width = global::EFGetStarted.Droid.Resource.Dimension.abc_search_view_preferred_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_seekbar_track_background_height_material = global::EFGetStarted.Droid.Resource.Dimension.abc_seekbar_track_background_height_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_seekbar_track_progress_height_material = global::EFGetStarted.Droid.Resource.Dimension.abc_seekbar_track_progress_height_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_select_dialog_padding_start_material = global::EFGetStarted.Droid.Resource.Dimension.abc_select_dialog_padding_start_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_switch_padding = global::EFGetStarted.Droid.Resource.Dimension.abc_switch_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_body_1_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_body_1_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_body_2_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_body_2_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_button_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_button_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_caption_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_caption_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_1_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_display_1_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_2_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_display_2_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_3_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_display_3_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_4_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_display_4_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_headline_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_headline_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_large_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_large_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_medium_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_medium_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_menu_header_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_menu_header_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_menu_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_menu_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_small_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_small_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_subhead_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_subhead_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_subtitle_material_toolbar = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_subtitle_material_toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_title_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_title_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_title_material_toolbar = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_title_material_toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.cardview_compat_inset_shadow = global::EFGetStarted.Droid.Resource.Dimension.cardview_compat_inset_shadow; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.cardview_default_elevation = global::EFGetStarted.Droid.Resource.Dimension.cardview_default_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.cardview_default_radius = global::EFGetStarted.Droid.Resource.Dimension.cardview_default_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_inset_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_inset_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_inset_vertical_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_inset_vertical_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_padding_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_padding_horizontal_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_padding_vertical_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_padding_vertical_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_control_corner_material = global::EFGetStarted.Droid.Resource.Dimension.compat_control_corner_material; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_notification_large_icon_max_height = global::EFGetStarted.Droid.Resource.Dimension.compat_notification_large_icon_max_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_notification_large_icon_max_width = global::EFGetStarted.Droid.Resource.Dimension.compat_notification_large_icon_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_appbar_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_appbar_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_active_item_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_active_item_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_active_item_min_width = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_active_item_min_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_active_text_size = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_active_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_height = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_icon_size = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_icon_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_item_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_item_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_item_min_width = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_item_min_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_margin = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_shadow_height = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_shadow_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_text_size = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_sheet_modal_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_sheet_modal_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_sheet_peek_height_min = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_sheet_peek_height_min; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_border_width = global::EFGetStarted.Droid.Resource.Dimension.design_fab_border_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_fab_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_image_size = global::EFGetStarted.Droid.Resource.Dimension.design_fab_image_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_size_mini = global::EFGetStarted.Droid.Resource.Dimension.design_fab_size_mini; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_size_normal = global::EFGetStarted.Droid.Resource.Dimension.design_fab_size_normal; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_translation_z_hovered_focused = global::EFGetStarted.Droid.Resource.Dimension.design_fab_translation_z_hovered_focused; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_translation_z_pressed = global::EFGetStarted.Droid.Resource.Dimension.design_fab_translation_z_pressed; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_icon_padding = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_icon_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_icon_size = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_icon_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_item_horizontal_padding = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_item_horizontal_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_item_icon_padding = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_item_icon_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_padding_bottom = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_padding_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_separator_vertical_padding = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_separator_vertical_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_action_inline_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_action_inline_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_background_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_background_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_extra_spacing_horizontal = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_extra_spacing_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_min_width = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_min_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_padding_horizontal = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_padding_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_padding_vertical = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_padding_vertical; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_padding_vertical_2lines = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_padding_vertical_2lines; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_text_size = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_tab_max_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_scrollable_min_width = global::EFGetStarted.Droid.Resource.Dimension.design_tab_scrollable_min_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_text_size = global::EFGetStarted.Droid.Resource.Dimension.design_tab_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_text_size_2line = global::EFGetStarted.Droid.Resource.Dimension.design_tab_text_size_2line; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_textinput_caption_translate_y = global::EFGetStarted.Droid.Resource.Dimension.design_textinput_caption_translate_y; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.disabled_alpha_material_dark = global::EFGetStarted.Droid.Resource.Dimension.disabled_alpha_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.disabled_alpha_material_light = global::EFGetStarted.Droid.Resource.Dimension.disabled_alpha_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.fastscroll_default_thickness = global::EFGetStarted.Droid.Resource.Dimension.fastscroll_default_thickness; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.fastscroll_margin = global::EFGetStarted.Droid.Resource.Dimension.fastscroll_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.fastscroll_minimum_range = global::EFGetStarted.Droid.Resource.Dimension.fastscroll_minimum_range; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.highlight_alpha_material_colored = global::EFGetStarted.Droid.Resource.Dimension.highlight_alpha_material_colored; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.highlight_alpha_material_dark = global::EFGetStarted.Droid.Resource.Dimension.highlight_alpha_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.highlight_alpha_material_light = global::EFGetStarted.Droid.Resource.Dimension.highlight_alpha_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_alpha_material_dark = global::EFGetStarted.Droid.Resource.Dimension.hint_alpha_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_alpha_material_light = global::EFGetStarted.Droid.Resource.Dimension.hint_alpha_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_pressed_alpha_material_dark = global::EFGetStarted.Droid.Resource.Dimension.hint_pressed_alpha_material_dark; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_pressed_alpha_material_light = global::EFGetStarted.Droid.Resource.Dimension.hint_pressed_alpha_material_light; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame = global::EFGetStarted.Droid.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity = global::EFGetStarted.Droid.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.item_touch_helper_swipe_escape_velocity = global::EFGetStarted.Droid.Resource.Dimension.item_touch_helper_swipe_escape_velocity; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode = global::EFGetStarted.Droid.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin = global::EFGetStarted.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset = global::EFGetStarted.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_height = global::EFGetStarted.Droid.Resource.Dimension.mtrl_bottomappbar_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_dialog_btn_min_width = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_dialog_btn_min_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_disabled_elevation = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_disabled_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_disabled_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_disabled_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_elevation = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_focused_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_focused_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_hovered_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_hovered_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_icon_btn_padding_left = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_icon_btn_padding_left; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_icon_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_icon_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_inset = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_inset; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_letter_spacing = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_letter_spacing; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_bottom = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_padding_bottom; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_left = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_padding_left; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_right = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_padding_right; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_top = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_padding_top; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_pressed_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_pressed_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_stroke_size = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_stroke_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_btn_icon_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_text_btn_icon_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_btn_padding_left = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_left; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_btn_padding_right = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_right; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_size = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_card_elevation = global::EFGetStarted.Droid.Resource.Dimension.mtrl_card_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_card_spacing = global::EFGetStarted.Droid.Resource.Dimension.mtrl_card_spacing; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_chip_pressed_translation_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_chip_pressed_translation_z; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_chip_text_size = global::EFGetStarted.Droid.Resource.Dimension.mtrl_chip_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_fab_elevation = global::EFGetStarted.Droid.Resource.Dimension.mtrl_fab_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_fab_translation_z_hovered_focused = global::EFGetStarted.Droid.Resource.Dimension.mtrl_fab_translation_z_hovered_focused; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_fab_translation_z_pressed = global::EFGetStarted.Droid.Resource.Dimension.mtrl_fab_translation_z_pressed; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_navigation_elevation = global::EFGetStarted.Droid.Resource.Dimension.mtrl_navigation_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_navigation_item_horizontal_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_navigation_item_horizontal_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_navigation_item_icon_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_navigation_item_icon_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_snackbar_background_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.mtrl_snackbar_background_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_snackbar_margin = global::EFGetStarted.Droid.Resource.Dimension.mtrl_snackbar_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_bottom_offset = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_bottom_offset; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_corner_radius_medium = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_medium; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_corner_radius_small = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_small; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_label_cutout_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_label_cutout_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_padding_end = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_padding_end; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_stroke_width_default = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_default; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_stroke_width_focused = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_focused; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_toolbar_default_height = global::EFGetStarted.Droid.Resource.Dimension.mtrl_toolbar_default_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_action_icon_size = global::EFGetStarted.Droid.Resource.Dimension.notification_action_icon_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_action_text_size = global::EFGetStarted.Droid.Resource.Dimension.notification_action_text_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_big_circle_margin = global::EFGetStarted.Droid.Resource.Dimension.notification_big_circle_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_content_margin_start = global::EFGetStarted.Droid.Resource.Dimension.notification_content_margin_start; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_large_icon_height = global::EFGetStarted.Droid.Resource.Dimension.notification_large_icon_height; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_large_icon_width = global::EFGetStarted.Droid.Resource.Dimension.notification_large_icon_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_main_column_padding_top = global::EFGetStarted.Droid.Resource.Dimension.notification_main_column_padding_top; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_media_narrow_margin = global::EFGetStarted.Droid.Resource.Dimension.notification_media_narrow_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_right_icon_size = global::EFGetStarted.Droid.Resource.Dimension.notification_right_icon_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_right_side_padding_top = global::EFGetStarted.Droid.Resource.Dimension.notification_right_side_padding_top; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_small_icon_background_padding = global::EFGetStarted.Droid.Resource.Dimension.notification_small_icon_background_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_small_icon_size_as_large = global::EFGetStarted.Droid.Resource.Dimension.notification_small_icon_size_as_large; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_subtext_size = global::EFGetStarted.Droid.Resource.Dimension.notification_subtext_size; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_top_pad = global::EFGetStarted.Droid.Resource.Dimension.notification_top_pad; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_top_pad_large_text = global::EFGetStarted.Droid.Resource.Dimension.notification_top_pad_large_text; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.subtitle_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_outline_width = global::EFGetStarted.Droid.Resource.Dimension.subtitle_outline_width; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_shadow_offset = global::EFGetStarted.Droid.Resource.Dimension.subtitle_shadow_offset; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_shadow_radius = global::EFGetStarted.Droid.Resource.Dimension.subtitle_shadow_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.tooltip_corner_radius; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_horizontal_padding = global::EFGetStarted.Droid.Resource.Dimension.tooltip_horizontal_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_margin = global::EFGetStarted.Droid.Resource.Dimension.tooltip_margin; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_precise_anchor_extra_offset = global::EFGetStarted.Droid.Resource.Dimension.tooltip_precise_anchor_extra_offset; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_precise_anchor_threshold = global::EFGetStarted.Droid.Resource.Dimension.tooltip_precise_anchor_threshold; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_vertical_padding = global::EFGetStarted.Droid.Resource.Dimension.tooltip_vertical_padding; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_y_offset_non_touch = global::EFGetStarted.Droid.Resource.Dimension.tooltip_y_offset_non_touch; - global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_y_offset_touch = global::EFGetStarted.Droid.Resource.Dimension.tooltip_y_offset_touch; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ab_share_pack_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ab_share_pack_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_action_bar_item_background_material = global::EFGetStarted.Droid.Resource.Drawable.abc_action_bar_item_background_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_borderless_material = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_borderless_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_check_material = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_check_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_check_to_on_mtrl_000 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_000; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_check_to_on_mtrl_015 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_015; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_colored_material = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_colored_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_default_mtrl_shape = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_default_mtrl_shape; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_radio_material = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_radio_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_radio_to_on_mtrl_000 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_000; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_radio_to_on_mtrl_015 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_015; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_cab_background_internal_bg = global::EFGetStarted.Droid.Resource.Drawable.abc_cab_background_internal_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_cab_background_top_material = global::EFGetStarted.Droid.Resource.Drawable.abc_cab_background_top_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_cab_background_top_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_cab_background_top_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_control_background_material = global::EFGetStarted.Droid.Resource.Drawable.abc_control_background_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_dialog_material_background = global::EFGetStarted.Droid.Resource.Drawable.abc_dialog_material_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_edit_text_material = global::EFGetStarted.Droid.Resource.Drawable.abc_edit_text_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_ab_back_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_ab_back_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_clear_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_clear_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_go_search_api_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_go_search_api_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_overflow_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_overflow_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_share_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_share_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_search_api_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_search_api_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_black_16dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_black_16dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_black_36dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_black_36dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_black_48dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_black_48dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_half_black_16dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_half_black_16dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_half_black_36dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_half_black_36dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_half_black_48dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_half_black_48dp; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_voice_search_api_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_voice_search_api_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_item_background_holo_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_item_background_holo_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_item_background_holo_light = global::EFGetStarted.Droid.Resource.Drawable.abc_item_background_holo_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_divider_material = global::EFGetStarted.Droid.Resource.Drawable.abc_list_divider_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_divider_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_list_divider_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_focused_holo = global::EFGetStarted.Droid.Resource.Drawable.abc_list_focused_holo; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_longpressed_holo = global::EFGetStarted.Droid.Resource.Drawable.abc_list_longpressed_holo; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_pressed_holo_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_list_pressed_holo_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_pressed_holo_light = global::EFGetStarted.Droid.Resource.Drawable.abc_list_pressed_holo_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_background_transition_holo_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_background_transition_holo_light = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_disabled_holo_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_disabled_holo_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_disabled_holo_light = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_disabled_holo_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_holo_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_holo_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_holo_light = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_holo_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult = global::EFGetStarted.Droid.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_popup_background_mtrl_mult = global::EFGetStarted.Droid.Resource.Drawable.abc_popup_background_mtrl_mult; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ratingbar_indicator_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ratingbar_indicator_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ratingbar_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ratingbar_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ratingbar_small_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ratingbar_small_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000 = global::EFGetStarted.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005 = global::EFGetStarted.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_primary_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_scrubber_primary_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_track_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_scrubber_track_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_seekbar_thumb_material = global::EFGetStarted.Droid.Resource.Drawable.abc_seekbar_thumb_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_seekbar_tick_mark_material = global::EFGetStarted.Droid.Resource.Drawable.abc_seekbar_tick_mark_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_seekbar_track_material = global::EFGetStarted.Droid.Resource.Drawable.abc_seekbar_track_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_spinner_mtrl_am_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_spinner_mtrl_am_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_spinner_textfield_background_material = global::EFGetStarted.Droid.Resource.Drawable.abc_spinner_textfield_background_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_switch_thumb_material = global::EFGetStarted.Droid.Resource.Drawable.abc_switch_thumb_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_switch_track_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_switch_track_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_tab_indicator_material = global::EFGetStarted.Droid.Resource.Drawable.abc_tab_indicator_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_tab_indicator_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_tab_indicator_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_activated_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_textfield_activated_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_default_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_textfield_default_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_search_default_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_textfield_search_default_mtrl_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_search_material = global::EFGetStarted.Droid.Resource.Drawable.abc_textfield_search_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_cursor_material = global::EFGetStarted.Droid.Resource.Drawable.abc_text_cursor_material; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_left_mtrl_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_left_mtrl_light = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_middle_mtrl_light = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_right_mtrl_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_right_mtrl_light = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_light; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_vector_test = global::EFGetStarted.Droid.Resource.Drawable.abc_vector_test; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_hide_password = global::EFGetStarted.Droid.Resource.Drawable.avd_hide_password; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_show_password = global::EFGetStarted.Droid.Resource.Drawable.avd_show_password; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_bottom_navigation_item_background = global::EFGetStarted.Droid.Resource.Drawable.design_bottom_navigation_item_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_fab_background = global::EFGetStarted.Droid.Resource.Drawable.design_fab_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_ic_visibility = global::EFGetStarted.Droid.Resource.Drawable.design_ic_visibility; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_ic_visibility_off = global::EFGetStarted.Droid.Resource.Drawable.design_ic_visibility_off; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_password_eye = global::EFGetStarted.Droid.Resource.Drawable.design_password_eye; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_snackbar_background = global::EFGetStarted.Droid.Resource.Drawable.design_snackbar_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.ic_mtrl_chip_checked_black = global::EFGetStarted.Droid.Resource.Drawable.ic_mtrl_chip_checked_black; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.ic_mtrl_chip_checked_circle = global::EFGetStarted.Droid.Resource.Drawable.ic_mtrl_chip_checked_circle; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.ic_mtrl_chip_close_circle = global::EFGetStarted.Droid.Resource.Drawable.ic_mtrl_chip_close_circle; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.mtrl_snackbar_background = global::EFGetStarted.Droid.Resource.Drawable.mtrl_snackbar_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.mtrl_tabs_default_indicator = global::EFGetStarted.Droid.Resource.Drawable.mtrl_tabs_default_indicator; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.navigation_empty_icon = global::EFGetStarted.Droid.Resource.Drawable.navigation_empty_icon; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_action_background = global::EFGetStarted.Droid.Resource.Drawable.notification_action_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_low = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_low; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_low_normal = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_low_normal; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_low_pressed = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_low_pressed; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_normal = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_normal; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_normal_pressed = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_normal_pressed; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_icon_background = global::EFGetStarted.Droid.Resource.Drawable.notification_icon_background; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_template_icon_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_template_icon_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_template_icon_low_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_template_icon_low_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_tile_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_tile_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.notify_panel_notification_icon_bg = global::EFGetStarted.Droid.Resource.Drawable.notify_panel_notification_icon_bg; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.tooltip_frame_dark = global::EFGetStarted.Droid.Resource.Drawable.tooltip_frame_dark; - global::Xamarin.Forms.Platform.Android.Resource.Drawable.tooltip_frame_light = global::EFGetStarted.Droid.Resource.Drawable.tooltip_frame_light; - global::Xamarin.Forms.Platform.Android.Resource.Id.action0 = global::EFGetStarted.Droid.Resource.Id.action0; - global::Xamarin.Forms.Platform.Android.Resource.Id.actions = global::EFGetStarted.Droid.Resource.Id.actions; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar = global::EFGetStarted.Droid.Resource.Id.action_bar; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_activity_content = global::EFGetStarted.Droid.Resource.Id.action_bar_activity_content; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_container = global::EFGetStarted.Droid.Resource.Id.action_bar_container; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_root = global::EFGetStarted.Droid.Resource.Id.action_bar_root; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_spinner = global::EFGetStarted.Droid.Resource.Id.action_bar_spinner; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_subtitle = global::EFGetStarted.Droid.Resource.Id.action_bar_subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_title = global::EFGetStarted.Droid.Resource.Id.action_bar_title; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_container = global::EFGetStarted.Droid.Resource.Id.action_container; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_context_bar = global::EFGetStarted.Droid.Resource.Id.action_context_bar; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_divider = global::EFGetStarted.Droid.Resource.Id.action_divider; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_image = global::EFGetStarted.Droid.Resource.Id.action_image; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_menu_divider = global::EFGetStarted.Droid.Resource.Id.action_menu_divider; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_menu_presenter = global::EFGetStarted.Droid.Resource.Id.action_menu_presenter; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_mode_bar = global::EFGetStarted.Droid.Resource.Id.action_mode_bar; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_mode_bar_stub = global::EFGetStarted.Droid.Resource.Id.action_mode_bar_stub; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_mode_close_button = global::EFGetStarted.Droid.Resource.Id.action_mode_close_button; - global::Xamarin.Forms.Platform.Android.Resource.Id.action_text = global::EFGetStarted.Droid.Resource.Id.action_text; - global::Xamarin.Forms.Platform.Android.Resource.Id.activity_chooser_view_content = global::EFGetStarted.Droid.Resource.Id.activity_chooser_view_content; - global::Xamarin.Forms.Platform.Android.Resource.Id.add = global::EFGetStarted.Droid.Resource.Id.add; - global::Xamarin.Forms.Platform.Android.Resource.Id.alertTitle = global::EFGetStarted.Droid.Resource.Id.alertTitle; - global::Xamarin.Forms.Platform.Android.Resource.Id.all = global::EFGetStarted.Droid.Resource.Id.all; - global::Xamarin.Forms.Platform.Android.Resource.Id.ALT = global::EFGetStarted.Droid.Resource.Id.ALT; - global::Xamarin.Forms.Platform.Android.Resource.Id.always = global::EFGetStarted.Droid.Resource.Id.always; - global::Xamarin.Forms.Platform.Android.Resource.Id.async = global::EFGetStarted.Droid.Resource.Id.async; - global::Xamarin.Forms.Platform.Android.Resource.Id.auto = global::EFGetStarted.Droid.Resource.Id.auto; - global::Xamarin.Forms.Platform.Android.Resource.Id.beginning = global::EFGetStarted.Droid.Resource.Id.beginning; - global::Xamarin.Forms.Platform.Android.Resource.Id.blocking = global::EFGetStarted.Droid.Resource.Id.blocking; - global::Xamarin.Forms.Platform.Android.Resource.Id.bottom = global::EFGetStarted.Droid.Resource.Id.bottom; - global::Xamarin.Forms.Platform.Android.Resource.Id.bottomtab_navarea = global::EFGetStarted.Droid.Resource.Id.bottomtab_navarea; - global::Xamarin.Forms.Platform.Android.Resource.Id.bottomtab_tabbar = global::EFGetStarted.Droid.Resource.Id.bottomtab_tabbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.buttonPanel = global::EFGetStarted.Droid.Resource.Id.buttonPanel; - global::Xamarin.Forms.Platform.Android.Resource.Id.cancel_action = global::EFGetStarted.Droid.Resource.Id.cancel_action; - global::Xamarin.Forms.Platform.Android.Resource.Id.center = global::EFGetStarted.Droid.Resource.Id.center; - global::Xamarin.Forms.Platform.Android.Resource.Id.center_horizontal = global::EFGetStarted.Droid.Resource.Id.center_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Id.center_vertical = global::EFGetStarted.Droid.Resource.Id.center_vertical; - global::Xamarin.Forms.Platform.Android.Resource.Id.checkbox = global::EFGetStarted.Droid.Resource.Id.checkbox; - global::Xamarin.Forms.Platform.Android.Resource.Id.chronometer = global::EFGetStarted.Droid.Resource.Id.chronometer; - global::Xamarin.Forms.Platform.Android.Resource.Id.clip_horizontal = global::EFGetStarted.Droid.Resource.Id.clip_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Id.clip_vertical = global::EFGetStarted.Droid.Resource.Id.clip_vertical; - global::Xamarin.Forms.Platform.Android.Resource.Id.collapseActionView = global::EFGetStarted.Droid.Resource.Id.collapseActionView; - global::Xamarin.Forms.Platform.Android.Resource.Id.container = global::EFGetStarted.Droid.Resource.Id.container; - global::Xamarin.Forms.Platform.Android.Resource.Id.content = global::EFGetStarted.Droid.Resource.Id.content; - global::Xamarin.Forms.Platform.Android.Resource.Id.contentPanel = global::EFGetStarted.Droid.Resource.Id.contentPanel; - global::Xamarin.Forms.Platform.Android.Resource.Id.coordinator = global::EFGetStarted.Droid.Resource.Id.coordinator; - global::Xamarin.Forms.Platform.Android.Resource.Id.CTRL = global::EFGetStarted.Droid.Resource.Id.CTRL; - global::Xamarin.Forms.Platform.Android.Resource.Id.custom = global::EFGetStarted.Droid.Resource.Id.custom; - global::Xamarin.Forms.Platform.Android.Resource.Id.customPanel = global::EFGetStarted.Droid.Resource.Id.customPanel; - global::Xamarin.Forms.Platform.Android.Resource.Id.decor_content_parent = global::EFGetStarted.Droid.Resource.Id.decor_content_parent; - global::Xamarin.Forms.Platform.Android.Resource.Id.default_activity_button = global::EFGetStarted.Droid.Resource.Id.default_activity_button; - global::Xamarin.Forms.Platform.Android.Resource.Id.design_bottom_sheet = global::EFGetStarted.Droid.Resource.Id.design_bottom_sheet; - global::Xamarin.Forms.Platform.Android.Resource.Id.design_menu_item_action_area = global::EFGetStarted.Droid.Resource.Id.design_menu_item_action_area; - global::Xamarin.Forms.Platform.Android.Resource.Id.design_menu_item_action_area_stub = global::EFGetStarted.Droid.Resource.Id.design_menu_item_action_area_stub; - global::Xamarin.Forms.Platform.Android.Resource.Id.design_menu_item_text = global::EFGetStarted.Droid.Resource.Id.design_menu_item_text; - global::Xamarin.Forms.Platform.Android.Resource.Id.design_navigation_view = global::EFGetStarted.Droid.Resource.Id.design_navigation_view; - global::Xamarin.Forms.Platform.Android.Resource.Id.disableHome = global::EFGetStarted.Droid.Resource.Id.disableHome; - global::Xamarin.Forms.Platform.Android.Resource.Id.edit_query = global::EFGetStarted.Droid.Resource.Id.edit_query; - global::Xamarin.Forms.Platform.Android.Resource.Id.end = global::EFGetStarted.Droid.Resource.Id.end; - global::Xamarin.Forms.Platform.Android.Resource.Id.end_padder = global::EFGetStarted.Droid.Resource.Id.end_padder; - global::Xamarin.Forms.Platform.Android.Resource.Id.enterAlways = global::EFGetStarted.Droid.Resource.Id.enterAlways; - global::Xamarin.Forms.Platform.Android.Resource.Id.enterAlwaysCollapsed = global::EFGetStarted.Droid.Resource.Id.enterAlwaysCollapsed; - global::Xamarin.Forms.Platform.Android.Resource.Id.exitUntilCollapsed = global::EFGetStarted.Droid.Resource.Id.exitUntilCollapsed; - global::Xamarin.Forms.Platform.Android.Resource.Id.expanded_menu = global::EFGetStarted.Droid.Resource.Id.expanded_menu; - global::Xamarin.Forms.Platform.Android.Resource.Id.expand_activities_button = global::EFGetStarted.Droid.Resource.Id.expand_activities_button; - global::Xamarin.Forms.Platform.Android.Resource.Id.fill = global::EFGetStarted.Droid.Resource.Id.fill; - global::Xamarin.Forms.Platform.Android.Resource.Id.filled = global::EFGetStarted.Droid.Resource.Id.filled; - global::Xamarin.Forms.Platform.Android.Resource.Id.fill_horizontal = global::EFGetStarted.Droid.Resource.Id.fill_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Id.fill_vertical = global::EFGetStarted.Droid.Resource.Id.fill_vertical; - global::Xamarin.Forms.Platform.Android.Resource.Id.@fixed = global::EFGetStarted.Droid.Resource.Id.@fixed; - global::Xamarin.Forms.Platform.Android.Resource.Id.flyoutcontent_appbar = global::EFGetStarted.Droid.Resource.Id.flyoutcontent_appbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.flyoutcontent_recycler = global::EFGetStarted.Droid.Resource.Id.flyoutcontent_recycler; - global::Xamarin.Forms.Platform.Android.Resource.Id.forever = global::EFGetStarted.Droid.Resource.Id.forever; - global::Xamarin.Forms.Platform.Android.Resource.Id.FUNCTION = global::EFGetStarted.Droid.Resource.Id.FUNCTION; - global::Xamarin.Forms.Platform.Android.Resource.Id.ghost_view = global::EFGetStarted.Droid.Resource.Id.ghost_view; - global::Xamarin.Forms.Platform.Android.Resource.Id.group_divider = global::EFGetStarted.Droid.Resource.Id.group_divider; - global::Xamarin.Forms.Platform.Android.Resource.Id.home = global::EFGetStarted.Droid.Resource.Id.home; - global::Xamarin.Forms.Platform.Android.Resource.Id.homeAsUp = global::EFGetStarted.Droid.Resource.Id.homeAsUp; - global::Xamarin.Forms.Platform.Android.Resource.Id.icon = global::EFGetStarted.Droid.Resource.Id.icon; - global::Xamarin.Forms.Platform.Android.Resource.Id.icon_group = global::EFGetStarted.Droid.Resource.Id.icon_group; - global::Xamarin.Forms.Platform.Android.Resource.Id.ifRoom = global::EFGetStarted.Droid.Resource.Id.ifRoom; - global::Xamarin.Forms.Platform.Android.Resource.Id.image = global::EFGetStarted.Droid.Resource.Id.image; - global::Xamarin.Forms.Platform.Android.Resource.Id.info = global::EFGetStarted.Droid.Resource.Id.info; - global::Xamarin.Forms.Platform.Android.Resource.Id.italic = global::EFGetStarted.Droid.Resource.Id.italic; - global::Xamarin.Forms.Platform.Android.Resource.Id.item_touch_helper_previous_elevation = global::EFGetStarted.Droid.Resource.Id.item_touch_helper_previous_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Id.labeled = global::EFGetStarted.Droid.Resource.Id.labeled; - global::Xamarin.Forms.Platform.Android.Resource.Id.largeLabel = global::EFGetStarted.Droid.Resource.Id.largeLabel; - global::Xamarin.Forms.Platform.Android.Resource.Id.left = global::EFGetStarted.Droid.Resource.Id.left; - global::Xamarin.Forms.Platform.Android.Resource.Id.line1 = global::EFGetStarted.Droid.Resource.Id.line1; - global::Xamarin.Forms.Platform.Android.Resource.Id.line3 = global::EFGetStarted.Droid.Resource.Id.line3; - global::Xamarin.Forms.Platform.Android.Resource.Id.listMode = global::EFGetStarted.Droid.Resource.Id.listMode; - global::Xamarin.Forms.Platform.Android.Resource.Id.list_item = global::EFGetStarted.Droid.Resource.Id.list_item; - global::Xamarin.Forms.Platform.Android.Resource.Id.main_appbar = global::EFGetStarted.Droid.Resource.Id.main_appbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.main_tablayout = global::EFGetStarted.Droid.Resource.Id.main_tablayout; - global::Xamarin.Forms.Platform.Android.Resource.Id.main_toolbar = global::EFGetStarted.Droid.Resource.Id.main_toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.main_viewpager = global::EFGetStarted.Droid.Resource.Id.main_viewpager; - global::Xamarin.Forms.Platform.Android.Resource.Id.masked = global::EFGetStarted.Droid.Resource.Id.masked; - global::Xamarin.Forms.Platform.Android.Resource.Id.media_actions = global::EFGetStarted.Droid.Resource.Id.media_actions; - global::Xamarin.Forms.Platform.Android.Resource.Id.message = global::EFGetStarted.Droid.Resource.Id.message; - global::Xamarin.Forms.Platform.Android.Resource.Id.META = global::EFGetStarted.Droid.Resource.Id.META; - global::Xamarin.Forms.Platform.Android.Resource.Id.middle = global::EFGetStarted.Droid.Resource.Id.middle; - global::Xamarin.Forms.Platform.Android.Resource.Id.mini = global::EFGetStarted.Droid.Resource.Id.mini; - global::Xamarin.Forms.Platform.Android.Resource.Id.mtrl_child_content_container = global::EFGetStarted.Droid.Resource.Id.mtrl_child_content_container; - global::Xamarin.Forms.Platform.Android.Resource.Id.mtrl_internal_children_alpha_tag = global::EFGetStarted.Droid.Resource.Id.mtrl_internal_children_alpha_tag; - global::Xamarin.Forms.Platform.Android.Resource.Id.multiply = global::EFGetStarted.Droid.Resource.Id.multiply; - global::Xamarin.Forms.Platform.Android.Resource.Id.navigation_header_container = global::EFGetStarted.Droid.Resource.Id.navigation_header_container; - global::Xamarin.Forms.Platform.Android.Resource.Id.never = global::EFGetStarted.Droid.Resource.Id.never; - global::Xamarin.Forms.Platform.Android.Resource.Id.none = global::EFGetStarted.Droid.Resource.Id.none; - global::Xamarin.Forms.Platform.Android.Resource.Id.normal = global::EFGetStarted.Droid.Resource.Id.normal; - global::Xamarin.Forms.Platform.Android.Resource.Id.notification_background = global::EFGetStarted.Droid.Resource.Id.notification_background; - global::Xamarin.Forms.Platform.Android.Resource.Id.notification_main_column = global::EFGetStarted.Droid.Resource.Id.notification_main_column; - global::Xamarin.Forms.Platform.Android.Resource.Id.notification_main_column_container = global::EFGetStarted.Droid.Resource.Id.notification_main_column_container; - global::Xamarin.Forms.Platform.Android.Resource.Id.outline = global::EFGetStarted.Droid.Resource.Id.outline; - global::Xamarin.Forms.Platform.Android.Resource.Id.parallax = global::EFGetStarted.Droid.Resource.Id.parallax; - global::Xamarin.Forms.Platform.Android.Resource.Id.parentPanel = global::EFGetStarted.Droid.Resource.Id.parentPanel; - global::Xamarin.Forms.Platform.Android.Resource.Id.parent_matrix = global::EFGetStarted.Droid.Resource.Id.parent_matrix; - global::Xamarin.Forms.Platform.Android.Resource.Id.pin = global::EFGetStarted.Droid.Resource.Id.pin; - global::Xamarin.Forms.Platform.Android.Resource.Id.progress_circular = global::EFGetStarted.Droid.Resource.Id.progress_circular; - global::Xamarin.Forms.Platform.Android.Resource.Id.progress_horizontal = global::EFGetStarted.Droid.Resource.Id.progress_horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Id.radio = global::EFGetStarted.Droid.Resource.Id.radio; - global::Xamarin.Forms.Platform.Android.Resource.Id.right = global::EFGetStarted.Droid.Resource.Id.right; - global::Xamarin.Forms.Platform.Android.Resource.Id.right_icon = global::EFGetStarted.Droid.Resource.Id.right_icon; - global::Xamarin.Forms.Platform.Android.Resource.Id.right_side = global::EFGetStarted.Droid.Resource.Id.right_side; - global::Xamarin.Forms.Platform.Android.Resource.Id.save_image_matrix = global::EFGetStarted.Droid.Resource.Id.save_image_matrix; - global::Xamarin.Forms.Platform.Android.Resource.Id.save_non_transition_alpha = global::EFGetStarted.Droid.Resource.Id.save_non_transition_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Id.save_scale_type = global::EFGetStarted.Droid.Resource.Id.save_scale_type; - global::Xamarin.Forms.Platform.Android.Resource.Id.screen = global::EFGetStarted.Droid.Resource.Id.screen; - global::Xamarin.Forms.Platform.Android.Resource.Id.scroll = global::EFGetStarted.Droid.Resource.Id.scroll; - global::Xamarin.Forms.Platform.Android.Resource.Id.scrollable = global::EFGetStarted.Droid.Resource.Id.scrollable; - global::Xamarin.Forms.Platform.Android.Resource.Id.scrollIndicatorDown = global::EFGetStarted.Droid.Resource.Id.scrollIndicatorDown; - global::Xamarin.Forms.Platform.Android.Resource.Id.scrollIndicatorUp = global::EFGetStarted.Droid.Resource.Id.scrollIndicatorUp; - global::Xamarin.Forms.Platform.Android.Resource.Id.scrollView = global::EFGetStarted.Droid.Resource.Id.scrollView; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_badge = global::EFGetStarted.Droid.Resource.Id.search_badge; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_bar = global::EFGetStarted.Droid.Resource.Id.search_bar; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_button = global::EFGetStarted.Droid.Resource.Id.search_button; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_close_btn = global::EFGetStarted.Droid.Resource.Id.search_close_btn; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_edit_frame = global::EFGetStarted.Droid.Resource.Id.search_edit_frame; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_go_btn = global::EFGetStarted.Droid.Resource.Id.search_go_btn; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_mag_icon = global::EFGetStarted.Droid.Resource.Id.search_mag_icon; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_plate = global::EFGetStarted.Droid.Resource.Id.search_plate; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_src_text = global::EFGetStarted.Droid.Resource.Id.search_src_text; - global::Xamarin.Forms.Platform.Android.Resource.Id.search_voice_btn = global::EFGetStarted.Droid.Resource.Id.search_voice_btn; - global::Xamarin.Forms.Platform.Android.Resource.Id.selected = global::EFGetStarted.Droid.Resource.Id.selected; - global::Xamarin.Forms.Platform.Android.Resource.Id.select_dialog_listview = global::EFGetStarted.Droid.Resource.Id.select_dialog_listview; - global::Xamarin.Forms.Platform.Android.Resource.Id.shellcontent_appbar = global::EFGetStarted.Droid.Resource.Id.shellcontent_appbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.shellcontent_toolbar = global::EFGetStarted.Droid.Resource.Id.shellcontent_toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Id.SHIFT = global::EFGetStarted.Droid.Resource.Id.SHIFT; - global::Xamarin.Forms.Platform.Android.Resource.Id.shortcut = global::EFGetStarted.Droid.Resource.Id.shortcut; - global::Xamarin.Forms.Platform.Android.Resource.Id.showCustom = global::EFGetStarted.Droid.Resource.Id.showCustom; - global::Xamarin.Forms.Platform.Android.Resource.Id.showHome = global::EFGetStarted.Droid.Resource.Id.showHome; - global::Xamarin.Forms.Platform.Android.Resource.Id.showTitle = global::EFGetStarted.Droid.Resource.Id.showTitle; - global::Xamarin.Forms.Platform.Android.Resource.Id.smallLabel = global::EFGetStarted.Droid.Resource.Id.smallLabel; - global::Xamarin.Forms.Platform.Android.Resource.Id.snackbar_action = global::EFGetStarted.Droid.Resource.Id.snackbar_action; - global::Xamarin.Forms.Platform.Android.Resource.Id.snackbar_text = global::EFGetStarted.Droid.Resource.Id.snackbar_text; - global::Xamarin.Forms.Platform.Android.Resource.Id.snap = global::EFGetStarted.Droid.Resource.Id.snap; - global::Xamarin.Forms.Platform.Android.Resource.Id.snapMargins = global::EFGetStarted.Droid.Resource.Id.snapMargins; - global::Xamarin.Forms.Platform.Android.Resource.Id.spacer = global::EFGetStarted.Droid.Resource.Id.spacer; - global::Xamarin.Forms.Platform.Android.Resource.Id.split_action_bar = global::EFGetStarted.Droid.Resource.Id.split_action_bar; - global::Xamarin.Forms.Platform.Android.Resource.Id.src_atop = global::EFGetStarted.Droid.Resource.Id.src_atop; - global::Xamarin.Forms.Platform.Android.Resource.Id.src_in = global::EFGetStarted.Droid.Resource.Id.src_in; - global::Xamarin.Forms.Platform.Android.Resource.Id.src_over = global::EFGetStarted.Droid.Resource.Id.src_over; - global::Xamarin.Forms.Platform.Android.Resource.Id.start = global::EFGetStarted.Droid.Resource.Id.start; - global::Xamarin.Forms.Platform.Android.Resource.Id.status_bar_latest_event_content = global::EFGetStarted.Droid.Resource.Id.status_bar_latest_event_content; - global::Xamarin.Forms.Platform.Android.Resource.Id.stretch = global::EFGetStarted.Droid.Resource.Id.stretch; - global::Xamarin.Forms.Platform.Android.Resource.Id.submenuarrow = global::EFGetStarted.Droid.Resource.Id.submenuarrow; - global::Xamarin.Forms.Platform.Android.Resource.Id.submit_area = global::EFGetStarted.Droid.Resource.Id.submit_area; - global::Xamarin.Forms.Platform.Android.Resource.Id.SYM = global::EFGetStarted.Droid.Resource.Id.SYM; - global::Xamarin.Forms.Platform.Android.Resource.Id.tabMode = global::EFGetStarted.Droid.Resource.Id.tabMode; - global::Xamarin.Forms.Platform.Android.Resource.Id.tag_transition_group = global::EFGetStarted.Droid.Resource.Id.tag_transition_group; - global::Xamarin.Forms.Platform.Android.Resource.Id.tag_unhandled_key_event_manager = global::EFGetStarted.Droid.Resource.Id.tag_unhandled_key_event_manager; - global::Xamarin.Forms.Platform.Android.Resource.Id.tag_unhandled_key_listeners = global::EFGetStarted.Droid.Resource.Id.tag_unhandled_key_listeners; - global::Xamarin.Forms.Platform.Android.Resource.Id.text = global::EFGetStarted.Droid.Resource.Id.text; - global::Xamarin.Forms.Platform.Android.Resource.Id.text2 = global::EFGetStarted.Droid.Resource.Id.text2; - global::Xamarin.Forms.Platform.Android.Resource.Id.textinput_counter = global::EFGetStarted.Droid.Resource.Id.textinput_counter; - global::Xamarin.Forms.Platform.Android.Resource.Id.textinput_error = global::EFGetStarted.Droid.Resource.Id.textinput_error; - global::Xamarin.Forms.Platform.Android.Resource.Id.textinput_helper_text = global::EFGetStarted.Droid.Resource.Id.textinput_helper_text; - global::Xamarin.Forms.Platform.Android.Resource.Id.textSpacerNoButtons = global::EFGetStarted.Droid.Resource.Id.textSpacerNoButtons; - global::Xamarin.Forms.Platform.Android.Resource.Id.textSpacerNoTitle = global::EFGetStarted.Droid.Resource.Id.textSpacerNoTitle; - global::Xamarin.Forms.Platform.Android.Resource.Id.textStart = global::EFGetStarted.Droid.Resource.Id.textStart; - global::Xamarin.Forms.Platform.Android.Resource.Id.text_input_password_toggle = global::EFGetStarted.Droid.Resource.Id.text_input_password_toggle; - global::Xamarin.Forms.Platform.Android.Resource.Id.time = global::EFGetStarted.Droid.Resource.Id.time; - global::Xamarin.Forms.Platform.Android.Resource.Id.title = global::EFGetStarted.Droid.Resource.Id.title; - global::Xamarin.Forms.Platform.Android.Resource.Id.titleDividerNoCustom = global::EFGetStarted.Droid.Resource.Id.titleDividerNoCustom; - global::Xamarin.Forms.Platform.Android.Resource.Id.title_template = global::EFGetStarted.Droid.Resource.Id.title_template; - global::Xamarin.Forms.Platform.Android.Resource.Id.top = global::EFGetStarted.Droid.Resource.Id.top; - global::Xamarin.Forms.Platform.Android.Resource.Id.topPanel = global::EFGetStarted.Droid.Resource.Id.topPanel; - global::Xamarin.Forms.Platform.Android.Resource.Id.touch_outside = global::EFGetStarted.Droid.Resource.Id.touch_outside; - global::Xamarin.Forms.Platform.Android.Resource.Id.transition_current_scene = global::EFGetStarted.Droid.Resource.Id.transition_current_scene; - global::Xamarin.Forms.Platform.Android.Resource.Id.transition_layout_save = global::EFGetStarted.Droid.Resource.Id.transition_layout_save; - global::Xamarin.Forms.Platform.Android.Resource.Id.transition_position = global::EFGetStarted.Droid.Resource.Id.transition_position; - global::Xamarin.Forms.Platform.Android.Resource.Id.transition_scene_layoutid_cache = global::EFGetStarted.Droid.Resource.Id.transition_scene_layoutid_cache; - global::Xamarin.Forms.Platform.Android.Resource.Id.transition_transform = global::EFGetStarted.Droid.Resource.Id.transition_transform; - global::Xamarin.Forms.Platform.Android.Resource.Id.uniform = global::EFGetStarted.Droid.Resource.Id.uniform; - global::Xamarin.Forms.Platform.Android.Resource.Id.unlabeled = global::EFGetStarted.Droid.Resource.Id.unlabeled; - global::Xamarin.Forms.Platform.Android.Resource.Id.up = global::EFGetStarted.Droid.Resource.Id.up; - global::Xamarin.Forms.Platform.Android.Resource.Id.useLogo = global::EFGetStarted.Droid.Resource.Id.useLogo; - global::Xamarin.Forms.Platform.Android.Resource.Id.view_offset_helper = global::EFGetStarted.Droid.Resource.Id.view_offset_helper; - global::Xamarin.Forms.Platform.Android.Resource.Id.visible = global::EFGetStarted.Droid.Resource.Id.visible; - global::Xamarin.Forms.Platform.Android.Resource.Id.withText = global::EFGetStarted.Droid.Resource.Id.withText; - global::Xamarin.Forms.Platform.Android.Resource.Id.wrap_content = global::EFGetStarted.Droid.Resource.Id.wrap_content; - global::Xamarin.Forms.Platform.Android.Resource.Integer.abc_config_activityDefaultDur = global::EFGetStarted.Droid.Resource.Integer.abc_config_activityDefaultDur; - global::Xamarin.Forms.Platform.Android.Resource.Integer.abc_config_activityShortDur = global::EFGetStarted.Droid.Resource.Integer.abc_config_activityShortDur; - global::Xamarin.Forms.Platform.Android.Resource.Integer.app_bar_elevation_anim_duration = global::EFGetStarted.Droid.Resource.Integer.app_bar_elevation_anim_duration; - global::Xamarin.Forms.Platform.Android.Resource.Integer.bottom_sheet_slide_duration = global::EFGetStarted.Droid.Resource.Integer.bottom_sheet_slide_duration; - global::Xamarin.Forms.Platform.Android.Resource.Integer.cancel_button_image_alpha = global::EFGetStarted.Droid.Resource.Integer.cancel_button_image_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Integer.config_tooltipAnimTime = global::EFGetStarted.Droid.Resource.Integer.config_tooltipAnimTime; - global::Xamarin.Forms.Platform.Android.Resource.Integer.design_snackbar_text_max_lines = global::EFGetStarted.Droid.Resource.Integer.design_snackbar_text_max_lines; - global::Xamarin.Forms.Platform.Android.Resource.Integer.design_tab_indicator_anim_duration_ms = global::EFGetStarted.Droid.Resource.Integer.design_tab_indicator_anim_duration_ms; - global::Xamarin.Forms.Platform.Android.Resource.Integer.hide_password_duration = global::EFGetStarted.Droid.Resource.Integer.hide_password_duration; - global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_btn_anim_delay_ms = global::EFGetStarted.Droid.Resource.Integer.mtrl_btn_anim_delay_ms; - global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_btn_anim_duration_ms = global::EFGetStarted.Droid.Resource.Integer.mtrl_btn_anim_duration_ms; - global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_chip_anim_duration = global::EFGetStarted.Droid.Resource.Integer.mtrl_chip_anim_duration; - global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_tab_indicator_anim_duration_ms = global::EFGetStarted.Droid.Resource.Integer.mtrl_tab_indicator_anim_duration_ms; - global::Xamarin.Forms.Platform.Android.Resource.Integer.show_password_duration = global::EFGetStarted.Droid.Resource.Integer.show_password_duration; - global::Xamarin.Forms.Platform.Android.Resource.Integer.status_bar_notification_info_maxnum = global::EFGetStarted.Droid.Resource.Integer.status_bar_notification_info_maxnum; - global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_fast_out_linear_in = global::EFGetStarted.Droid.Resource.Interpolator.mtrl_fast_out_linear_in; - global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_fast_out_slow_in = global::EFGetStarted.Droid.Resource.Interpolator.mtrl_fast_out_slow_in; - global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_linear = global::EFGetStarted.Droid.Resource.Interpolator.mtrl_linear; - global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_linear_out_slow_in = global::EFGetStarted.Droid.Resource.Interpolator.mtrl_linear_out_slow_in; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_bar_title_item = global::EFGetStarted.Droid.Resource.Layout.abc_action_bar_title_item; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_bar_up_container = global::EFGetStarted.Droid.Resource.Layout.abc_action_bar_up_container; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_menu_item_layout = global::EFGetStarted.Droid.Resource.Layout.abc_action_menu_item_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_menu_layout = global::EFGetStarted.Droid.Resource.Layout.abc_action_menu_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_mode_bar = global::EFGetStarted.Droid.Resource.Layout.abc_action_mode_bar; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_mode_close_item_material = global::EFGetStarted.Droid.Resource.Layout.abc_action_mode_close_item_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_activity_chooser_view = global::EFGetStarted.Droid.Resource.Layout.abc_activity_chooser_view; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_activity_chooser_view_list_item = global::EFGetStarted.Droid.Resource.Layout.abc_activity_chooser_view_list_item; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_alert_dialog_button_bar_material = global::EFGetStarted.Droid.Resource.Layout.abc_alert_dialog_button_bar_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_alert_dialog_material = global::EFGetStarted.Droid.Resource.Layout.abc_alert_dialog_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_alert_dialog_title_material = global::EFGetStarted.Droid.Resource.Layout.abc_alert_dialog_title_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_cascading_menu_item_layout = global::EFGetStarted.Droid.Resource.Layout.abc_cascading_menu_item_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_dialog_title_material = global::EFGetStarted.Droid.Resource.Layout.abc_dialog_title_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_expanded_menu_layout = global::EFGetStarted.Droid.Resource.Layout.abc_expanded_menu_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_checkbox = global::EFGetStarted.Droid.Resource.Layout.abc_list_menu_item_checkbox; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_icon = global::EFGetStarted.Droid.Resource.Layout.abc_list_menu_item_icon; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_layout = global::EFGetStarted.Droid.Resource.Layout.abc_list_menu_item_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_radio = global::EFGetStarted.Droid.Resource.Layout.abc_list_menu_item_radio; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_popup_menu_header_item_layout = global::EFGetStarted.Droid.Resource.Layout.abc_popup_menu_header_item_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_popup_menu_item_layout = global::EFGetStarted.Droid.Resource.Layout.abc_popup_menu_item_layout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_content_include = global::EFGetStarted.Droid.Resource.Layout.abc_screen_content_include; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_simple = global::EFGetStarted.Droid.Resource.Layout.abc_screen_simple; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_simple_overlay_action_mode = global::EFGetStarted.Droid.Resource.Layout.abc_screen_simple_overlay_action_mode; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_toolbar = global::EFGetStarted.Droid.Resource.Layout.abc_screen_toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_search_dropdown_item_icons_2line = global::EFGetStarted.Droid.Resource.Layout.abc_search_dropdown_item_icons_2line; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_search_view = global::EFGetStarted.Droid.Resource.Layout.abc_search_view; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_select_dialog_material = global::EFGetStarted.Droid.Resource.Layout.abc_select_dialog_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_tooltip = global::EFGetStarted.Droid.Resource.Layout.abc_tooltip; - global::Xamarin.Forms.Platform.Android.Resource.Layout.BottomTabLayout = global::EFGetStarted.Droid.Resource.Layout.BottomTabLayout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_bottom_navigation_item = global::EFGetStarted.Droid.Resource.Layout.design_bottom_navigation_item; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_bottom_sheet_dialog = global::EFGetStarted.Droid.Resource.Layout.design_bottom_sheet_dialog; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_snackbar = global::EFGetStarted.Droid.Resource.Layout.design_layout_snackbar; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_snackbar_include = global::EFGetStarted.Droid.Resource.Layout.design_layout_snackbar_include; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_tab_icon = global::EFGetStarted.Droid.Resource.Layout.design_layout_tab_icon; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_tab_text = global::EFGetStarted.Droid.Resource.Layout.design_layout_tab_text; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_menu_item_action_area = global::EFGetStarted.Droid.Resource.Layout.design_menu_item_action_area; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item = global::EFGetStarted.Droid.Resource.Layout.design_navigation_item; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item_header = global::EFGetStarted.Droid.Resource.Layout.design_navigation_item_header; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item_separator = global::EFGetStarted.Droid.Resource.Layout.design_navigation_item_separator; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item_subheader = global::EFGetStarted.Droid.Resource.Layout.design_navigation_item_subheader; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_menu = global::EFGetStarted.Droid.Resource.Layout.design_navigation_menu; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_menu_item = global::EFGetStarted.Droid.Resource.Layout.design_navigation_menu_item; - global::Xamarin.Forms.Platform.Android.Resource.Layout.design_text_input_password_icon = global::EFGetStarted.Droid.Resource.Layout.design_text_input_password_icon; - global::Xamarin.Forms.Platform.Android.Resource.Layout.FlyoutContent = global::EFGetStarted.Droid.Resource.Layout.FlyoutContent; - global::Xamarin.Forms.Platform.Android.Resource.Layout.mtrl_layout_snackbar = global::EFGetStarted.Droid.Resource.Layout.mtrl_layout_snackbar; - global::Xamarin.Forms.Platform.Android.Resource.Layout.mtrl_layout_snackbar_include = global::EFGetStarted.Droid.Resource.Layout.mtrl_layout_snackbar_include; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_action = global::EFGetStarted.Droid.Resource.Layout.notification_action; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_action_tombstone = global::EFGetStarted.Droid.Resource.Layout.notification_action_tombstone; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_media_action = global::EFGetStarted.Droid.Resource.Layout.notification_media_action; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_media_cancel_action = global::EFGetStarted.Droid.Resource.Layout.notification_media_cancel_action; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media = global::EFGetStarted.Droid.Resource.Layout.notification_template_big_media; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media_custom = global::EFGetStarted.Droid.Resource.Layout.notification_template_big_media_custom; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media_narrow = global::EFGetStarted.Droid.Resource.Layout.notification_template_big_media_narrow; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media_narrow_custom = global::EFGetStarted.Droid.Resource.Layout.notification_template_big_media_narrow_custom; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_custom_big = global::EFGetStarted.Droid.Resource.Layout.notification_template_custom_big; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_icon_group = global::EFGetStarted.Droid.Resource.Layout.notification_template_icon_group; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_lines_media = global::EFGetStarted.Droid.Resource.Layout.notification_template_lines_media; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_media = global::EFGetStarted.Droid.Resource.Layout.notification_template_media; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_media_custom = global::EFGetStarted.Droid.Resource.Layout.notification_template_media_custom; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_part_chronometer = global::EFGetStarted.Droid.Resource.Layout.notification_template_part_chronometer; - global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_part_time = global::EFGetStarted.Droid.Resource.Layout.notification_template_part_time; - global::Xamarin.Forms.Platform.Android.Resource.Layout.RootLayout = global::EFGetStarted.Droid.Resource.Layout.RootLayout; - global::Xamarin.Forms.Platform.Android.Resource.Layout.select_dialog_item_material = global::EFGetStarted.Droid.Resource.Layout.select_dialog_item_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.select_dialog_multichoice_material = global::EFGetStarted.Droid.Resource.Layout.select_dialog_multichoice_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.select_dialog_singlechoice_material = global::EFGetStarted.Droid.Resource.Layout.select_dialog_singlechoice_material; - global::Xamarin.Forms.Platform.Android.Resource.Layout.ShellContent = global::EFGetStarted.Droid.Resource.Layout.ShellContent; - global::Xamarin.Forms.Platform.Android.Resource.Layout.support_simple_spinner_dropdown_item = global::EFGetStarted.Droid.Resource.Layout.support_simple_spinner_dropdown_item; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_bar_home_description = global::EFGetStarted.Droid.Resource.String.abc_action_bar_home_description; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_bar_up_description = global::EFGetStarted.Droid.Resource.String.abc_action_bar_up_description; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_menu_overflow_description = global::EFGetStarted.Droid.Resource.String.abc_action_menu_overflow_description; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_mode_done = global::EFGetStarted.Droid.Resource.String.abc_action_mode_done; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_activitychooserview_choose_application = global::EFGetStarted.Droid.Resource.String.abc_activitychooserview_choose_application; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_activity_chooser_view_see_all = global::EFGetStarted.Droid.Resource.String.abc_activity_chooser_view_see_all; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_capital_off = global::EFGetStarted.Droid.Resource.String.abc_capital_off; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_capital_on = global::EFGetStarted.Droid.Resource.String.abc_capital_on; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_body_1_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_body_1_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_body_2_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_body_2_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_button_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_button_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_caption_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_caption_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_1_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_display_1_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_2_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_display_2_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_3_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_display_3_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_4_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_display_4_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_headline_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_headline_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_menu_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_menu_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_subhead_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_subhead_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_title_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_title_material; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_alt_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_alt_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_ctrl_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_ctrl_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_delete_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_delete_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_enter_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_enter_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_function_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_function_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_meta_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_meta_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_shift_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_shift_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_space_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_space_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_sym_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_sym_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_prepend_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_prepend_shortcut_label; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_clear = global::EFGetStarted.Droid.Resource.String.abc_searchview_description_clear; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_query = global::EFGetStarted.Droid.Resource.String.abc_searchview_description_query; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_search = global::EFGetStarted.Droid.Resource.String.abc_searchview_description_search; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_submit = global::EFGetStarted.Droid.Resource.String.abc_searchview_description_submit; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_voice = global::EFGetStarted.Droid.Resource.String.abc_searchview_description_voice; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_search_hint = global::EFGetStarted.Droid.Resource.String.abc_search_hint; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_shareactionprovider_share_with = global::EFGetStarted.Droid.Resource.String.abc_shareactionprovider_share_with; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_shareactionprovider_share_with_application = global::EFGetStarted.Droid.Resource.String.abc_shareactionprovider_share_with_application; - global::Xamarin.Forms.Platform.Android.Resource.String.abc_toolbar_collapse_description = global::EFGetStarted.Droid.Resource.String.abc_toolbar_collapse_description; - global::Xamarin.Forms.Platform.Android.Resource.String.appbar_scrolling_view_behavior = global::EFGetStarted.Droid.Resource.String.appbar_scrolling_view_behavior; - global::Xamarin.Forms.Platform.Android.Resource.String.bottom_sheet_behavior = global::EFGetStarted.Droid.Resource.String.bottom_sheet_behavior; - global::Xamarin.Forms.Platform.Android.Resource.String.character_counter_content_description = global::EFGetStarted.Droid.Resource.String.character_counter_content_description; - global::Xamarin.Forms.Platform.Android.Resource.String.character_counter_pattern = global::EFGetStarted.Droid.Resource.String.character_counter_pattern; - global::Xamarin.Forms.Platform.Android.Resource.String.fab_transformation_scrim_behavior = global::EFGetStarted.Droid.Resource.String.fab_transformation_scrim_behavior; - global::Xamarin.Forms.Platform.Android.Resource.String.fab_transformation_sheet_behavior = global::EFGetStarted.Droid.Resource.String.fab_transformation_sheet_behavior; - global::Xamarin.Forms.Platform.Android.Resource.String.hide_bottom_view_on_scroll_behavior = global::EFGetStarted.Droid.Resource.String.hide_bottom_view_on_scroll_behavior; - global::Xamarin.Forms.Platform.Android.Resource.String.mtrl_chip_close_icon_content_description = global::EFGetStarted.Droid.Resource.String.mtrl_chip_close_icon_content_description; - global::Xamarin.Forms.Platform.Android.Resource.String.overflow_tab_title = global::EFGetStarted.Droid.Resource.String.overflow_tab_title; - global::Xamarin.Forms.Platform.Android.Resource.String.password_toggle_content_description = global::EFGetStarted.Droid.Resource.String.password_toggle_content_description; - global::Xamarin.Forms.Platform.Android.Resource.String.path_password_eye = global::EFGetStarted.Droid.Resource.String.path_password_eye; - global::Xamarin.Forms.Platform.Android.Resource.String.path_password_eye_mask_strike_through = global::EFGetStarted.Droid.Resource.String.path_password_eye_mask_strike_through; - global::Xamarin.Forms.Platform.Android.Resource.String.path_password_eye_mask_visible = global::EFGetStarted.Droid.Resource.String.path_password_eye_mask_visible; - global::Xamarin.Forms.Platform.Android.Resource.String.path_password_strike_through = global::EFGetStarted.Droid.Resource.String.path_password_strike_through; - global::Xamarin.Forms.Platform.Android.Resource.String.search_menu_title = global::EFGetStarted.Droid.Resource.String.search_menu_title; - global::Xamarin.Forms.Platform.Android.Resource.String.status_bar_notification_info_overflow = global::EFGetStarted.Droid.Resource.String.status_bar_notification_info_overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.AlertDialog_AppCompat = global::EFGetStarted.Droid.Resource.Style.AlertDialog_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.AlertDialog_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.AlertDialog_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Animation_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_AppCompat_DropDownUp = global::EFGetStarted.Droid.Resource.Style.Animation_AppCompat_DropDownUp; - global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_AppCompat_Tooltip = global::EFGetStarted.Droid.Resource.Style.Animation_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_Design_BottomSheetDialog = global::EFGetStarted.Droid.Resource.Style.Animation_Design_BottomSheetDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.AppCompatDialogStyle = global::EFGetStarted.Droid.Resource.Style.AppCompatDialogStyle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_AlertDialog_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_AlertDialog_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_AlertDialog_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_AlertDialog_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Animation_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_Animation_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Animation_AppCompat_DropDownUp = global::EFGetStarted.Droid.Resource.Style.Base_Animation_AppCompat_DropDownUp; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Animation_AppCompat_Tooltip = global::EFGetStarted.Droid.Resource.Style.Base_Animation_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_CardView = global::EFGetStarted.Droid.Resource.Style.Base_CardView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_DialogWindowTitleBackground_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_DialogWindowTitleBackground_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_DialogWindowTitle_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_DialogWindowTitle_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Body1 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body1; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Body2 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body2; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Button = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Caption = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Caption; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display1 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display1; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display2 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display2; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display3 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display3; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display4 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display4; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Headline = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Headline; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Large = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Medium = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Menu = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_SearchResult = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Small = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Subhead = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Title = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Tooltip = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dark = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_CompactMenu = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_CompactMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_CompactMenu = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_CompactMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V21_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V21_Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V22_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V22_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V22_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V22_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V23_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V23_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V23_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V23_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V26_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V26_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V26_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V26_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V26_Widget_AppCompat_Toolbar = global::EFGetStarted.Droid.Resource.Style.Base_V26_Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V28_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V28_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V28_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V28_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V7_Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V7_Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView = global::EFGetStarted.Droid.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Widget_AppCompat_EditText = global::EFGetStarted.Droid.Resource.Style.Base_V7_Widget_AppCompat_EditText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Widget_AppCompat_Toolbar = global::EFGetStarted.Droid.Resource.Style.Base_V7_Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionButton = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionMode = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionMode; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActivityChooserView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActivityChooserView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ButtonBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Borderless = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Colored = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Small = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_EditText = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_EditText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ImageButton = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ImageButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListMenuView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ListMenuView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListPopupWindow = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ListPopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ListView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListView_DropDown = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ListView_DropDown; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListView_Menu = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ListView_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_PopupMenu = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_PopupWindow = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_PopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ProgressBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_RatingBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_RatingBar_Small = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SearchView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_SearchView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SeekBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Spinner = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Toolbar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_Design_TabLayout = global::EFGetStarted.Droid.Resource.Style.Base_Widget_Design_TabLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_MaterialComponents_Chip = global::EFGetStarted.Droid.Resource.Style.Base_Widget_MaterialComponents_Chip; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText = global::EFGetStarted.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout = global::EFGetStarted.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.CardView = global::EFGetStarted.Droid.Resource.Style.CardView; - global::Xamarin.Forms.Platform.Android.Resource.Style.CardView_Dark = global::EFGetStarted.Droid.Resource.Style.CardView_Dark; - global::Xamarin.Forms.Platform.Android.Resource.Style.CardView_Light = global::EFGetStarted.Droid.Resource.Style.CardView_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.collectionViewTheme = global::EFGetStarted.Droid.Resource.Style.collectionViewTheme; - global::Xamarin.Forms.Platform.Android.Resource.Style.MainTheme = global::EFGetStarted.Droid.Resource.Style.MainTheme; - global::Xamarin.Forms.Platform.Android.Resource.Style.MainTheme_Base = global::EFGetStarted.Droid.Resource.Style.MainTheme_Base; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_AppCompat = global::EFGetStarted.Droid.Resource.Style.Platform_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Platform_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents = global::EFGetStarted.Droid.Resource.Style.Platform_MaterialComponents; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Platform_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents_Light = global::EFGetStarted.Droid.Resource.Style.Platform_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Platform_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_ThemeOverlay_AppCompat = global::EFGetStarted.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark = global::EFGetStarted.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_ThemeOverlay_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V21_AppCompat = global::EFGetStarted.Droid.Resource.Style.Platform_V21_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V21_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Platform_V21_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V25_AppCompat = global::EFGetStarted.Droid.Resource.Style.Platform_V25_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V25_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Platform_V25_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_Widget_AppCompat_Spinner = global::EFGetStarted.Droid.Resource.Style.Platform_Widget_AppCompat_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton = global::EFGetStarted.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = global::EFGetStarted.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.scrollViewScrollBars = global::EFGetStarted.Droid.Resource.Style.scrollViewScrollBars; - global::Xamarin.Forms.Platform.Android.Resource.Style.scrollViewTheme = global::EFGetStarted.Droid.Resource.Style.scrollViewTheme; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Body1 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Body1; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Body2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Body2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Button = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Caption = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Caption; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display1 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Display1; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Display2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display3 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Display3; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display4 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Display4; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Headline = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Headline; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Large = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Large_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Large_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Medium = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Medium; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Medium_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Medium_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Menu = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_SearchResult_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Small = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Small_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Small_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Subhead = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Subhead; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Title_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Title_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Tooltip = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Switch = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Switch; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Info = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Info; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Info_Media = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Info_Media; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Line2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Line2_Media = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2_Media; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Media = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Media; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Time = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Time; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Time_Media = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Time_Media; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Title_Media = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Title_Media; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Counter = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Counter; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Counter_Overflow = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Counter_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Error = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Error; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_HelperText = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_HelperText; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Hint = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Hint; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Snackbar_Message = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Snackbar_Message; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Tab = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Tab; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Body1 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Body1; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Body2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Body2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Button = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Caption = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Caption; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Chip = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Chip; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline1 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline1; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline3 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline3; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline4 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline4; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline5 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline5; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline6 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline6; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Overline = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Overline; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Subtitle1 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle1; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Subtitle2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle2; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Tab = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Tab; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_ActionBar = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dark = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dark = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Light = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_CompactMenu = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_CompactMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_Dialog = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_DarkActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design = global::EFGetStarted.Droid.Resource.Style.Theme_Design; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_BottomSheetDialog = global::EFGetStarted.Droid.Resource.Style.Theme_Design_BottomSheetDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_Light = global::EFGetStarted.Droid.Resource.Style.Theme_Design_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_Light_BottomSheetDialog = global::EFGetStarted.Droid.Resource.Style.Theme_Design_Light_BottomSheetDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_Light_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_Design_Light_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_Design_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_BottomSheetDialog = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_BottomSheetDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Bridge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_CompactMenu = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_CompactMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Bridge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_Solid = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionBar_Solid; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_TabBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_TabText = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_TabView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionButton = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionButton_CloseMode = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionButton_CloseMode; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionButton_Overflow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionMode = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionMode; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActivityChooserView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActivityChooserView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_AutoCompleteTextView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ButtonBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ButtonBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Borderless = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button_Borderless; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Borderless_Colored = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Colored = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Small = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_CompoundButton_Switch = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_CompoundButton_Switch; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_DrawerArrowToggle = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_DrawerArrowToggle; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_DropDownItem_Spinner = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_DropDownItem_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_EditText = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_EditText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ImageButton = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ImageButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionButton = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActivityChooserView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActivityChooserView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ListPopupWindow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ListPopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ListView_DropDown = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ListView_DropDown; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_PopupMenu = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_SearchView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_SearchView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListMenuView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ListMenuView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListPopupWindow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ListPopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ListView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListView_DropDown = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ListView_DropDown; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListView_Menu = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ListView_Menu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_PopupMenu = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_PopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_PopupMenu_Overflow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_PopupWindow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_PopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ProgressBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ProgressBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_RatingBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_RatingBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_RatingBar_Indicator = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_RatingBar_Indicator; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_RatingBar_Small = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_RatingBar_Small; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SearchView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_SearchView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SearchView_ActionBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_SearchView_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SeekBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_SeekBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SeekBar_Discrete = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_SeekBar_Discrete; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner_DropDown = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner_Underlined = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Spinner_Underlined; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_TextView_SpinnerItem = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Toolbar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Compat_NotificationActionContainer = global::EFGetStarted.Droid.Resource.Style.Widget_Compat_NotificationActionContainer; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Compat_NotificationActionText = global::EFGetStarted.Droid.Resource.Style.Widget_Compat_NotificationActionText; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_AppBarLayout = global::EFGetStarted.Droid.Resource.Style.Widget_Design_AppBarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_BottomNavigationView = global::EFGetStarted.Droid.Resource.Style.Widget_Design_BottomNavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_BottomSheet_Modal = global::EFGetStarted.Droid.Resource.Style.Widget_Design_BottomSheet_Modal; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_CollapsingToolbar = global::EFGetStarted.Droid.Resource.Style.Widget_Design_CollapsingToolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_FloatingActionButton = global::EFGetStarted.Droid.Resource.Style.Widget_Design_FloatingActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_NavigationView = global::EFGetStarted.Droid.Resource.Style.Widget_Design_NavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_ScrimInsetsFrameLayout = global::EFGetStarted.Droid.Resource.Style.Widget_Design_ScrimInsetsFrameLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_Snackbar = global::EFGetStarted.Droid.Resource.Style.Widget_Design_Snackbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_TabLayout = global::EFGetStarted.Droid.Resource.Style.Widget_Design_TabLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_TextInputLayout = global::EFGetStarted.Droid.Resource.Style.Widget_Design_TextInputLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomAppBar = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomNavigationView = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_Icon = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_CardView = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_CardView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_ChipGroup = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_ChipGroup; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Action = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Chip_Action; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Choice = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Chip_Choice; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Entry = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Chip_Entry; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Filter = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Chip_Filter; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_FloatingActionButton = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_FloatingActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_NavigationView = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_NavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Snackbar = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Snackbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TabLayout = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TabLayout; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TabLayout_Colored = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TabLayout_Colored; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Toolbar = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Support_CoordinatorLayout = global::EFGetStarted.Droid.Resource.Style.Widget_Support_CoordinatorLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar = global::EFGetStarted.Droid.Resource.Styleable.ActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBarLayout = global::EFGetStarted.Droid.Resource.Styleable.ActionBarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBarLayout_android_layout_gravity = global::EFGetStarted.Droid.Resource.Styleable.ActionBarLayout_android_layout_gravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_background = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_background; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_backgroundSplit = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_backgroundSplit; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_backgroundStacked = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_backgroundStacked; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetEnd = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetEndWithActions = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetEndWithActions; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetLeft = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetRight = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetStart = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetStartWithNavigation = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetStartWithNavigation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_customNavigationLayout = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_customNavigationLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_displayOptions = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_displayOptions; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_divider = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_divider; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_elevation = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_height = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_height; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_hideOnContentScroll = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_hideOnContentScroll; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_homeAsUpIndicator = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_homeAsUpIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_homeLayout = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_homeLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_icon = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_icon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_indeterminateProgressStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_indeterminateProgressStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_itemPadding = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_itemPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_logo = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_logo; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_navigationMode = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_navigationMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_popupTheme = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_popupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_progressBarPadding = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_progressBarPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_progressBarStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_progressBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_subtitle = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_subtitleTextStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_subtitleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_title = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_title; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_titleTextStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_titleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMenuItemView = global::EFGetStarted.Droid.Resource.Styleable.ActionMenuItemView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMenuItemView_android_minWidth = global::EFGetStarted.Droid.Resource.Styleable.ActionMenuItemView_android_minWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMenuView = global::EFGetStarted.Droid.Resource.Styleable.ActionMenuView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode = global::EFGetStarted.Droid.Resource.Styleable.ActionMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_background = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_background; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_backgroundSplit = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_backgroundSplit; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_closeItemLayout = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_closeItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_height = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_height; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_subtitleTextStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_subtitleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_titleTextStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_titleTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActivityChooserView = global::EFGetStarted.Droid.Resource.Styleable.ActivityChooserView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable = global::EFGetStarted.Droid.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActivityChooserView_initialActivityCount = global::EFGetStarted.Droid.Resource.Styleable.ActivityChooserView_initialActivityCount; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_android_layout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_android_layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_buttonIconDimen = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_buttonIconDimen; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_buttonPanelSideLayout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_buttonPanelSideLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_listItemLayout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_listItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_listLayout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_listLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_multiChoiceItemLayout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_multiChoiceItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_showTitle = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_showTitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_singleChoiceItemLayout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_singleChoiceItemLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableItem = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableItem_android_id = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_id; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableTransition; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayoutStates; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_collapsed = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsed; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_collapsible = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_liftable = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayoutStates_state_liftable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_lifted = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayoutStates_state_lifted; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_android_background = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_android_background; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_elevation = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_expanded = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_expanded; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_Layout = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_liftOnScroll = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_liftOnScroll; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView = global::EFGetStarted.Droid.Resource.Styleable.AppCompatImageView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_android_src = global::EFGetStarted.Droid.Resource.Styleable.AppCompatImageView_android_src; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_srcCompat = global::EFGetStarted.Droid.Resource.Styleable.AppCompatImageView_srcCompat; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_tint = global::EFGetStarted.Droid.Resource.Styleable.AppCompatImageView_tint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_tintMode = global::EFGetStarted.Droid.Resource.Styleable.AppCompatImageView_tintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar = global::EFGetStarted.Droid.Resource.Styleable.AppCompatSeekBar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_android_thumb = global::EFGetStarted.Droid.Resource.Styleable.AppCompatSeekBar_android_thumb; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_tickMark = global::EFGetStarted.Droid.Resource.Styleable.AppCompatSeekBar_tickMark; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_tickMarkTint = global::EFGetStarted.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode = global::EFGetStarted.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableBottom = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableEnd = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableLeft = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableRight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableStart = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableTop = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_textAppearance = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_textAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_android_textAppearance = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_android_textAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizePresetSizes = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_autoSizePresetSizes; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeTextType = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_autoSizeTextType; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_fontFamily = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_fontFamily; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_lineHeight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_lineHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_textAllCaps = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_textAllCaps; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarDivider = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarDivider; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarItemBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarItemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarPopupTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarPopupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarSize = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarSplitStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarSplitStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTabStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarTabStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionDropDownStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionDropDownStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionMenuTextColor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCutDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeCutDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeFindDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeFindDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModePasteDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModePasteDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeShareDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeShareDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeSplitBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeSplitBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_activityChooserViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_activityChooserViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_alertDialogStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_alertDialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_android_windowIsFloating = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_android_windowIsFloating; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_borderlessButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_borderlessButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonStyleSmall = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonStyleSmall; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_checkboxStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_checkboxStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_checkedTextViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_checkedTextViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorAccent = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorAccent; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorBackgroundFloating = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorBackgroundFloating; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorButtonNormal = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorButtonNormal; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorControlActivated = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorControlActivated; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorControlHighlight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorControlHighlight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorControlNormal = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorControlNormal; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorError = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorError; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorPrimary = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorPrimary; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorPrimaryDark = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorPrimaryDark; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_controlBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_controlBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dialogCornerRadius = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dialogCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dialogPreferredPadding = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dialogPreferredPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dialogTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dividerHorizontal = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dividerHorizontal; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dividerVertical = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dividerVertical; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dropDownListViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dropDownListViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_editTextBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_editTextBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_editTextColor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_editTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_editTextStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_editTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_homeAsUpIndicator = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_homeAsUpIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_imageButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_imageButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listDividerAlertDialog = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listDividerAlertDialog; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listMenuViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listMenuViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPopupWindowStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPopupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemHeight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_panelBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_panelBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_panelMenuListTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_panelMenuListTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_panelMenuListWidth = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_panelMenuListWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_popupMenuStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_popupMenuStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_popupWindowStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_popupWindowStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_radioButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_radioButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_ratingBarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_searchViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_searchViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_seekBarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_seekBarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_selectableItemBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_spinnerStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_spinnerStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_switchStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_switchStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceListItem = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textColorSearchUrl = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textColorSearchUrl; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_toolbarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_toolbarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_tooltipForegroundColor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_tooltipForegroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_tooltipFrameBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_tooltipFrameBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_viewInflaterClass = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_viewInflaterClass; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowActionBar = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowActionBar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowActionBarOverlay = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowActionBarOverlay; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowActionModeOverlay = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowActionModeOverlay; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowMinWidthMajor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMajor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowMinWidthMinor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMinor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowNoTitle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowNoTitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_backgroundTint = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_backgroundTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabAlignmentMode = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_fabAlignmentMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabCradleMargin = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_fabCradleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_hideOnScroll = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_hideOnScroll; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_elevation = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemBackground = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemIconSize = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemIconTint = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemTextColor = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_labelVisibilityMode = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_labelVisibilityMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_menu = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_menu; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout = global::EFGetStarted.Droid.Resource.Styleable.BottomSheetBehavior_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents = global::EFGetStarted.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable = global::EFGetStarted.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight = global::EFGetStarted.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed = global::EFGetStarted.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ButtonBarLayout = global::EFGetStarted.Droid.Resource.Styleable.ButtonBarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ButtonBarLayout_allowStacking = global::EFGetStarted.Droid.Resource.Styleable.ButtonBarLayout_allowStacking; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView = global::EFGetStarted.Droid.Resource.Styleable.CardView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_android_minHeight = global::EFGetStarted.Droid.Resource.Styleable.CardView_android_minHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_android_minWidth = global::EFGetStarted.Droid.Resource.Styleable.CardView_android_minWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardBackgroundColor = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardCornerRadius = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardElevation = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardElevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardMaxElevation = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardMaxElevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardPreventCornerOverlap = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardPreventCornerOverlap; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardUseCompatPadding = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardUseCompatPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPadding = global::EFGetStarted.Droid.Resource.Styleable.CardView_contentPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingBottom = global::EFGetStarted.Droid.Resource.Styleable.CardView_contentPaddingBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingLeft = global::EFGetStarted.Droid.Resource.Styleable.CardView_contentPaddingLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingRight = global::EFGetStarted.Droid.Resource.Styleable.CardView_contentPaddingRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingTop = global::EFGetStarted.Droid.Resource.Styleable.CardView_contentPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip = global::EFGetStarted.Droid.Resource.Styleable.Chip; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_checkedChip = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_checkedChip; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_chipSpacing = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_chipSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_chipSpacingHorizontal = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_chipSpacingHorizontal; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_chipSpacingVertical = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_chipSpacingVertical; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_singleLine = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_singleLine; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_singleSelection = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_singleSelection; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_checkable = global::EFGetStarted.Droid.Resource.Styleable.Chip_android_checkable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_ellipsize = global::EFGetStarted.Droid.Resource.Styleable.Chip_android_ellipsize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_maxWidth = global::EFGetStarted.Droid.Resource.Styleable.Chip_android_maxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_text = global::EFGetStarted.Droid.Resource.Styleable.Chip_android_text; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_textAppearance = global::EFGetStarted.Droid.Resource.Styleable.Chip_android_textAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_checkedIcon = global::EFGetStarted.Droid.Resource.Styleable.Chip_checkedIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_checkedIconEnabled = global::EFGetStarted.Droid.Resource.Styleable.Chip_checkedIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_checkedIconVisible = global::EFGetStarted.Droid.Resource.Styleable.Chip_checkedIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipBackgroundColor = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipCornerRadius = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipCornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipEndPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIcon = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconEnabled = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconSize = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconTint = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconVisible = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipMinHeight = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipMinHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipStartPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipStrokeColor = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipStrokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipStrokeWidth = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipStrokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIcon = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconEnabled = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconEndPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconSize = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconStartPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconTint = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconVisible = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconVisible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_hideMotionSpec = global::EFGetStarted.Droid.Resource.Styleable.Chip_hideMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_iconEndPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_iconEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_iconStartPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_iconStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_rippleColor = global::EFGetStarted.Droid.Resource.Styleable.Chip_rippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_showMotionSpec = global::EFGetStarted.Droid.Resource.Styleable.Chip_showMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_textEndPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_textEndPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_textStartPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_textStartPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_contentScrim = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_contentScrim; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_Layout = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_title = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_title; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_titleEnabled = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_titleEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_toolbarId = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_toolbarId; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem_alpha = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem_android_alpha = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem_android_alpha; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem_android_color = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem_android_color; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton = global::EFGetStarted.Droid.Resource.Styleable.CompoundButton; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton_android_button = global::EFGetStarted.Droid.Resource.Styleable.CompoundButton_android_button; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton_buttonTint = global::EFGetStarted.Droid.Resource.Styleable.CompoundButton_buttonTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton_buttonTintMode = global::EFGetStarted.Droid.Resource.Styleable.CompoundButton_buttonTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_keylines = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_keylines; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_statusBarBackground = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_statusBarBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DesignTheme = global::EFGetStarted.Droid.Resource.Styleable.DesignTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DesignTheme_bottomSheetDialogTheme = global::EFGetStarted.Droid.Resource.Styleable.DesignTheme_bottomSheetDialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DesignTheme_bottomSheetStyle = global::EFGetStarted.Droid.Resource.Styleable.DesignTheme_bottomSheetStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_arrowHeadLength = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_arrowHeadLength; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_arrowShaftLength = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_arrowShaftLength; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_barLength = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_barLength; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_color = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_color; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_drawableSize = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_drawableSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_gapBetweenBars = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_gapBetweenBars; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_spinBars = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_spinBars; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_thickness = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_thickness; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_backgroundTint = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_backgroundTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_backgroundTintMode = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_backgroundTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_Behavior_Layout = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_borderWidth = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_borderWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_elevation = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_fabCustomSize = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_fabCustomSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_fabSize = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_fabSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_hideMotionSpec = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_hideMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_maxImageSize = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_maxImageSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_pressedTranslationZ = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_pressedTranslationZ; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_rippleColor = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_rippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_showMotionSpec = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_showMotionSpec; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_useCompatPadding = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_useCompatPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FlowLayout = global::EFGetStarted.Droid.Resource.Styleable.FlowLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FlowLayout_itemSpacing = global::EFGetStarted.Droid.Resource.Styleable.FlowLayout_itemSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FlowLayout_lineSpacing = global::EFGetStarted.Droid.Resource.Styleable.FlowLayout_lineSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily = global::EFGetStarted.Droid.Resource.Styleable.FontFamily; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_font = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_font; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_fontStyle = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_fontStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_fontVariationSettings = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_fontVariationSettings; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_fontWeight = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_fontWeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_ttcIndex = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_ttcIndex; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_font = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_font; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_fontStyle = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_fontStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_fontVariationSettings = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_fontVariationSettings; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_fontWeight = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_fontWeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_ttcIndex = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_ttcIndex; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderAuthority = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderAuthority; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderCerts = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderCerts; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderFetchStrategy = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderFetchStrategy; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderFetchTimeout = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderFetchTimeout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderPackage = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderPackage; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderQuery = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderQuery; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout = global::EFGetStarted.Droid.Resource.Styleable.ForegroundLinearLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout_android_foreground = global::EFGetStarted.Droid.Resource.Styleable.ForegroundLinearLayout_android_foreground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity = global::EFGetStarted.Droid.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding = global::EFGetStarted.Droid.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColorItem = global::EFGetStarted.Droid.Resource.Styleable.GradientColorItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColorItem_android_color = global::EFGetStarted.Droid.Resource.Styleable.GradientColorItem_android_color; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColorItem_android_offset = global::EFGetStarted.Droid.Resource.Styleable.GradientColorItem_android_offset; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_centerColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_centerColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_centerX = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_centerX; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_centerY = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_centerY; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_endColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_endColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_endX = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_endX; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_endY = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_endY; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_gradientRadius = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_gradientRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_startColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_startColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_startX = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_startX; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_startY = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_startY; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_tileMode = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_tileMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_type = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_type; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ItemsViewRendererTheme = global::EFGetStarted.Droid.Resource.Styleable.ItemsViewRendererTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ItemsViewRendererTheme_collectionViewStyle = global::EFGetStarted.Droid.Resource.Styleable.ItemsViewRendererTheme_collectionViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_baselineAligned = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAligned; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_gravity = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_android_gravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_orientation = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_android_orientation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_weightSum = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_android_weightSum; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_divider = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_divider; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_dividerPadding = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_dividerPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_showDividers = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_showDividers; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ListPopupWindow = global::EFGetStarted.Droid.Resource.Styleable.ListPopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset = global::EFGetStarted.Droid.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset = global::EFGetStarted.Droid.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetBottom = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_android_insetBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetLeft = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_android_insetLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetRight = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_android_insetRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetTop = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_android_insetTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_backgroundTint = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_backgroundTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_backgroundTintMode = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_backgroundTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_cornerRadius = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_cornerRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_icon = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_icon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconGravity = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_iconGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconPadding = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_iconPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconSize = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_iconSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconTint = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_iconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconTintMode = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_iconTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_rippleColor = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_rippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_strokeColor = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_strokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_strokeWidth = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_strokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialCardView = global::EFGetStarted.Droid.Resource.Styleable.MaterialCardView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialCardView_strokeColor = global::EFGetStarted.Droid.Resource.Styleable.MaterialCardView_strokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialCardView_strokeWidth = global::EFGetStarted.Droid.Resource.Styleable.MaterialCardView_strokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_chipStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_chipStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorAccent = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_colorAccent; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorPrimary = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimary; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorSecondary = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_colorSecondary; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_editTextStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_editTextStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_scrimBackground = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_scrimBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_tabStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_tabStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textInputStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textInputStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_checkableBehavior = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_checkableBehavior; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_enabled = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_enabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_id = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_id; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_menuCategory = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_menuCategory; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_orderInCategory = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_orderInCategory; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_visible = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_visible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem = global::EFGetStarted.Droid.Resource.Styleable.MenuItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_actionLayout = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_actionLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_actionProviderClass = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_actionProviderClass; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_actionViewClass = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_actionViewClass; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_alphabeticModifiers = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_alphabeticModifiers; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_alphabeticShortcut = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_alphabeticShortcut; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_checkable = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_checkable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_checked = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_checked; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_enabled = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_enabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_icon = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_icon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_id = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_id; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_menuCategory = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_menuCategory; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_numericShortcut = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_numericShortcut; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_onClick = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_onClick; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_orderInCategory = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_orderInCategory; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_title = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_title; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_titleCondensed = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_titleCondensed; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_visible = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_visible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_contentDescription = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_contentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_iconTint = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_iconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_iconTintMode = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_iconTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_numericModifiers = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_numericModifiers; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_showAsAction = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_showAsAction; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_tooltipText = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_tooltipText; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView = global::EFGetStarted.Droid.Resource.Styleable.MenuView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_headerBackground = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_headerBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_horizontalDivider = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_horizontalDivider; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_itemBackground = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_itemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_itemIconDisabledAlpha = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_itemIconDisabledAlpha; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_itemTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_itemTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_verticalDivider = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_verticalDivider; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_windowAnimationStyle = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_windowAnimationStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_preserveIconSpacing = global::EFGetStarted.Droid.Resource.Styleable.MenuView_preserveIconSpacing; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_subMenuArrow = global::EFGetStarted.Droid.Resource.Styleable.MenuView_subMenuArrow; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView = global::EFGetStarted.Droid.Resource.Styleable.NavigationView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_android_background = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_android_background; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_android_fitsSystemWindows = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_android_fitsSystemWindows; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_android_maxWidth = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_android_maxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_elevation = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_headerLayout = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_headerLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemBackground = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemHorizontalPadding = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemHorizontalPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemIconPadding = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemIconPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemIconTint = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemTextColor = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_menu = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_menu; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow = global::EFGetStarted.Droid.Resource.Styleable.PopupWindow; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindowBackgroundState = global::EFGetStarted.Droid.Resource.Styleable.PopupWindowBackgroundState; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor = global::EFGetStarted.Droid.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow_android_popupAnimationStyle = global::EFGetStarted.Droid.Resource.Styleable.PopupWindow_android_popupAnimationStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow_android_popupBackground = global::EFGetStarted.Droid.Resource.Styleable.PopupWindow_android_popupBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow_overlapAnchor = global::EFGetStarted.Droid.Resource.Styleable.PopupWindow_overlapAnchor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecycleListView = global::EFGetStarted.Droid.Resource.Styleable.RecycleListView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecycleListView_paddingBottomNoButtons = global::EFGetStarted.Droid.Resource.Styleable.RecycleListView_paddingBottomNoButtons; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecycleListView_paddingTopNoTitle = global::EFGetStarted.Droid.Resource.Styleable.RecycleListView_paddingTopNoTitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_android_descendantFocusability = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_android_descendantFocusability; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_android_orientation = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_android_orientation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollEnabled = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_fastScrollEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_layoutManager = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_layoutManager; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_reverseLayout = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_reverseLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_spanCount = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_spanCount; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_stackFromEnd = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_stackFromEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrimInsetsFrameLayout = global::EFGetStarted.Droid.Resource.Styleable.ScrimInsetsFrameLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground = global::EFGetStarted.Droid.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrollingViewBehavior_Layout = global::EFGetStarted.Droid.Resource.Styleable.ScrollingViewBehavior_Layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop = global::EFGetStarted.Droid.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrollViewRendererTheme = global::EFGetStarted.Droid.Resource.Styleable.ScrollViewRendererTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrollViewRendererTheme_scrollViewStyle = global::EFGetStarted.Droid.Resource.Styleable.ScrollViewRendererTheme_scrollViewStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView = global::EFGetStarted.Droid.Resource.Styleable.SearchView; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_focusable = global::EFGetStarted.Droid.Resource.Styleable.SearchView_android_focusable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_imeOptions = global::EFGetStarted.Droid.Resource.Styleable.SearchView_android_imeOptions; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_inputType = global::EFGetStarted.Droid.Resource.Styleable.SearchView_android_inputType; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_maxWidth = global::EFGetStarted.Droid.Resource.Styleable.SearchView_android_maxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_closeIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_closeIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_commitIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_commitIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_defaultQueryHint = global::EFGetStarted.Droid.Resource.Styleable.SearchView_defaultQueryHint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_goIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_goIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_iconifiedByDefault = global::EFGetStarted.Droid.Resource.Styleable.SearchView_iconifiedByDefault; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_layout = global::EFGetStarted.Droid.Resource.Styleable.SearchView_layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_queryBackground = global::EFGetStarted.Droid.Resource.Styleable.SearchView_queryBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_queryHint = global::EFGetStarted.Droid.Resource.Styleable.SearchView_queryHint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_searchHintIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_searchHintIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_searchIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_searchIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_submitBackground = global::EFGetStarted.Droid.Resource.Styleable.SearchView_submitBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_suggestionRowLayout = global::EFGetStarted.Droid.Resource.Styleable.SearchView_suggestionRowLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_voiceIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_voiceIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Snackbar = global::EFGetStarted.Droid.Resource.Styleable.Snackbar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout = global::EFGetStarted.Droid.Resource.Styleable.SnackbarLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout_android_maxWidth = global::EFGetStarted.Droid.Resource.Styleable.SnackbarLayout_android_maxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout_elevation = global::EFGetStarted.Droid.Resource.Styleable.SnackbarLayout_elevation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout_maxActionInlineWidth = global::EFGetStarted.Droid.Resource.Styleable.SnackbarLayout_maxActionInlineWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Snackbar_snackbarButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.Snackbar_snackbarButtonStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Snackbar_snackbarStyle = global::EFGetStarted.Droid.Resource.Styleable.Snackbar_snackbarStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner = global::EFGetStarted.Droid.Resource.Styleable.Spinner; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_dropDownWidth = global::EFGetStarted.Droid.Resource.Styleable.Spinner_android_dropDownWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_entries = global::EFGetStarted.Droid.Resource.Styleable.Spinner_android_entries; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_popupBackground = global::EFGetStarted.Droid.Resource.Styleable.Spinner_android_popupBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_prompt = global::EFGetStarted.Droid.Resource.Styleable.Spinner_android_prompt; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_popupTheme = global::EFGetStarted.Droid.Resource.Styleable.Spinner_popupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawableItem = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawableItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawableItem_android_drawable = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawableItem_android_drawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_constantSize = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_constantSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_dither = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_dither; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_enterFadeDuration = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_enterFadeDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_exitFadeDuration = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_exitFadeDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_variablePadding = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_variablePadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_visible = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_visible; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_android_textOff = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_android_textOff; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_android_textOn = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_android_textOn; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_android_thumb = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_android_thumb; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_showText = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_showText; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_splitTrack = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_splitTrack; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_switchMinWidth = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_switchMinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_switchPadding = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_switchPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_switchTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_switchTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_thumbTextPadding = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_thumbTextPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_thumbTint = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_thumbTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_thumbTintMode = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_thumbTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_track = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_track; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_trackTint = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_trackTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_trackTintMode = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_trackTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem = global::EFGetStarted.Droid.Resource.Styleable.TabItem; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem_android_icon = global::EFGetStarted.Droid.Resource.Styleable.TabItem_android_icon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem_android_layout = global::EFGetStarted.Droid.Resource.Styleable.TabItem_android_layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem_android_text = global::EFGetStarted.Droid.Resource.Styleable.TabItem_android_text; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout = global::EFGetStarted.Droid.Resource.Styleable.TabLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabBackground = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabBackground; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabContentStart = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabContentStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabGravity = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIconTint = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIconTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIconTintMode = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIconTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicator = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicator; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorColor = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicatorColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorFullWidth = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicatorFullWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorGravity = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicatorGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorHeight = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicatorHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabInlineLabel = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabInlineLabel; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabMaxWidth = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabMaxWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabMinWidth = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabMinWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabMode = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPadding = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabPadding; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingBottom = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabPaddingBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingEnd = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabPaddingEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingStart = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabPaddingStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingTop = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabRippleColor = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabRippleColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabSelectedTextColor = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabSelectedTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabTextColor = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabUnboundedRipple = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabUnboundedRipple; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_fontFamily = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_fontFamily; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowColor = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_shadowColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowDx = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_shadowDx; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowDy = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_shadowDy; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowRadius = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_shadowRadius; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textColor = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_textColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textColorHint = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_textColorHint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textColorLink = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_textColorLink; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textSize = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_textSize; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textStyle = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_textStyle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_typeface = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_typeface; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_fontFamily = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_fontFamily; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_textAllCaps = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_textAllCaps; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_android_hint = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_android_hint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_android_textColorHint = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_android_textColorHint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxBackgroundColor = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxBackgroundColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxBackgroundMode = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxBackgroundMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxStrokeColor = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxStrokeColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxStrokeWidth = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxStrokeWidth; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_counterEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterMaxLength = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_counterMaxLength; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_counterTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_errorEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_errorEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_errorTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_errorTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_helperText = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_helperText; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_helperTextEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_helperTextEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_helperTextTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_helperTextTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_hintAnimationEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_hintAnimationEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_hintEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_hintEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_hintTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_hintTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleContentDescription = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_passwordToggleContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleDrawable = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_passwordToggleDrawable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_passwordToggleEnabled; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleTint = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_passwordToggleTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleTintMode = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_passwordToggleTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement = global::EFGetStarted.Droid.Resource.Styleable.ThemeEnforcement; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement_android_textAppearance = global::EFGetStarted.Droid.Resource.Styleable.ThemeEnforcement_android_textAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme = global::EFGetStarted.Droid.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement_enforceTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.ThemeEnforcement_enforceTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar = global::EFGetStarted.Droid.Resource.Styleable.Toolbar; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_android_gravity = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_android_gravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_android_minHeight = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_android_minHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_buttonGravity = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_buttonGravity; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_collapseContentDescription = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_collapseContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_collapseIcon = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_collapseIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetEnd = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetEndWithActions = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetEndWithActions; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetLeft = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetLeft; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetRight = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetRight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetStart = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetStartWithNavigation = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetStartWithNavigation; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_logo = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_logo; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_logoDescription = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_logoDescription; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_maxButtonHeight = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_maxButtonHeight; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_navigationContentDescription = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_navigationContentDescription; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_navigationIcon = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_navigationIcon; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_popupTheme = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_popupTheme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_subtitle = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_subtitle; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_subtitleTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_subtitleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_subtitleTextColor = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_subtitleTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_title = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_title; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMargin = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMargin; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginBottom = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMarginBottom; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginEnd = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMarginEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMargins = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMargins; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginStart = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMarginStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginTop = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMarginTop; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleTextAppearance; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleTextColor = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleTextColor; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View = global::EFGetStarted.Droid.Resource.Styleable.View; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper = global::EFGetStarted.Droid.Resource.Styleable.ViewBackgroundHelper; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper_android_background = global::EFGetStarted.Droid.Resource.Styleable.ViewBackgroundHelper_android_background; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper_backgroundTint = global::EFGetStarted.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTint; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode = global::EFGetStarted.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat = global::EFGetStarted.Droid.Resource.Styleable.ViewStubCompat; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat_android_id = global::EFGetStarted.Droid.Resource.Styleable.ViewStubCompat_android_id; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat_android_inflatedId = global::EFGetStarted.Droid.Resource.Styleable.ViewStubCompat_android_inflatedId; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat_android_layout = global::EFGetStarted.Droid.Resource.Styleable.ViewStubCompat_android_layout; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_android_focusable = global::EFGetStarted.Droid.Resource.Styleable.View_android_focusable; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_android_theme = global::EFGetStarted.Droid.Resource.Styleable.View_android_theme; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_paddingEnd = global::EFGetStarted.Droid.Resource.Styleable.View_paddingEnd; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_paddingStart = global::EFGetStarted.Droid.Resource.Styleable.View_paddingStart; - global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_theme = global::EFGetStarted.Droid.Resource.Styleable.View_theme; - global::Xamarin.Forms.Platform.Resource.Animation.abc_fade_in = global::EFGetStarted.Droid.Resource.Animation.abc_fade_in; - global::Xamarin.Forms.Platform.Resource.Animation.abc_fade_out = global::EFGetStarted.Droid.Resource.Animation.abc_fade_out; - global::Xamarin.Forms.Platform.Resource.Animation.abc_grow_fade_in_from_bottom = global::EFGetStarted.Droid.Resource.Animation.abc_grow_fade_in_from_bottom; - global::Xamarin.Forms.Platform.Resource.Animation.abc_popup_enter = global::EFGetStarted.Droid.Resource.Animation.abc_popup_enter; - global::Xamarin.Forms.Platform.Resource.Animation.abc_popup_exit = global::EFGetStarted.Droid.Resource.Animation.abc_popup_exit; - global::Xamarin.Forms.Platform.Resource.Animation.abc_shrink_fade_out_from_bottom = global::EFGetStarted.Droid.Resource.Animation.abc_shrink_fade_out_from_bottom; - global::Xamarin.Forms.Platform.Resource.Animation.abc_slide_in_bottom = global::EFGetStarted.Droid.Resource.Animation.abc_slide_in_bottom; - global::Xamarin.Forms.Platform.Resource.Animation.abc_slide_in_top = global::EFGetStarted.Droid.Resource.Animation.abc_slide_in_top; - global::Xamarin.Forms.Platform.Resource.Animation.abc_slide_out_bottom = global::EFGetStarted.Droid.Resource.Animation.abc_slide_out_bottom; - global::Xamarin.Forms.Platform.Resource.Animation.abc_slide_out_top = global::EFGetStarted.Droid.Resource.Animation.abc_slide_out_top; - global::Xamarin.Forms.Platform.Resource.Animation.abc_tooltip_enter = global::EFGetStarted.Droid.Resource.Animation.abc_tooltip_enter; - global::Xamarin.Forms.Platform.Resource.Animation.abc_tooltip_exit = global::EFGetStarted.Droid.Resource.Animation.abc_tooltip_exit; - global::Xamarin.Forms.Platform.Resource.Animation.design_bottom_sheet_slide_in = global::EFGetStarted.Droid.Resource.Animation.design_bottom_sheet_slide_in; - global::Xamarin.Forms.Platform.Resource.Animation.design_bottom_sheet_slide_out = global::EFGetStarted.Droid.Resource.Animation.design_bottom_sheet_slide_out; - global::Xamarin.Forms.Platform.Resource.Animation.design_snackbar_in = global::EFGetStarted.Droid.Resource.Animation.design_snackbar_in; - global::Xamarin.Forms.Platform.Resource.Animation.design_snackbar_out = global::EFGetStarted.Droid.Resource.Animation.design_snackbar_out; - global::Xamarin.Forms.Platform.Resource.Animation.EnterFromLeft = global::EFGetStarted.Droid.Resource.Animation.EnterFromLeft; - global::Xamarin.Forms.Platform.Resource.Animation.EnterFromRight = global::EFGetStarted.Droid.Resource.Animation.EnterFromRight; - global::Xamarin.Forms.Platform.Resource.Animation.ExitToLeft = global::EFGetStarted.Droid.Resource.Animation.ExitToLeft; - global::Xamarin.Forms.Platform.Resource.Animation.ExitToRight = global::EFGetStarted.Droid.Resource.Animation.ExitToRight; - global::Xamarin.Forms.Platform.Resource.Animator.design_appbar_state_list_animator = global::EFGetStarted.Droid.Resource.Animator.design_appbar_state_list_animator; - global::Xamarin.Forms.Platform.Resource.Animator.design_fab_hide_motion_spec = global::EFGetStarted.Droid.Resource.Animator.design_fab_hide_motion_spec; - global::Xamarin.Forms.Platform.Resource.Animator.design_fab_show_motion_spec = global::EFGetStarted.Droid.Resource.Animator.design_fab_show_motion_spec; - global::Xamarin.Forms.Platform.Resource.Animator.mtrl_btn_state_list_anim = global::EFGetStarted.Droid.Resource.Animator.mtrl_btn_state_list_anim; - global::Xamarin.Forms.Platform.Resource.Animator.mtrl_btn_unelevated_state_list_anim = global::EFGetStarted.Droid.Resource.Animator.mtrl_btn_unelevated_state_list_anim; - global::Xamarin.Forms.Platform.Resource.Animator.mtrl_chip_state_list_anim = global::EFGetStarted.Droid.Resource.Animator.mtrl_chip_state_list_anim; - global::Xamarin.Forms.Platform.Resource.Animator.mtrl_fab_hide_motion_spec = global::EFGetStarted.Droid.Resource.Animator.mtrl_fab_hide_motion_spec; - global::Xamarin.Forms.Platform.Resource.Animator.mtrl_fab_show_motion_spec = global::EFGetStarted.Droid.Resource.Animator.mtrl_fab_show_motion_spec; - global::Xamarin.Forms.Platform.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec = global::EFGetStarted.Droid.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec; - global::Xamarin.Forms.Platform.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec = global::EFGetStarted.Droid.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec; - global::Xamarin.Forms.Platform.Resource.Attribute.actionBarDivider = global::EFGetStarted.Droid.Resource.Attribute.actionBarDivider; - global::Xamarin.Forms.Platform.Resource.Attribute.actionBarItemBackground = global::EFGetStarted.Droid.Resource.Attribute.actionBarItemBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.actionBarPopupTheme = global::EFGetStarted.Droid.Resource.Attribute.actionBarPopupTheme; - global::Xamarin.Forms.Platform.Resource.Attribute.actionBarSize = global::EFGetStarted.Droid.Resource.Attribute.actionBarSize; - global::Xamarin.Forms.Platform.Resource.Attribute.actionBarSplitStyle = global::EFGetStarted.Droid.Resource.Attribute.actionBarSplitStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionBarStyle = global::EFGetStarted.Droid.Resource.Attribute.actionBarStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionBarTabBarStyle = global::EFGetStarted.Droid.Resource.Attribute.actionBarTabBarStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionBarTabStyle = global::EFGetStarted.Droid.Resource.Attribute.actionBarTabStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionBarTabTextStyle = global::EFGetStarted.Droid.Resource.Attribute.actionBarTabTextStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionBarTheme = global::EFGetStarted.Droid.Resource.Attribute.actionBarTheme; - global::Xamarin.Forms.Platform.Resource.Attribute.actionBarWidgetTheme = global::EFGetStarted.Droid.Resource.Attribute.actionBarWidgetTheme; - global::Xamarin.Forms.Platform.Resource.Attribute.actionButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.actionButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionDropDownStyle = global::EFGetStarted.Droid.Resource.Attribute.actionDropDownStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionLayout = global::EFGetStarted.Droid.Resource.Attribute.actionLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.actionMenuTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.actionMenuTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.actionMenuTextColor = global::EFGetStarted.Droid.Resource.Attribute.actionMenuTextColor; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModeBackground = global::EFGetStarted.Droid.Resource.Attribute.actionModeBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModeCloseButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.actionModeCloseButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModeCloseDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeCloseDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModeCopyDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeCopyDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModeCutDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeCutDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModeFindDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeFindDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModePasteDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModePasteDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModePopupWindowStyle = global::EFGetStarted.Droid.Resource.Attribute.actionModePopupWindowStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModeSelectAllDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeSelectAllDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModeShareDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeShareDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModeSplitBackground = global::EFGetStarted.Droid.Resource.Attribute.actionModeSplitBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModeStyle = global::EFGetStarted.Droid.Resource.Attribute.actionModeStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionModeWebSearchDrawable = global::EFGetStarted.Droid.Resource.Attribute.actionModeWebSearchDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.actionOverflowButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.actionOverflowButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionOverflowMenuStyle = global::EFGetStarted.Droid.Resource.Attribute.actionOverflowMenuStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.actionProviderClass = global::EFGetStarted.Droid.Resource.Attribute.actionProviderClass; - global::Xamarin.Forms.Platform.Resource.Attribute.actionViewClass = global::EFGetStarted.Droid.Resource.Attribute.actionViewClass; - global::Xamarin.Forms.Platform.Resource.Attribute.activityChooserViewStyle = global::EFGetStarted.Droid.Resource.Attribute.activityChooserViewStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.alertDialogButtonGroupStyle = global::EFGetStarted.Droid.Resource.Attribute.alertDialogButtonGroupStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.alertDialogCenterButtons = global::EFGetStarted.Droid.Resource.Attribute.alertDialogCenterButtons; - global::Xamarin.Forms.Platform.Resource.Attribute.alertDialogStyle = global::EFGetStarted.Droid.Resource.Attribute.alertDialogStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.alertDialogTheme = global::EFGetStarted.Droid.Resource.Attribute.alertDialogTheme; - global::Xamarin.Forms.Platform.Resource.Attribute.allowStacking = global::EFGetStarted.Droid.Resource.Attribute.allowStacking; - global::Xamarin.Forms.Platform.Resource.Attribute.alpha = global::EFGetStarted.Droid.Resource.Attribute.alpha; - global::Xamarin.Forms.Platform.Resource.Attribute.alphabeticModifiers = global::EFGetStarted.Droid.Resource.Attribute.alphabeticModifiers; - global::Xamarin.Forms.Platform.Resource.Attribute.arrowHeadLength = global::EFGetStarted.Droid.Resource.Attribute.arrowHeadLength; - global::Xamarin.Forms.Platform.Resource.Attribute.arrowShaftLength = global::EFGetStarted.Droid.Resource.Attribute.arrowShaftLength; - global::Xamarin.Forms.Platform.Resource.Attribute.autoCompleteTextViewStyle = global::EFGetStarted.Droid.Resource.Attribute.autoCompleteTextViewStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.autoSizeMaxTextSize = global::EFGetStarted.Droid.Resource.Attribute.autoSizeMaxTextSize; - global::Xamarin.Forms.Platform.Resource.Attribute.autoSizeMinTextSize = global::EFGetStarted.Droid.Resource.Attribute.autoSizeMinTextSize; - global::Xamarin.Forms.Platform.Resource.Attribute.autoSizePresetSizes = global::EFGetStarted.Droid.Resource.Attribute.autoSizePresetSizes; - global::Xamarin.Forms.Platform.Resource.Attribute.autoSizeStepGranularity = global::EFGetStarted.Droid.Resource.Attribute.autoSizeStepGranularity; - global::Xamarin.Forms.Platform.Resource.Attribute.autoSizeTextType = global::EFGetStarted.Droid.Resource.Attribute.autoSizeTextType; - global::Xamarin.Forms.Platform.Resource.Attribute.background = global::EFGetStarted.Droid.Resource.Attribute.background; - global::Xamarin.Forms.Platform.Resource.Attribute.backgroundSplit = global::EFGetStarted.Droid.Resource.Attribute.backgroundSplit; - global::Xamarin.Forms.Platform.Resource.Attribute.backgroundStacked = global::EFGetStarted.Droid.Resource.Attribute.backgroundStacked; - global::Xamarin.Forms.Platform.Resource.Attribute.backgroundTint = global::EFGetStarted.Droid.Resource.Attribute.backgroundTint; - global::Xamarin.Forms.Platform.Resource.Attribute.backgroundTintMode = global::EFGetStarted.Droid.Resource.Attribute.backgroundTintMode; - global::Xamarin.Forms.Platform.Resource.Attribute.barLength = global::EFGetStarted.Droid.Resource.Attribute.barLength; - global::Xamarin.Forms.Platform.Resource.Attribute.behavior_autoHide = global::EFGetStarted.Droid.Resource.Attribute.behavior_autoHide; - global::Xamarin.Forms.Platform.Resource.Attribute.behavior_fitToContents = global::EFGetStarted.Droid.Resource.Attribute.behavior_fitToContents; - global::Xamarin.Forms.Platform.Resource.Attribute.behavior_hideable = global::EFGetStarted.Droid.Resource.Attribute.behavior_hideable; - global::Xamarin.Forms.Platform.Resource.Attribute.behavior_overlapTop = global::EFGetStarted.Droid.Resource.Attribute.behavior_overlapTop; - global::Xamarin.Forms.Platform.Resource.Attribute.behavior_peekHeight = global::EFGetStarted.Droid.Resource.Attribute.behavior_peekHeight; - global::Xamarin.Forms.Platform.Resource.Attribute.behavior_skipCollapsed = global::EFGetStarted.Droid.Resource.Attribute.behavior_skipCollapsed; - global::Xamarin.Forms.Platform.Resource.Attribute.borderlessButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.borderlessButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.borderWidth = global::EFGetStarted.Droid.Resource.Attribute.borderWidth; - global::Xamarin.Forms.Platform.Resource.Attribute.bottomAppBarStyle = global::EFGetStarted.Droid.Resource.Attribute.bottomAppBarStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.bottomNavigationStyle = global::EFGetStarted.Droid.Resource.Attribute.bottomNavigationStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.bottomSheetDialogTheme = global::EFGetStarted.Droid.Resource.Attribute.bottomSheetDialogTheme; - global::Xamarin.Forms.Platform.Resource.Attribute.bottomSheetStyle = global::EFGetStarted.Droid.Resource.Attribute.bottomSheetStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.boxBackgroundColor = global::EFGetStarted.Droid.Resource.Attribute.boxBackgroundColor; - global::Xamarin.Forms.Platform.Resource.Attribute.boxBackgroundMode = global::EFGetStarted.Droid.Resource.Attribute.boxBackgroundMode; - global::Xamarin.Forms.Platform.Resource.Attribute.boxCollapsedPaddingTop = global::EFGetStarted.Droid.Resource.Attribute.boxCollapsedPaddingTop; - global::Xamarin.Forms.Platform.Resource.Attribute.boxCornerRadiusBottomEnd = global::EFGetStarted.Droid.Resource.Attribute.boxCornerRadiusBottomEnd; - global::Xamarin.Forms.Platform.Resource.Attribute.boxCornerRadiusBottomStart = global::EFGetStarted.Droid.Resource.Attribute.boxCornerRadiusBottomStart; - global::Xamarin.Forms.Platform.Resource.Attribute.boxCornerRadiusTopEnd = global::EFGetStarted.Droid.Resource.Attribute.boxCornerRadiusTopEnd; - global::Xamarin.Forms.Platform.Resource.Attribute.boxCornerRadiusTopStart = global::EFGetStarted.Droid.Resource.Attribute.boxCornerRadiusTopStart; - global::Xamarin.Forms.Platform.Resource.Attribute.boxStrokeColor = global::EFGetStarted.Droid.Resource.Attribute.boxStrokeColor; - global::Xamarin.Forms.Platform.Resource.Attribute.boxStrokeWidth = global::EFGetStarted.Droid.Resource.Attribute.boxStrokeWidth; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonBarButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonBarButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonBarNegativeButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonBarNegativeButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonBarNeutralButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonBarNeutralButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonBarPositiveButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonBarPositiveButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonBarStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonBarStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonGravity = global::EFGetStarted.Droid.Resource.Attribute.buttonGravity; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonIconDimen = global::EFGetStarted.Droid.Resource.Attribute.buttonIconDimen; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonPanelSideLayout = global::EFGetStarted.Droid.Resource.Attribute.buttonPanelSideLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonStyle = global::EFGetStarted.Droid.Resource.Attribute.buttonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonStyleSmall = global::EFGetStarted.Droid.Resource.Attribute.buttonStyleSmall; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonTint = global::EFGetStarted.Droid.Resource.Attribute.buttonTint; - global::Xamarin.Forms.Platform.Resource.Attribute.buttonTintMode = global::EFGetStarted.Droid.Resource.Attribute.buttonTintMode; - global::Xamarin.Forms.Platform.Resource.Attribute.cardBackgroundColor = global::EFGetStarted.Droid.Resource.Attribute.cardBackgroundColor; - global::Xamarin.Forms.Platform.Resource.Attribute.cardCornerRadius = global::EFGetStarted.Droid.Resource.Attribute.cardCornerRadius; - global::Xamarin.Forms.Platform.Resource.Attribute.cardElevation = global::EFGetStarted.Droid.Resource.Attribute.cardElevation; - global::Xamarin.Forms.Platform.Resource.Attribute.cardMaxElevation = global::EFGetStarted.Droid.Resource.Attribute.cardMaxElevation; - global::Xamarin.Forms.Platform.Resource.Attribute.cardPreventCornerOverlap = global::EFGetStarted.Droid.Resource.Attribute.cardPreventCornerOverlap; - global::Xamarin.Forms.Platform.Resource.Attribute.cardUseCompatPadding = global::EFGetStarted.Droid.Resource.Attribute.cardUseCompatPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.cardViewStyle = global::EFGetStarted.Droid.Resource.Attribute.cardViewStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.checkboxStyle = global::EFGetStarted.Droid.Resource.Attribute.checkboxStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.checkedChip = global::EFGetStarted.Droid.Resource.Attribute.checkedChip; - global::Xamarin.Forms.Platform.Resource.Attribute.checkedIcon = global::EFGetStarted.Droid.Resource.Attribute.checkedIcon; - global::Xamarin.Forms.Platform.Resource.Attribute.checkedIconEnabled = global::EFGetStarted.Droid.Resource.Attribute.checkedIconEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.checkedIconVisible = global::EFGetStarted.Droid.Resource.Attribute.checkedIconVisible; - global::Xamarin.Forms.Platform.Resource.Attribute.checkedTextViewStyle = global::EFGetStarted.Droid.Resource.Attribute.checkedTextViewStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.chipBackgroundColor = global::EFGetStarted.Droid.Resource.Attribute.chipBackgroundColor; - global::Xamarin.Forms.Platform.Resource.Attribute.chipCornerRadius = global::EFGetStarted.Droid.Resource.Attribute.chipCornerRadius; - global::Xamarin.Forms.Platform.Resource.Attribute.chipEndPadding = global::EFGetStarted.Droid.Resource.Attribute.chipEndPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.chipGroupStyle = global::EFGetStarted.Droid.Resource.Attribute.chipGroupStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.chipIcon = global::EFGetStarted.Droid.Resource.Attribute.chipIcon; - global::Xamarin.Forms.Platform.Resource.Attribute.chipIconEnabled = global::EFGetStarted.Droid.Resource.Attribute.chipIconEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.chipIconSize = global::EFGetStarted.Droid.Resource.Attribute.chipIconSize; - global::Xamarin.Forms.Platform.Resource.Attribute.chipIconTint = global::EFGetStarted.Droid.Resource.Attribute.chipIconTint; - global::Xamarin.Forms.Platform.Resource.Attribute.chipIconVisible = global::EFGetStarted.Droid.Resource.Attribute.chipIconVisible; - global::Xamarin.Forms.Platform.Resource.Attribute.chipMinHeight = global::EFGetStarted.Droid.Resource.Attribute.chipMinHeight; - global::Xamarin.Forms.Platform.Resource.Attribute.chipSpacing = global::EFGetStarted.Droid.Resource.Attribute.chipSpacing; - global::Xamarin.Forms.Platform.Resource.Attribute.chipSpacingHorizontal = global::EFGetStarted.Droid.Resource.Attribute.chipSpacingHorizontal; - global::Xamarin.Forms.Platform.Resource.Attribute.chipSpacingVertical = global::EFGetStarted.Droid.Resource.Attribute.chipSpacingVertical; - global::Xamarin.Forms.Platform.Resource.Attribute.chipStandaloneStyle = global::EFGetStarted.Droid.Resource.Attribute.chipStandaloneStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.chipStartPadding = global::EFGetStarted.Droid.Resource.Attribute.chipStartPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.chipStrokeColor = global::EFGetStarted.Droid.Resource.Attribute.chipStrokeColor; - global::Xamarin.Forms.Platform.Resource.Attribute.chipStrokeWidth = global::EFGetStarted.Droid.Resource.Attribute.chipStrokeWidth; - global::Xamarin.Forms.Platform.Resource.Attribute.chipStyle = global::EFGetStarted.Droid.Resource.Attribute.chipStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.closeIcon = global::EFGetStarted.Droid.Resource.Attribute.closeIcon; - global::Xamarin.Forms.Platform.Resource.Attribute.closeIconEnabled = global::EFGetStarted.Droid.Resource.Attribute.closeIconEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.closeIconEndPadding = global::EFGetStarted.Droid.Resource.Attribute.closeIconEndPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.closeIconSize = global::EFGetStarted.Droid.Resource.Attribute.closeIconSize; - global::Xamarin.Forms.Platform.Resource.Attribute.closeIconStartPadding = global::EFGetStarted.Droid.Resource.Attribute.closeIconStartPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.closeIconTint = global::EFGetStarted.Droid.Resource.Attribute.closeIconTint; - global::Xamarin.Forms.Platform.Resource.Attribute.closeIconVisible = global::EFGetStarted.Droid.Resource.Attribute.closeIconVisible; - global::Xamarin.Forms.Platform.Resource.Attribute.closeItemLayout = global::EFGetStarted.Droid.Resource.Attribute.closeItemLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.collapseContentDescription = global::EFGetStarted.Droid.Resource.Attribute.collapseContentDescription; - global::Xamarin.Forms.Platform.Resource.Attribute.collapsedTitleGravity = global::EFGetStarted.Droid.Resource.Attribute.collapsedTitleGravity; - global::Xamarin.Forms.Platform.Resource.Attribute.collapsedTitleTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.collapsedTitleTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.collapseIcon = global::EFGetStarted.Droid.Resource.Attribute.collapseIcon; - global::Xamarin.Forms.Platform.Resource.Attribute.collectionViewStyle = global::EFGetStarted.Droid.Resource.Attribute.collectionViewStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.color = global::EFGetStarted.Droid.Resource.Attribute.color; - global::Xamarin.Forms.Platform.Resource.Attribute.colorAccent = global::EFGetStarted.Droid.Resource.Attribute.colorAccent; - global::Xamarin.Forms.Platform.Resource.Attribute.colorBackgroundFloating = global::EFGetStarted.Droid.Resource.Attribute.colorBackgroundFloating; - global::Xamarin.Forms.Platform.Resource.Attribute.colorButtonNormal = global::EFGetStarted.Droid.Resource.Attribute.colorButtonNormal; - global::Xamarin.Forms.Platform.Resource.Attribute.colorControlActivated = global::EFGetStarted.Droid.Resource.Attribute.colorControlActivated; - global::Xamarin.Forms.Platform.Resource.Attribute.colorControlHighlight = global::EFGetStarted.Droid.Resource.Attribute.colorControlHighlight; - global::Xamarin.Forms.Platform.Resource.Attribute.colorControlNormal = global::EFGetStarted.Droid.Resource.Attribute.colorControlNormal; - global::Xamarin.Forms.Platform.Resource.Attribute.colorError = global::EFGetStarted.Droid.Resource.Attribute.colorError; - global::Xamarin.Forms.Platform.Resource.Attribute.colorPrimary = global::EFGetStarted.Droid.Resource.Attribute.colorPrimary; - global::Xamarin.Forms.Platform.Resource.Attribute.colorPrimaryDark = global::EFGetStarted.Droid.Resource.Attribute.colorPrimaryDark; - global::Xamarin.Forms.Platform.Resource.Attribute.colorSecondary = global::EFGetStarted.Droid.Resource.Attribute.colorSecondary; - global::Xamarin.Forms.Platform.Resource.Attribute.colorSwitchThumbNormal = global::EFGetStarted.Droid.Resource.Attribute.colorSwitchThumbNormal; - global::Xamarin.Forms.Platform.Resource.Attribute.commitIcon = global::EFGetStarted.Droid.Resource.Attribute.commitIcon; - global::Xamarin.Forms.Platform.Resource.Attribute.contentDescription = global::EFGetStarted.Droid.Resource.Attribute.contentDescription; - global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetEnd = global::EFGetStarted.Droid.Resource.Attribute.contentInsetEnd; - global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetEndWithActions = global::EFGetStarted.Droid.Resource.Attribute.contentInsetEndWithActions; - global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetLeft = global::EFGetStarted.Droid.Resource.Attribute.contentInsetLeft; - global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetRight = global::EFGetStarted.Droid.Resource.Attribute.contentInsetRight; - global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetStart = global::EFGetStarted.Droid.Resource.Attribute.contentInsetStart; - global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetStartWithNavigation = global::EFGetStarted.Droid.Resource.Attribute.contentInsetStartWithNavigation; - global::Xamarin.Forms.Platform.Resource.Attribute.contentPadding = global::EFGetStarted.Droid.Resource.Attribute.contentPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.contentPaddingBottom = global::EFGetStarted.Droid.Resource.Attribute.contentPaddingBottom; - global::Xamarin.Forms.Platform.Resource.Attribute.contentPaddingLeft = global::EFGetStarted.Droid.Resource.Attribute.contentPaddingLeft; - global::Xamarin.Forms.Platform.Resource.Attribute.contentPaddingRight = global::EFGetStarted.Droid.Resource.Attribute.contentPaddingRight; - global::Xamarin.Forms.Platform.Resource.Attribute.contentPaddingTop = global::EFGetStarted.Droid.Resource.Attribute.contentPaddingTop; - global::Xamarin.Forms.Platform.Resource.Attribute.contentScrim = global::EFGetStarted.Droid.Resource.Attribute.contentScrim; - global::Xamarin.Forms.Platform.Resource.Attribute.controlBackground = global::EFGetStarted.Droid.Resource.Attribute.controlBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.coordinatorLayoutStyle = global::EFGetStarted.Droid.Resource.Attribute.coordinatorLayoutStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.cornerRadius = global::EFGetStarted.Droid.Resource.Attribute.cornerRadius; - global::Xamarin.Forms.Platform.Resource.Attribute.counterEnabled = global::EFGetStarted.Droid.Resource.Attribute.counterEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.counterMaxLength = global::EFGetStarted.Droid.Resource.Attribute.counterMaxLength; - global::Xamarin.Forms.Platform.Resource.Attribute.counterOverflowTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.counterOverflowTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.counterTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.counterTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.customNavigationLayout = global::EFGetStarted.Droid.Resource.Attribute.customNavigationLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.defaultQueryHint = global::EFGetStarted.Droid.Resource.Attribute.defaultQueryHint; - global::Xamarin.Forms.Platform.Resource.Attribute.dialogCornerRadius = global::EFGetStarted.Droid.Resource.Attribute.dialogCornerRadius; - global::Xamarin.Forms.Platform.Resource.Attribute.dialogPreferredPadding = global::EFGetStarted.Droid.Resource.Attribute.dialogPreferredPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.dialogTheme = global::EFGetStarted.Droid.Resource.Attribute.dialogTheme; - global::Xamarin.Forms.Platform.Resource.Attribute.displayOptions = global::EFGetStarted.Droid.Resource.Attribute.displayOptions; - global::Xamarin.Forms.Platform.Resource.Attribute.divider = global::EFGetStarted.Droid.Resource.Attribute.divider; - global::Xamarin.Forms.Platform.Resource.Attribute.dividerHorizontal = global::EFGetStarted.Droid.Resource.Attribute.dividerHorizontal; - global::Xamarin.Forms.Platform.Resource.Attribute.dividerPadding = global::EFGetStarted.Droid.Resource.Attribute.dividerPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.dividerVertical = global::EFGetStarted.Droid.Resource.Attribute.dividerVertical; - global::Xamarin.Forms.Platform.Resource.Attribute.drawableSize = global::EFGetStarted.Droid.Resource.Attribute.drawableSize; - global::Xamarin.Forms.Platform.Resource.Attribute.drawerArrowStyle = global::EFGetStarted.Droid.Resource.Attribute.drawerArrowStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.dropdownListPreferredItemHeight = global::EFGetStarted.Droid.Resource.Attribute.dropdownListPreferredItemHeight; - global::Xamarin.Forms.Platform.Resource.Attribute.dropDownListViewStyle = global::EFGetStarted.Droid.Resource.Attribute.dropDownListViewStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.editTextBackground = global::EFGetStarted.Droid.Resource.Attribute.editTextBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.editTextColor = global::EFGetStarted.Droid.Resource.Attribute.editTextColor; - global::Xamarin.Forms.Platform.Resource.Attribute.editTextStyle = global::EFGetStarted.Droid.Resource.Attribute.editTextStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.elevation = global::EFGetStarted.Droid.Resource.Attribute.elevation; - global::Xamarin.Forms.Platform.Resource.Attribute.enforceMaterialTheme = global::EFGetStarted.Droid.Resource.Attribute.enforceMaterialTheme; - global::Xamarin.Forms.Platform.Resource.Attribute.enforceTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.enforceTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.errorEnabled = global::EFGetStarted.Droid.Resource.Attribute.errorEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.errorTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.errorTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.expandActivityOverflowButtonDrawable = global::EFGetStarted.Droid.Resource.Attribute.expandActivityOverflowButtonDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.expanded = global::EFGetStarted.Droid.Resource.Attribute.expanded; - global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleGravity = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleGravity; - global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleMargin = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleMargin; - global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleMarginBottom = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleMarginBottom; - global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleMarginEnd = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleMarginEnd; - global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleMarginStart = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleMarginStart; - global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleMarginTop = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleMarginTop; - global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.expandedTitleTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.fabAlignmentMode = global::EFGetStarted.Droid.Resource.Attribute.fabAlignmentMode; - global::Xamarin.Forms.Platform.Resource.Attribute.fabCradleMargin = global::EFGetStarted.Droid.Resource.Attribute.fabCradleMargin; - global::Xamarin.Forms.Platform.Resource.Attribute.fabCradleRoundedCornerRadius = global::EFGetStarted.Droid.Resource.Attribute.fabCradleRoundedCornerRadius; - global::Xamarin.Forms.Platform.Resource.Attribute.fabCradleVerticalOffset = global::EFGetStarted.Droid.Resource.Attribute.fabCradleVerticalOffset; - global::Xamarin.Forms.Platform.Resource.Attribute.fabCustomSize = global::EFGetStarted.Droid.Resource.Attribute.fabCustomSize; - global::Xamarin.Forms.Platform.Resource.Attribute.fabSize = global::EFGetStarted.Droid.Resource.Attribute.fabSize; - global::Xamarin.Forms.Platform.Resource.Attribute.fastScrollEnabled = global::EFGetStarted.Droid.Resource.Attribute.fastScrollEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.fastScrollHorizontalThumbDrawable = global::EFGetStarted.Droid.Resource.Attribute.fastScrollHorizontalThumbDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.fastScrollHorizontalTrackDrawable = global::EFGetStarted.Droid.Resource.Attribute.fastScrollHorizontalTrackDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.fastScrollVerticalThumbDrawable = global::EFGetStarted.Droid.Resource.Attribute.fastScrollVerticalThumbDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.fastScrollVerticalTrackDrawable = global::EFGetStarted.Droid.Resource.Attribute.fastScrollVerticalTrackDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.firstBaselineToTopHeight = global::EFGetStarted.Droid.Resource.Attribute.firstBaselineToTopHeight; - global::Xamarin.Forms.Platform.Resource.Attribute.floatingActionButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.floatingActionButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.font = global::EFGetStarted.Droid.Resource.Attribute.font; - global::Xamarin.Forms.Platform.Resource.Attribute.fontFamily = global::EFGetStarted.Droid.Resource.Attribute.fontFamily; - global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderAuthority = global::EFGetStarted.Droid.Resource.Attribute.fontProviderAuthority; - global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderCerts = global::EFGetStarted.Droid.Resource.Attribute.fontProviderCerts; - global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderFetchStrategy = global::EFGetStarted.Droid.Resource.Attribute.fontProviderFetchStrategy; - global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderFetchTimeout = global::EFGetStarted.Droid.Resource.Attribute.fontProviderFetchTimeout; - global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderPackage = global::EFGetStarted.Droid.Resource.Attribute.fontProviderPackage; - global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderQuery = global::EFGetStarted.Droid.Resource.Attribute.fontProviderQuery; - global::Xamarin.Forms.Platform.Resource.Attribute.fontStyle = global::EFGetStarted.Droid.Resource.Attribute.fontStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.fontVariationSettings = global::EFGetStarted.Droid.Resource.Attribute.fontVariationSettings; - global::Xamarin.Forms.Platform.Resource.Attribute.fontWeight = global::EFGetStarted.Droid.Resource.Attribute.fontWeight; - global::Xamarin.Forms.Platform.Resource.Attribute.foregroundInsidePadding = global::EFGetStarted.Droid.Resource.Attribute.foregroundInsidePadding; - global::Xamarin.Forms.Platform.Resource.Attribute.gapBetweenBars = global::EFGetStarted.Droid.Resource.Attribute.gapBetweenBars; - global::Xamarin.Forms.Platform.Resource.Attribute.goIcon = global::EFGetStarted.Droid.Resource.Attribute.goIcon; - global::Xamarin.Forms.Platform.Resource.Attribute.headerLayout = global::EFGetStarted.Droid.Resource.Attribute.headerLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.height = global::EFGetStarted.Droid.Resource.Attribute.height; - global::Xamarin.Forms.Platform.Resource.Attribute.helperText = global::EFGetStarted.Droid.Resource.Attribute.helperText; - global::Xamarin.Forms.Platform.Resource.Attribute.helperTextEnabled = global::EFGetStarted.Droid.Resource.Attribute.helperTextEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.helperTextTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.helperTextTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.hideMotionSpec = global::EFGetStarted.Droid.Resource.Attribute.hideMotionSpec; - global::Xamarin.Forms.Platform.Resource.Attribute.hideOnContentScroll = global::EFGetStarted.Droid.Resource.Attribute.hideOnContentScroll; - global::Xamarin.Forms.Platform.Resource.Attribute.hideOnScroll = global::EFGetStarted.Droid.Resource.Attribute.hideOnScroll; - global::Xamarin.Forms.Platform.Resource.Attribute.hintAnimationEnabled = global::EFGetStarted.Droid.Resource.Attribute.hintAnimationEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.hintEnabled = global::EFGetStarted.Droid.Resource.Attribute.hintEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.hintTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.hintTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.homeAsUpIndicator = global::EFGetStarted.Droid.Resource.Attribute.homeAsUpIndicator; - global::Xamarin.Forms.Platform.Resource.Attribute.homeLayout = global::EFGetStarted.Droid.Resource.Attribute.homeLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.hoveredFocusedTranslationZ = global::EFGetStarted.Droid.Resource.Attribute.hoveredFocusedTranslationZ; - global::Xamarin.Forms.Platform.Resource.Attribute.icon = global::EFGetStarted.Droid.Resource.Attribute.icon; - global::Xamarin.Forms.Platform.Resource.Attribute.iconEndPadding = global::EFGetStarted.Droid.Resource.Attribute.iconEndPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.iconGravity = global::EFGetStarted.Droid.Resource.Attribute.iconGravity; - global::Xamarin.Forms.Platform.Resource.Attribute.iconifiedByDefault = global::EFGetStarted.Droid.Resource.Attribute.iconifiedByDefault; - global::Xamarin.Forms.Platform.Resource.Attribute.iconPadding = global::EFGetStarted.Droid.Resource.Attribute.iconPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.iconSize = global::EFGetStarted.Droid.Resource.Attribute.iconSize; - global::Xamarin.Forms.Platform.Resource.Attribute.iconStartPadding = global::EFGetStarted.Droid.Resource.Attribute.iconStartPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.iconTint = global::EFGetStarted.Droid.Resource.Attribute.iconTint; - global::Xamarin.Forms.Platform.Resource.Attribute.iconTintMode = global::EFGetStarted.Droid.Resource.Attribute.iconTintMode; - global::Xamarin.Forms.Platform.Resource.Attribute.imageButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.imageButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.indeterminateProgressStyle = global::EFGetStarted.Droid.Resource.Attribute.indeterminateProgressStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.initialActivityCount = global::EFGetStarted.Droid.Resource.Attribute.initialActivityCount; - global::Xamarin.Forms.Platform.Resource.Attribute.insetForeground = global::EFGetStarted.Droid.Resource.Attribute.insetForeground; - global::Xamarin.Forms.Platform.Resource.Attribute.isLightTheme = global::EFGetStarted.Droid.Resource.Attribute.isLightTheme; - global::Xamarin.Forms.Platform.Resource.Attribute.itemBackground = global::EFGetStarted.Droid.Resource.Attribute.itemBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.itemHorizontalPadding = global::EFGetStarted.Droid.Resource.Attribute.itemHorizontalPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.itemHorizontalTranslationEnabled = global::EFGetStarted.Droid.Resource.Attribute.itemHorizontalTranslationEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.itemIconPadding = global::EFGetStarted.Droid.Resource.Attribute.itemIconPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.itemIconSize = global::EFGetStarted.Droid.Resource.Attribute.itemIconSize; - global::Xamarin.Forms.Platform.Resource.Attribute.itemIconTint = global::EFGetStarted.Droid.Resource.Attribute.itemIconTint; - global::Xamarin.Forms.Platform.Resource.Attribute.itemPadding = global::EFGetStarted.Droid.Resource.Attribute.itemPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.itemSpacing = global::EFGetStarted.Droid.Resource.Attribute.itemSpacing; - global::Xamarin.Forms.Platform.Resource.Attribute.itemTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.itemTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.itemTextAppearanceActive = global::EFGetStarted.Droid.Resource.Attribute.itemTextAppearanceActive; - global::Xamarin.Forms.Platform.Resource.Attribute.itemTextAppearanceInactive = global::EFGetStarted.Droid.Resource.Attribute.itemTextAppearanceInactive; - global::Xamarin.Forms.Platform.Resource.Attribute.itemTextColor = global::EFGetStarted.Droid.Resource.Attribute.itemTextColor; - global::Xamarin.Forms.Platform.Resource.Attribute.keylines = global::EFGetStarted.Droid.Resource.Attribute.keylines; - global::Xamarin.Forms.Platform.Resource.Attribute.labelVisibilityMode = global::EFGetStarted.Droid.Resource.Attribute.labelVisibilityMode; - global::Xamarin.Forms.Platform.Resource.Attribute.lastBaselineToBottomHeight = global::EFGetStarted.Droid.Resource.Attribute.lastBaselineToBottomHeight; - global::Xamarin.Forms.Platform.Resource.Attribute.layout = global::EFGetStarted.Droid.Resource.Attribute.layout; - global::Xamarin.Forms.Platform.Resource.Attribute.layoutManager = global::EFGetStarted.Droid.Resource.Attribute.layoutManager; - global::Xamarin.Forms.Platform.Resource.Attribute.layout_anchor = global::EFGetStarted.Droid.Resource.Attribute.layout_anchor; - global::Xamarin.Forms.Platform.Resource.Attribute.layout_anchorGravity = global::EFGetStarted.Droid.Resource.Attribute.layout_anchorGravity; - global::Xamarin.Forms.Platform.Resource.Attribute.layout_behavior = global::EFGetStarted.Droid.Resource.Attribute.layout_behavior; - global::Xamarin.Forms.Platform.Resource.Attribute.layout_collapseMode = global::EFGetStarted.Droid.Resource.Attribute.layout_collapseMode; - global::Xamarin.Forms.Platform.Resource.Attribute.layout_collapseParallaxMultiplier = global::EFGetStarted.Droid.Resource.Attribute.layout_collapseParallaxMultiplier; - global::Xamarin.Forms.Platform.Resource.Attribute.layout_dodgeInsetEdges = global::EFGetStarted.Droid.Resource.Attribute.layout_dodgeInsetEdges; - global::Xamarin.Forms.Platform.Resource.Attribute.layout_insetEdge = global::EFGetStarted.Droid.Resource.Attribute.layout_insetEdge; - global::Xamarin.Forms.Platform.Resource.Attribute.layout_keyline = global::EFGetStarted.Droid.Resource.Attribute.layout_keyline; - global::Xamarin.Forms.Platform.Resource.Attribute.layout_scrollFlags = global::EFGetStarted.Droid.Resource.Attribute.layout_scrollFlags; - global::Xamarin.Forms.Platform.Resource.Attribute.layout_scrollInterpolator = global::EFGetStarted.Droid.Resource.Attribute.layout_scrollInterpolator; - global::Xamarin.Forms.Platform.Resource.Attribute.liftOnScroll = global::EFGetStarted.Droid.Resource.Attribute.liftOnScroll; - global::Xamarin.Forms.Platform.Resource.Attribute.lineHeight = global::EFGetStarted.Droid.Resource.Attribute.lineHeight; - global::Xamarin.Forms.Platform.Resource.Attribute.lineSpacing = global::EFGetStarted.Droid.Resource.Attribute.lineSpacing; - global::Xamarin.Forms.Platform.Resource.Attribute.listChoiceBackgroundIndicator = global::EFGetStarted.Droid.Resource.Attribute.listChoiceBackgroundIndicator; - global::Xamarin.Forms.Platform.Resource.Attribute.listDividerAlertDialog = global::EFGetStarted.Droid.Resource.Attribute.listDividerAlertDialog; - global::Xamarin.Forms.Platform.Resource.Attribute.listItemLayout = global::EFGetStarted.Droid.Resource.Attribute.listItemLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.listLayout = global::EFGetStarted.Droid.Resource.Attribute.listLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.listMenuViewStyle = global::EFGetStarted.Droid.Resource.Attribute.listMenuViewStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.listPopupWindowStyle = global::EFGetStarted.Droid.Resource.Attribute.listPopupWindowStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.listPreferredItemHeight = global::EFGetStarted.Droid.Resource.Attribute.listPreferredItemHeight; - global::Xamarin.Forms.Platform.Resource.Attribute.listPreferredItemHeightLarge = global::EFGetStarted.Droid.Resource.Attribute.listPreferredItemHeightLarge; - global::Xamarin.Forms.Platform.Resource.Attribute.listPreferredItemHeightSmall = global::EFGetStarted.Droid.Resource.Attribute.listPreferredItemHeightSmall; - global::Xamarin.Forms.Platform.Resource.Attribute.listPreferredItemPaddingLeft = global::EFGetStarted.Droid.Resource.Attribute.listPreferredItemPaddingLeft; - global::Xamarin.Forms.Platform.Resource.Attribute.listPreferredItemPaddingRight = global::EFGetStarted.Droid.Resource.Attribute.listPreferredItemPaddingRight; - global::Xamarin.Forms.Platform.Resource.Attribute.logo = global::EFGetStarted.Droid.Resource.Attribute.logo; - global::Xamarin.Forms.Platform.Resource.Attribute.logoDescription = global::EFGetStarted.Droid.Resource.Attribute.logoDescription; - global::Xamarin.Forms.Platform.Resource.Attribute.materialButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.materialButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.materialCardViewStyle = global::EFGetStarted.Droid.Resource.Attribute.materialCardViewStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.maxActionInlineWidth = global::EFGetStarted.Droid.Resource.Attribute.maxActionInlineWidth; - global::Xamarin.Forms.Platform.Resource.Attribute.maxButtonHeight = global::EFGetStarted.Droid.Resource.Attribute.maxButtonHeight; - global::Xamarin.Forms.Platform.Resource.Attribute.maxImageSize = global::EFGetStarted.Droid.Resource.Attribute.maxImageSize; - global::Xamarin.Forms.Platform.Resource.Attribute.measureWithLargestChild = global::EFGetStarted.Droid.Resource.Attribute.measureWithLargestChild; - global::Xamarin.Forms.Platform.Resource.Attribute.menu = global::EFGetStarted.Droid.Resource.Attribute.menu; - global::Xamarin.Forms.Platform.Resource.Attribute.multiChoiceItemLayout = global::EFGetStarted.Droid.Resource.Attribute.multiChoiceItemLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.navigationContentDescription = global::EFGetStarted.Droid.Resource.Attribute.navigationContentDescription; - global::Xamarin.Forms.Platform.Resource.Attribute.navigationIcon = global::EFGetStarted.Droid.Resource.Attribute.navigationIcon; - global::Xamarin.Forms.Platform.Resource.Attribute.navigationMode = global::EFGetStarted.Droid.Resource.Attribute.navigationMode; - global::Xamarin.Forms.Platform.Resource.Attribute.navigationViewStyle = global::EFGetStarted.Droid.Resource.Attribute.navigationViewStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.numericModifiers = global::EFGetStarted.Droid.Resource.Attribute.numericModifiers; - global::Xamarin.Forms.Platform.Resource.Attribute.overlapAnchor = global::EFGetStarted.Droid.Resource.Attribute.overlapAnchor; - global::Xamarin.Forms.Platform.Resource.Attribute.paddingBottomNoButtons = global::EFGetStarted.Droid.Resource.Attribute.paddingBottomNoButtons; - global::Xamarin.Forms.Platform.Resource.Attribute.paddingEnd = global::EFGetStarted.Droid.Resource.Attribute.paddingEnd; - global::Xamarin.Forms.Platform.Resource.Attribute.paddingStart = global::EFGetStarted.Droid.Resource.Attribute.paddingStart; - global::Xamarin.Forms.Platform.Resource.Attribute.paddingTopNoTitle = global::EFGetStarted.Droid.Resource.Attribute.paddingTopNoTitle; - global::Xamarin.Forms.Platform.Resource.Attribute.panelBackground = global::EFGetStarted.Droid.Resource.Attribute.panelBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.panelMenuListTheme = global::EFGetStarted.Droid.Resource.Attribute.panelMenuListTheme; - global::Xamarin.Forms.Platform.Resource.Attribute.panelMenuListWidth = global::EFGetStarted.Droid.Resource.Attribute.panelMenuListWidth; - global::Xamarin.Forms.Platform.Resource.Attribute.passwordToggleContentDescription = global::EFGetStarted.Droid.Resource.Attribute.passwordToggleContentDescription; - global::Xamarin.Forms.Platform.Resource.Attribute.passwordToggleDrawable = global::EFGetStarted.Droid.Resource.Attribute.passwordToggleDrawable; - global::Xamarin.Forms.Platform.Resource.Attribute.passwordToggleEnabled = global::EFGetStarted.Droid.Resource.Attribute.passwordToggleEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.passwordToggleTint = global::EFGetStarted.Droid.Resource.Attribute.passwordToggleTint; - global::Xamarin.Forms.Platform.Resource.Attribute.passwordToggleTintMode = global::EFGetStarted.Droid.Resource.Attribute.passwordToggleTintMode; - global::Xamarin.Forms.Platform.Resource.Attribute.popupMenuStyle = global::EFGetStarted.Droid.Resource.Attribute.popupMenuStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.popupTheme = global::EFGetStarted.Droid.Resource.Attribute.popupTheme; - global::Xamarin.Forms.Platform.Resource.Attribute.popupWindowStyle = global::EFGetStarted.Droid.Resource.Attribute.popupWindowStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.preserveIconSpacing = global::EFGetStarted.Droid.Resource.Attribute.preserveIconSpacing; - global::Xamarin.Forms.Platform.Resource.Attribute.pressedTranslationZ = global::EFGetStarted.Droid.Resource.Attribute.pressedTranslationZ; - global::Xamarin.Forms.Platform.Resource.Attribute.progressBarPadding = global::EFGetStarted.Droid.Resource.Attribute.progressBarPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.progressBarStyle = global::EFGetStarted.Droid.Resource.Attribute.progressBarStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.queryBackground = global::EFGetStarted.Droid.Resource.Attribute.queryBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.queryHint = global::EFGetStarted.Droid.Resource.Attribute.queryHint; - global::Xamarin.Forms.Platform.Resource.Attribute.radioButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.radioButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.ratingBarStyle = global::EFGetStarted.Droid.Resource.Attribute.ratingBarStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.ratingBarStyleIndicator = global::EFGetStarted.Droid.Resource.Attribute.ratingBarStyleIndicator; - global::Xamarin.Forms.Platform.Resource.Attribute.ratingBarStyleSmall = global::EFGetStarted.Droid.Resource.Attribute.ratingBarStyleSmall; - global::Xamarin.Forms.Platform.Resource.Attribute.reverseLayout = global::EFGetStarted.Droid.Resource.Attribute.reverseLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.rippleColor = global::EFGetStarted.Droid.Resource.Attribute.rippleColor; - global::Xamarin.Forms.Platform.Resource.Attribute.scrimAnimationDuration = global::EFGetStarted.Droid.Resource.Attribute.scrimAnimationDuration; - global::Xamarin.Forms.Platform.Resource.Attribute.scrimBackground = global::EFGetStarted.Droid.Resource.Attribute.scrimBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.scrimVisibleHeightTrigger = global::EFGetStarted.Droid.Resource.Attribute.scrimVisibleHeightTrigger; - global::Xamarin.Forms.Platform.Resource.Attribute.scrollViewStyle = global::EFGetStarted.Droid.Resource.Attribute.scrollViewStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.searchHintIcon = global::EFGetStarted.Droid.Resource.Attribute.searchHintIcon; - global::Xamarin.Forms.Platform.Resource.Attribute.searchIcon = global::EFGetStarted.Droid.Resource.Attribute.searchIcon; - global::Xamarin.Forms.Platform.Resource.Attribute.searchViewStyle = global::EFGetStarted.Droid.Resource.Attribute.searchViewStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.seekBarStyle = global::EFGetStarted.Droid.Resource.Attribute.seekBarStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.selectableItemBackground = global::EFGetStarted.Droid.Resource.Attribute.selectableItemBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.selectableItemBackgroundBorderless = global::EFGetStarted.Droid.Resource.Attribute.selectableItemBackgroundBorderless; - global::Xamarin.Forms.Platform.Resource.Attribute.showAsAction = global::EFGetStarted.Droid.Resource.Attribute.showAsAction; - global::Xamarin.Forms.Platform.Resource.Attribute.showDividers = global::EFGetStarted.Droid.Resource.Attribute.showDividers; - global::Xamarin.Forms.Platform.Resource.Attribute.showMotionSpec = global::EFGetStarted.Droid.Resource.Attribute.showMotionSpec; - global::Xamarin.Forms.Platform.Resource.Attribute.showText = global::EFGetStarted.Droid.Resource.Attribute.showText; - global::Xamarin.Forms.Platform.Resource.Attribute.showTitle = global::EFGetStarted.Droid.Resource.Attribute.showTitle; - global::Xamarin.Forms.Platform.Resource.Attribute.singleChoiceItemLayout = global::EFGetStarted.Droid.Resource.Attribute.singleChoiceItemLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.singleLine = global::EFGetStarted.Droid.Resource.Attribute.singleLine; - global::Xamarin.Forms.Platform.Resource.Attribute.singleSelection = global::EFGetStarted.Droid.Resource.Attribute.singleSelection; - global::Xamarin.Forms.Platform.Resource.Attribute.snackbarButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.snackbarButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.snackbarStyle = global::EFGetStarted.Droid.Resource.Attribute.snackbarStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.spanCount = global::EFGetStarted.Droid.Resource.Attribute.spanCount; - global::Xamarin.Forms.Platform.Resource.Attribute.spinBars = global::EFGetStarted.Droid.Resource.Attribute.spinBars; - global::Xamarin.Forms.Platform.Resource.Attribute.spinnerDropDownItemStyle = global::EFGetStarted.Droid.Resource.Attribute.spinnerDropDownItemStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.spinnerStyle = global::EFGetStarted.Droid.Resource.Attribute.spinnerStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.splitTrack = global::EFGetStarted.Droid.Resource.Attribute.splitTrack; - global::Xamarin.Forms.Platform.Resource.Attribute.srcCompat = global::EFGetStarted.Droid.Resource.Attribute.srcCompat; - global::Xamarin.Forms.Platform.Resource.Attribute.stackFromEnd = global::EFGetStarted.Droid.Resource.Attribute.stackFromEnd; - global::Xamarin.Forms.Platform.Resource.Attribute.state_above_anchor = global::EFGetStarted.Droid.Resource.Attribute.state_above_anchor; - global::Xamarin.Forms.Platform.Resource.Attribute.state_collapsed = global::EFGetStarted.Droid.Resource.Attribute.state_collapsed; - global::Xamarin.Forms.Platform.Resource.Attribute.state_collapsible = global::EFGetStarted.Droid.Resource.Attribute.state_collapsible; - global::Xamarin.Forms.Platform.Resource.Attribute.state_liftable = global::EFGetStarted.Droid.Resource.Attribute.state_liftable; - global::Xamarin.Forms.Platform.Resource.Attribute.state_lifted = global::EFGetStarted.Droid.Resource.Attribute.state_lifted; - global::Xamarin.Forms.Platform.Resource.Attribute.statusBarBackground = global::EFGetStarted.Droid.Resource.Attribute.statusBarBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.statusBarScrim = global::EFGetStarted.Droid.Resource.Attribute.statusBarScrim; - global::Xamarin.Forms.Platform.Resource.Attribute.strokeColor = global::EFGetStarted.Droid.Resource.Attribute.strokeColor; - global::Xamarin.Forms.Platform.Resource.Attribute.strokeWidth = global::EFGetStarted.Droid.Resource.Attribute.strokeWidth; - global::Xamarin.Forms.Platform.Resource.Attribute.subMenuArrow = global::EFGetStarted.Droid.Resource.Attribute.subMenuArrow; - global::Xamarin.Forms.Platform.Resource.Attribute.submitBackground = global::EFGetStarted.Droid.Resource.Attribute.submitBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.subtitle = global::EFGetStarted.Droid.Resource.Attribute.subtitle; - global::Xamarin.Forms.Platform.Resource.Attribute.subtitleTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.subtitleTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.subtitleTextColor = global::EFGetStarted.Droid.Resource.Attribute.subtitleTextColor; - global::Xamarin.Forms.Platform.Resource.Attribute.subtitleTextStyle = global::EFGetStarted.Droid.Resource.Attribute.subtitleTextStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.suggestionRowLayout = global::EFGetStarted.Droid.Resource.Attribute.suggestionRowLayout; - global::Xamarin.Forms.Platform.Resource.Attribute.switchMinWidth = global::EFGetStarted.Droid.Resource.Attribute.switchMinWidth; - global::Xamarin.Forms.Platform.Resource.Attribute.switchPadding = global::EFGetStarted.Droid.Resource.Attribute.switchPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.switchStyle = global::EFGetStarted.Droid.Resource.Attribute.switchStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.switchTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.switchTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.tabBackground = global::EFGetStarted.Droid.Resource.Attribute.tabBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.tabContentStart = global::EFGetStarted.Droid.Resource.Attribute.tabContentStart; - global::Xamarin.Forms.Platform.Resource.Attribute.tabGravity = global::EFGetStarted.Droid.Resource.Attribute.tabGravity; - global::Xamarin.Forms.Platform.Resource.Attribute.tabIconTint = global::EFGetStarted.Droid.Resource.Attribute.tabIconTint; - global::Xamarin.Forms.Platform.Resource.Attribute.tabIconTintMode = global::EFGetStarted.Droid.Resource.Attribute.tabIconTintMode; - global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicator = global::EFGetStarted.Droid.Resource.Attribute.tabIndicator; - global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicatorAnimationDuration = global::EFGetStarted.Droid.Resource.Attribute.tabIndicatorAnimationDuration; - global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicatorColor = global::EFGetStarted.Droid.Resource.Attribute.tabIndicatorColor; - global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicatorFullWidth = global::EFGetStarted.Droid.Resource.Attribute.tabIndicatorFullWidth; - global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicatorGravity = global::EFGetStarted.Droid.Resource.Attribute.tabIndicatorGravity; - global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicatorHeight = global::EFGetStarted.Droid.Resource.Attribute.tabIndicatorHeight; - global::Xamarin.Forms.Platform.Resource.Attribute.tabInlineLabel = global::EFGetStarted.Droid.Resource.Attribute.tabInlineLabel; - global::Xamarin.Forms.Platform.Resource.Attribute.tabMaxWidth = global::EFGetStarted.Droid.Resource.Attribute.tabMaxWidth; - global::Xamarin.Forms.Platform.Resource.Attribute.tabMinWidth = global::EFGetStarted.Droid.Resource.Attribute.tabMinWidth; - global::Xamarin.Forms.Platform.Resource.Attribute.tabMode = global::EFGetStarted.Droid.Resource.Attribute.tabMode; - global::Xamarin.Forms.Platform.Resource.Attribute.tabPadding = global::EFGetStarted.Droid.Resource.Attribute.tabPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.tabPaddingBottom = global::EFGetStarted.Droid.Resource.Attribute.tabPaddingBottom; - global::Xamarin.Forms.Platform.Resource.Attribute.tabPaddingEnd = global::EFGetStarted.Droid.Resource.Attribute.tabPaddingEnd; - global::Xamarin.Forms.Platform.Resource.Attribute.tabPaddingStart = global::EFGetStarted.Droid.Resource.Attribute.tabPaddingStart; - global::Xamarin.Forms.Platform.Resource.Attribute.tabPaddingTop = global::EFGetStarted.Droid.Resource.Attribute.tabPaddingTop; - global::Xamarin.Forms.Platform.Resource.Attribute.tabRippleColor = global::EFGetStarted.Droid.Resource.Attribute.tabRippleColor; - global::Xamarin.Forms.Platform.Resource.Attribute.tabSelectedTextColor = global::EFGetStarted.Droid.Resource.Attribute.tabSelectedTextColor; - global::Xamarin.Forms.Platform.Resource.Attribute.tabStyle = global::EFGetStarted.Droid.Resource.Attribute.tabStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.tabTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.tabTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.tabTextColor = global::EFGetStarted.Droid.Resource.Attribute.tabTextColor; - global::Xamarin.Forms.Platform.Resource.Attribute.tabUnboundedRipple = global::EFGetStarted.Droid.Resource.Attribute.tabUnboundedRipple; - global::Xamarin.Forms.Platform.Resource.Attribute.textAllCaps = global::EFGetStarted.Droid.Resource.Attribute.textAllCaps; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceBody1 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceBody1; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceBody2 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceBody2; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceButton = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceButton; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceCaption = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceCaption; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline1 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline1; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline2 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline2; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline3 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline3; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline4 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline4; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline5 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline5; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline6 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceHeadline6; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceLargePopupMenu = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceLargePopupMenu; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceListItem = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceListItem; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceListItemSecondary = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceListItemSecondary; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceListItemSmall = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceListItemSmall; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceOverline = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceOverline; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearancePopupMenuHeader = global::EFGetStarted.Droid.Resource.Attribute.textAppearancePopupMenuHeader; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceSearchResultSubtitle = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceSearchResultSubtitle; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceSearchResultTitle = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceSearchResultTitle; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceSmallPopupMenu = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceSmallPopupMenu; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceSubtitle1 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceSubtitle1; - global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceSubtitle2 = global::EFGetStarted.Droid.Resource.Attribute.textAppearanceSubtitle2; - global::Xamarin.Forms.Platform.Resource.Attribute.textColorAlertDialogListItem = global::EFGetStarted.Droid.Resource.Attribute.textColorAlertDialogListItem; - global::Xamarin.Forms.Platform.Resource.Attribute.textColorSearchUrl = global::EFGetStarted.Droid.Resource.Attribute.textColorSearchUrl; - global::Xamarin.Forms.Platform.Resource.Attribute.textEndPadding = global::EFGetStarted.Droid.Resource.Attribute.textEndPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.textInputStyle = global::EFGetStarted.Droid.Resource.Attribute.textInputStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.textStartPadding = global::EFGetStarted.Droid.Resource.Attribute.textStartPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.theme = global::EFGetStarted.Droid.Resource.Attribute.theme; - global::Xamarin.Forms.Platform.Resource.Attribute.thickness = global::EFGetStarted.Droid.Resource.Attribute.thickness; - global::Xamarin.Forms.Platform.Resource.Attribute.thumbTextPadding = global::EFGetStarted.Droid.Resource.Attribute.thumbTextPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.thumbTint = global::EFGetStarted.Droid.Resource.Attribute.thumbTint; - global::Xamarin.Forms.Platform.Resource.Attribute.thumbTintMode = global::EFGetStarted.Droid.Resource.Attribute.thumbTintMode; - global::Xamarin.Forms.Platform.Resource.Attribute.tickMark = global::EFGetStarted.Droid.Resource.Attribute.tickMark; - global::Xamarin.Forms.Platform.Resource.Attribute.tickMarkTint = global::EFGetStarted.Droid.Resource.Attribute.tickMarkTint; - global::Xamarin.Forms.Platform.Resource.Attribute.tickMarkTintMode = global::EFGetStarted.Droid.Resource.Attribute.tickMarkTintMode; - global::Xamarin.Forms.Platform.Resource.Attribute.tint = global::EFGetStarted.Droid.Resource.Attribute.tint; - global::Xamarin.Forms.Platform.Resource.Attribute.tintMode = global::EFGetStarted.Droid.Resource.Attribute.tintMode; - global::Xamarin.Forms.Platform.Resource.Attribute.title = global::EFGetStarted.Droid.Resource.Attribute.title; - global::Xamarin.Forms.Platform.Resource.Attribute.titleEnabled = global::EFGetStarted.Droid.Resource.Attribute.titleEnabled; - global::Xamarin.Forms.Platform.Resource.Attribute.titleMargin = global::EFGetStarted.Droid.Resource.Attribute.titleMargin; - global::Xamarin.Forms.Platform.Resource.Attribute.titleMarginBottom = global::EFGetStarted.Droid.Resource.Attribute.titleMarginBottom; - global::Xamarin.Forms.Platform.Resource.Attribute.titleMarginEnd = global::EFGetStarted.Droid.Resource.Attribute.titleMarginEnd; - global::Xamarin.Forms.Platform.Resource.Attribute.titleMargins = global::EFGetStarted.Droid.Resource.Attribute.titleMargins; - global::Xamarin.Forms.Platform.Resource.Attribute.titleMarginStart = global::EFGetStarted.Droid.Resource.Attribute.titleMarginStart; - global::Xamarin.Forms.Platform.Resource.Attribute.titleMarginTop = global::EFGetStarted.Droid.Resource.Attribute.titleMarginTop; - global::Xamarin.Forms.Platform.Resource.Attribute.titleTextAppearance = global::EFGetStarted.Droid.Resource.Attribute.titleTextAppearance; - global::Xamarin.Forms.Platform.Resource.Attribute.titleTextColor = global::EFGetStarted.Droid.Resource.Attribute.titleTextColor; - global::Xamarin.Forms.Platform.Resource.Attribute.titleTextStyle = global::EFGetStarted.Droid.Resource.Attribute.titleTextStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.toolbarId = global::EFGetStarted.Droid.Resource.Attribute.toolbarId; - global::Xamarin.Forms.Platform.Resource.Attribute.toolbarNavigationButtonStyle = global::EFGetStarted.Droid.Resource.Attribute.toolbarNavigationButtonStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.toolbarStyle = global::EFGetStarted.Droid.Resource.Attribute.toolbarStyle; - global::Xamarin.Forms.Platform.Resource.Attribute.tooltipForegroundColor = global::EFGetStarted.Droid.Resource.Attribute.tooltipForegroundColor; - global::Xamarin.Forms.Platform.Resource.Attribute.tooltipFrameBackground = global::EFGetStarted.Droid.Resource.Attribute.tooltipFrameBackground; - global::Xamarin.Forms.Platform.Resource.Attribute.tooltipText = global::EFGetStarted.Droid.Resource.Attribute.tooltipText; - global::Xamarin.Forms.Platform.Resource.Attribute.track = global::EFGetStarted.Droid.Resource.Attribute.track; - global::Xamarin.Forms.Platform.Resource.Attribute.trackTint = global::EFGetStarted.Droid.Resource.Attribute.trackTint; - global::Xamarin.Forms.Platform.Resource.Attribute.trackTintMode = global::EFGetStarted.Droid.Resource.Attribute.trackTintMode; - global::Xamarin.Forms.Platform.Resource.Attribute.ttcIndex = global::EFGetStarted.Droid.Resource.Attribute.ttcIndex; - global::Xamarin.Forms.Platform.Resource.Attribute.useCompatPadding = global::EFGetStarted.Droid.Resource.Attribute.useCompatPadding; - global::Xamarin.Forms.Platform.Resource.Attribute.viewInflaterClass = global::EFGetStarted.Droid.Resource.Attribute.viewInflaterClass; - global::Xamarin.Forms.Platform.Resource.Attribute.voiceIcon = global::EFGetStarted.Droid.Resource.Attribute.voiceIcon; - global::Xamarin.Forms.Platform.Resource.Attribute.windowActionBar = global::EFGetStarted.Droid.Resource.Attribute.windowActionBar; - global::Xamarin.Forms.Platform.Resource.Attribute.windowActionBarOverlay = global::EFGetStarted.Droid.Resource.Attribute.windowActionBarOverlay; - global::Xamarin.Forms.Platform.Resource.Attribute.windowActionModeOverlay = global::EFGetStarted.Droid.Resource.Attribute.windowActionModeOverlay; - global::Xamarin.Forms.Platform.Resource.Attribute.windowFixedHeightMajor = global::EFGetStarted.Droid.Resource.Attribute.windowFixedHeightMajor; - global::Xamarin.Forms.Platform.Resource.Attribute.windowFixedHeightMinor = global::EFGetStarted.Droid.Resource.Attribute.windowFixedHeightMinor; - global::Xamarin.Forms.Platform.Resource.Attribute.windowFixedWidthMajor = global::EFGetStarted.Droid.Resource.Attribute.windowFixedWidthMajor; - global::Xamarin.Forms.Platform.Resource.Attribute.windowFixedWidthMinor = global::EFGetStarted.Droid.Resource.Attribute.windowFixedWidthMinor; - global::Xamarin.Forms.Platform.Resource.Attribute.windowMinWidthMajor = global::EFGetStarted.Droid.Resource.Attribute.windowMinWidthMajor; - global::Xamarin.Forms.Platform.Resource.Attribute.windowMinWidthMinor = global::EFGetStarted.Droid.Resource.Attribute.windowMinWidthMinor; - global::Xamarin.Forms.Platform.Resource.Attribute.windowNoTitle = global::EFGetStarted.Droid.Resource.Attribute.windowNoTitle; - global::Xamarin.Forms.Platform.Resource.Boolean.abc_action_bar_embed_tabs = global::EFGetStarted.Droid.Resource.Boolean.abc_action_bar_embed_tabs; - global::Xamarin.Forms.Platform.Resource.Boolean.abc_allow_stacked_button_bar = global::EFGetStarted.Droid.Resource.Boolean.abc_allow_stacked_button_bar; - global::Xamarin.Forms.Platform.Resource.Boolean.abc_config_actionMenuItemAllCaps = global::EFGetStarted.Droid.Resource.Boolean.abc_config_actionMenuItemAllCaps; - global::Xamarin.Forms.Platform.Resource.Boolean.mtrl_btn_textappearance_all_caps = global::EFGetStarted.Droid.Resource.Boolean.mtrl_btn_textappearance_all_caps; - global::Xamarin.Forms.Platform.Resource.Color.abc_background_cache_hint_selector_material_dark = global::EFGetStarted.Droid.Resource.Color.abc_background_cache_hint_selector_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.abc_background_cache_hint_selector_material_light = global::EFGetStarted.Droid.Resource.Color.abc_background_cache_hint_selector_material_light; - global::Xamarin.Forms.Platform.Resource.Color.abc_btn_colored_borderless_text_material = global::EFGetStarted.Droid.Resource.Color.abc_btn_colored_borderless_text_material; - global::Xamarin.Forms.Platform.Resource.Color.abc_btn_colored_text_material = global::EFGetStarted.Droid.Resource.Color.abc_btn_colored_text_material; - global::Xamarin.Forms.Platform.Resource.Color.abc_color_highlight_material = global::EFGetStarted.Droid.Resource.Color.abc_color_highlight_material; - global::Xamarin.Forms.Platform.Resource.Color.abc_hint_foreground_material_dark = global::EFGetStarted.Droid.Resource.Color.abc_hint_foreground_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.abc_hint_foreground_material_light = global::EFGetStarted.Droid.Resource.Color.abc_hint_foreground_material_light; - global::Xamarin.Forms.Platform.Resource.Color.abc_input_method_navigation_guard = global::EFGetStarted.Droid.Resource.Color.abc_input_method_navigation_guard; - global::Xamarin.Forms.Platform.Resource.Color.abc_primary_text_disable_only_material_dark = global::EFGetStarted.Droid.Resource.Color.abc_primary_text_disable_only_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.abc_primary_text_disable_only_material_light = global::EFGetStarted.Droid.Resource.Color.abc_primary_text_disable_only_material_light; - global::Xamarin.Forms.Platform.Resource.Color.abc_primary_text_material_dark = global::EFGetStarted.Droid.Resource.Color.abc_primary_text_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.abc_primary_text_material_light = global::EFGetStarted.Droid.Resource.Color.abc_primary_text_material_light; - global::Xamarin.Forms.Platform.Resource.Color.abc_search_url_text = global::EFGetStarted.Droid.Resource.Color.abc_search_url_text; - global::Xamarin.Forms.Platform.Resource.Color.abc_search_url_text_normal = global::EFGetStarted.Droid.Resource.Color.abc_search_url_text_normal; - global::Xamarin.Forms.Platform.Resource.Color.abc_search_url_text_pressed = global::EFGetStarted.Droid.Resource.Color.abc_search_url_text_pressed; - global::Xamarin.Forms.Platform.Resource.Color.abc_search_url_text_selected = global::EFGetStarted.Droid.Resource.Color.abc_search_url_text_selected; - global::Xamarin.Forms.Platform.Resource.Color.abc_secondary_text_material_dark = global::EFGetStarted.Droid.Resource.Color.abc_secondary_text_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.abc_secondary_text_material_light = global::EFGetStarted.Droid.Resource.Color.abc_secondary_text_material_light; - global::Xamarin.Forms.Platform.Resource.Color.abc_tint_btn_checkable = global::EFGetStarted.Droid.Resource.Color.abc_tint_btn_checkable; - global::Xamarin.Forms.Platform.Resource.Color.abc_tint_default = global::EFGetStarted.Droid.Resource.Color.abc_tint_default; - global::Xamarin.Forms.Platform.Resource.Color.abc_tint_edittext = global::EFGetStarted.Droid.Resource.Color.abc_tint_edittext; - global::Xamarin.Forms.Platform.Resource.Color.abc_tint_seek_thumb = global::EFGetStarted.Droid.Resource.Color.abc_tint_seek_thumb; - global::Xamarin.Forms.Platform.Resource.Color.abc_tint_spinner = global::EFGetStarted.Droid.Resource.Color.abc_tint_spinner; - global::Xamarin.Forms.Platform.Resource.Color.abc_tint_switch_track = global::EFGetStarted.Droid.Resource.Color.abc_tint_switch_track; - global::Xamarin.Forms.Platform.Resource.Color.accent_material_dark = global::EFGetStarted.Droid.Resource.Color.accent_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.accent_material_light = global::EFGetStarted.Droid.Resource.Color.accent_material_light; - global::Xamarin.Forms.Platform.Resource.Color.background_floating_material_dark = global::EFGetStarted.Droid.Resource.Color.background_floating_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.background_floating_material_light = global::EFGetStarted.Droid.Resource.Color.background_floating_material_light; - global::Xamarin.Forms.Platform.Resource.Color.background_material_dark = global::EFGetStarted.Droid.Resource.Color.background_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.background_material_light = global::EFGetStarted.Droid.Resource.Color.background_material_light; - global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_disabled_material_dark = global::EFGetStarted.Droid.Resource.Color.bright_foreground_disabled_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_disabled_material_light = global::EFGetStarted.Droid.Resource.Color.bright_foreground_disabled_material_light; - global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_inverse_material_dark = global::EFGetStarted.Droid.Resource.Color.bright_foreground_inverse_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_inverse_material_light = global::EFGetStarted.Droid.Resource.Color.bright_foreground_inverse_material_light; - global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_material_dark = global::EFGetStarted.Droid.Resource.Color.bright_foreground_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_material_light = global::EFGetStarted.Droid.Resource.Color.bright_foreground_material_light; - global::Xamarin.Forms.Platform.Resource.Color.button_material_dark = global::EFGetStarted.Droid.Resource.Color.button_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.button_material_light = global::EFGetStarted.Droid.Resource.Color.button_material_light; - global::Xamarin.Forms.Platform.Resource.Color.cardview_dark_background = global::EFGetStarted.Droid.Resource.Color.cardview_dark_background; - global::Xamarin.Forms.Platform.Resource.Color.cardview_light_background = global::EFGetStarted.Droid.Resource.Color.cardview_light_background; - global::Xamarin.Forms.Platform.Resource.Color.cardview_shadow_end_color = global::EFGetStarted.Droid.Resource.Color.cardview_shadow_end_color; - global::Xamarin.Forms.Platform.Resource.Color.cardview_shadow_start_color = global::EFGetStarted.Droid.Resource.Color.cardview_shadow_start_color; - global::Xamarin.Forms.Platform.Resource.Color.design_bottom_navigation_shadow_color = global::EFGetStarted.Droid.Resource.Color.design_bottom_navigation_shadow_color; - global::Xamarin.Forms.Platform.Resource.Color.design_default_color_primary = global::EFGetStarted.Droid.Resource.Color.design_default_color_primary; - global::Xamarin.Forms.Platform.Resource.Color.design_default_color_primary_dark = global::EFGetStarted.Droid.Resource.Color.design_default_color_primary_dark; - global::Xamarin.Forms.Platform.Resource.Color.design_error = global::EFGetStarted.Droid.Resource.Color.design_error; - global::Xamarin.Forms.Platform.Resource.Color.design_fab_shadow_end_color = global::EFGetStarted.Droid.Resource.Color.design_fab_shadow_end_color; - global::Xamarin.Forms.Platform.Resource.Color.design_fab_shadow_mid_color = global::EFGetStarted.Droid.Resource.Color.design_fab_shadow_mid_color; - global::Xamarin.Forms.Platform.Resource.Color.design_fab_shadow_start_color = global::EFGetStarted.Droid.Resource.Color.design_fab_shadow_start_color; - global::Xamarin.Forms.Platform.Resource.Color.design_fab_stroke_end_inner_color = global::EFGetStarted.Droid.Resource.Color.design_fab_stroke_end_inner_color; - global::Xamarin.Forms.Platform.Resource.Color.design_fab_stroke_end_outer_color = global::EFGetStarted.Droid.Resource.Color.design_fab_stroke_end_outer_color; - global::Xamarin.Forms.Platform.Resource.Color.design_fab_stroke_top_inner_color = global::EFGetStarted.Droid.Resource.Color.design_fab_stroke_top_inner_color; - global::Xamarin.Forms.Platform.Resource.Color.design_fab_stroke_top_outer_color = global::EFGetStarted.Droid.Resource.Color.design_fab_stroke_top_outer_color; - global::Xamarin.Forms.Platform.Resource.Color.design_snackbar_background_color = global::EFGetStarted.Droid.Resource.Color.design_snackbar_background_color; - global::Xamarin.Forms.Platform.Resource.Color.design_tint_password_toggle = global::EFGetStarted.Droid.Resource.Color.design_tint_password_toggle; - global::Xamarin.Forms.Platform.Resource.Color.dim_foreground_disabled_material_dark = global::EFGetStarted.Droid.Resource.Color.dim_foreground_disabled_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.dim_foreground_disabled_material_light = global::EFGetStarted.Droid.Resource.Color.dim_foreground_disabled_material_light; - global::Xamarin.Forms.Platform.Resource.Color.dim_foreground_material_dark = global::EFGetStarted.Droid.Resource.Color.dim_foreground_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.dim_foreground_material_light = global::EFGetStarted.Droid.Resource.Color.dim_foreground_material_light; - global::Xamarin.Forms.Platform.Resource.Color.error_color_material_dark = global::EFGetStarted.Droid.Resource.Color.error_color_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.error_color_material_light = global::EFGetStarted.Droid.Resource.Color.error_color_material_light; - global::Xamarin.Forms.Platform.Resource.Color.foreground_material_dark = global::EFGetStarted.Droid.Resource.Color.foreground_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.foreground_material_light = global::EFGetStarted.Droid.Resource.Color.foreground_material_light; - global::Xamarin.Forms.Platform.Resource.Color.highlighted_text_material_dark = global::EFGetStarted.Droid.Resource.Color.highlighted_text_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.highlighted_text_material_light = global::EFGetStarted.Droid.Resource.Color.highlighted_text_material_light; - global::Xamarin.Forms.Platform.Resource.Color.material_blue_grey_800 = global::EFGetStarted.Droid.Resource.Color.material_blue_grey_800; - global::Xamarin.Forms.Platform.Resource.Color.material_blue_grey_900 = global::EFGetStarted.Droid.Resource.Color.material_blue_grey_900; - global::Xamarin.Forms.Platform.Resource.Color.material_blue_grey_950 = global::EFGetStarted.Droid.Resource.Color.material_blue_grey_950; - global::Xamarin.Forms.Platform.Resource.Color.material_deep_teal_200 = global::EFGetStarted.Droid.Resource.Color.material_deep_teal_200; - global::Xamarin.Forms.Platform.Resource.Color.material_deep_teal_500 = global::EFGetStarted.Droid.Resource.Color.material_deep_teal_500; - global::Xamarin.Forms.Platform.Resource.Color.material_grey_100 = global::EFGetStarted.Droid.Resource.Color.material_grey_100; - global::Xamarin.Forms.Platform.Resource.Color.material_grey_300 = global::EFGetStarted.Droid.Resource.Color.material_grey_300; - global::Xamarin.Forms.Platform.Resource.Color.material_grey_50 = global::EFGetStarted.Droid.Resource.Color.material_grey_50; - global::Xamarin.Forms.Platform.Resource.Color.material_grey_600 = global::EFGetStarted.Droid.Resource.Color.material_grey_600; - global::Xamarin.Forms.Platform.Resource.Color.material_grey_800 = global::EFGetStarted.Droid.Resource.Color.material_grey_800; - global::Xamarin.Forms.Platform.Resource.Color.material_grey_850 = global::EFGetStarted.Droid.Resource.Color.material_grey_850; - global::Xamarin.Forms.Platform.Resource.Color.material_grey_900 = global::EFGetStarted.Droid.Resource.Color.material_grey_900; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_bottom_nav_colored_item_tint = global::EFGetStarted.Droid.Resource.Color.mtrl_bottom_nav_colored_item_tint; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_bottom_nav_item_tint = global::EFGetStarted.Droid.Resource.Color.mtrl_bottom_nav_item_tint; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_bg_color_disabled = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_bg_color_disabled; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_bg_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_bg_color_selector; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_ripple_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_stroke_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_stroke_color_selector; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_text_btn_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_text_btn_ripple_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_text_color_disabled = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_text_color_disabled; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_text_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_text_color_selector; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_transparent_bg_color = global::EFGetStarted.Droid.Resource.Color.mtrl_btn_transparent_bg_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_chip_background_color = global::EFGetStarted.Droid.Resource.Color.mtrl_chip_background_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_chip_close_icon_tint = global::EFGetStarted.Droid.Resource.Color.mtrl_chip_close_icon_tint; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_chip_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_chip_ripple_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_chip_text_color = global::EFGetStarted.Droid.Resource.Color.mtrl_chip_text_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_fab_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_fab_ripple_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_scrim_color = global::EFGetStarted.Droid.Resource.Color.mtrl_scrim_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_tabs_colored_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_tabs_colored_ripple_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_tabs_icon_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_tabs_icon_color_selector; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_tabs_icon_color_selector_colored = global::EFGetStarted.Droid.Resource.Color.mtrl_tabs_icon_color_selector_colored; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_tabs_legacy_text_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_tabs_legacy_text_color_selector; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_tabs_ripple_color = global::EFGetStarted.Droid.Resource.Color.mtrl_tabs_ripple_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_textinput_default_box_stroke_color = global::EFGetStarted.Droid.Resource.Color.mtrl_textinput_default_box_stroke_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_textinput_disabled_color = global::EFGetStarted.Droid.Resource.Color.mtrl_textinput_disabled_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_textinput_filled_box_default_background_color = global::EFGetStarted.Droid.Resource.Color.mtrl_textinput_filled_box_default_background_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_textinput_hovered_box_stroke_color = global::EFGetStarted.Droid.Resource.Color.mtrl_textinput_hovered_box_stroke_color; - global::Xamarin.Forms.Platform.Resource.Color.mtrl_text_btn_text_color_selector = global::EFGetStarted.Droid.Resource.Color.mtrl_text_btn_text_color_selector; - global::Xamarin.Forms.Platform.Resource.Color.notification_action_color_filter = global::EFGetStarted.Droid.Resource.Color.notification_action_color_filter; - global::Xamarin.Forms.Platform.Resource.Color.notification_icon_bg_color = global::EFGetStarted.Droid.Resource.Color.notification_icon_bg_color; - global::Xamarin.Forms.Platform.Resource.Color.notification_material_background_media_default_color = global::EFGetStarted.Droid.Resource.Color.notification_material_background_media_default_color; - global::Xamarin.Forms.Platform.Resource.Color.primary_dark_material_dark = global::EFGetStarted.Droid.Resource.Color.primary_dark_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.primary_dark_material_light = global::EFGetStarted.Droid.Resource.Color.primary_dark_material_light; - global::Xamarin.Forms.Platform.Resource.Color.primary_material_dark = global::EFGetStarted.Droid.Resource.Color.primary_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.primary_material_light = global::EFGetStarted.Droid.Resource.Color.primary_material_light; - global::Xamarin.Forms.Platform.Resource.Color.primary_text_default_material_dark = global::EFGetStarted.Droid.Resource.Color.primary_text_default_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.primary_text_default_material_light = global::EFGetStarted.Droid.Resource.Color.primary_text_default_material_light; - global::Xamarin.Forms.Platform.Resource.Color.primary_text_disabled_material_dark = global::EFGetStarted.Droid.Resource.Color.primary_text_disabled_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.primary_text_disabled_material_light = global::EFGetStarted.Droid.Resource.Color.primary_text_disabled_material_light; - global::Xamarin.Forms.Platform.Resource.Color.ripple_material_dark = global::EFGetStarted.Droid.Resource.Color.ripple_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.ripple_material_light = global::EFGetStarted.Droid.Resource.Color.ripple_material_light; - global::Xamarin.Forms.Platform.Resource.Color.secondary_text_default_material_dark = global::EFGetStarted.Droid.Resource.Color.secondary_text_default_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.secondary_text_default_material_light = global::EFGetStarted.Droid.Resource.Color.secondary_text_default_material_light; - global::Xamarin.Forms.Platform.Resource.Color.secondary_text_disabled_material_dark = global::EFGetStarted.Droid.Resource.Color.secondary_text_disabled_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.secondary_text_disabled_material_light = global::EFGetStarted.Droid.Resource.Color.secondary_text_disabled_material_light; - global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_disabled_material_dark = global::EFGetStarted.Droid.Resource.Color.switch_thumb_disabled_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_disabled_material_light = global::EFGetStarted.Droid.Resource.Color.switch_thumb_disabled_material_light; - global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_material_dark = global::EFGetStarted.Droid.Resource.Color.switch_thumb_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_material_light = global::EFGetStarted.Droid.Resource.Color.switch_thumb_material_light; - global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_normal_material_dark = global::EFGetStarted.Droid.Resource.Color.switch_thumb_normal_material_dark; - global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_normal_material_light = global::EFGetStarted.Droid.Resource.Color.switch_thumb_normal_material_light; - global::Xamarin.Forms.Platform.Resource.Color.tooltip_background_dark = global::EFGetStarted.Droid.Resource.Color.tooltip_background_dark; - global::Xamarin.Forms.Platform.Resource.Color.tooltip_background_light = global::EFGetStarted.Droid.Resource.Color.tooltip_background_light; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_content_inset_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_content_inset_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_content_inset_with_nav = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_content_inset_with_nav; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_default_height_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_default_height_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_default_padding_end_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_default_padding_end_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_default_padding_start_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_default_padding_start_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_elevation_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_elevation_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_icon_vertical_padding_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_icon_vertical_padding_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_overflow_padding_end_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_overflow_padding_end_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_overflow_padding_start_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_overflow_padding_start_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_stacked_max_height = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_stacked_max_height; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_stacked_tab_max_width = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_stacked_tab_max_width; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_subtitle_top_margin_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_bar_subtitle_top_margin_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_button_min_height_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_button_min_height_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_button_min_width_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_button_min_width_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_button_min_width_overflow_material = global::EFGetStarted.Droid.Resource.Dimension.abc_action_button_min_width_overflow_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_alert_dialog_button_bar_height = global::EFGetStarted.Droid.Resource.Dimension.abc_alert_dialog_button_bar_height; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_alert_dialog_button_dimen = global::EFGetStarted.Droid.Resource.Dimension.abc_alert_dialog_button_dimen; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_button_inset_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.abc_button_inset_horizontal_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_button_inset_vertical_material = global::EFGetStarted.Droid.Resource.Dimension.abc_button_inset_vertical_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_button_padding_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.abc_button_padding_horizontal_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_button_padding_vertical_material = global::EFGetStarted.Droid.Resource.Dimension.abc_button_padding_vertical_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_cascading_menus_min_smallest_width = global::EFGetStarted.Droid.Resource.Dimension.abc_cascading_menus_min_smallest_width; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_config_prefDialogWidth = global::EFGetStarted.Droid.Resource.Dimension.abc_config_prefDialogWidth; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_control_corner_material = global::EFGetStarted.Droid.Resource.Dimension.abc_control_corner_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_control_inset_material = global::EFGetStarted.Droid.Resource.Dimension.abc_control_inset_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_control_padding_material = global::EFGetStarted.Droid.Resource.Dimension.abc_control_padding_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_corner_radius_material = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_corner_radius_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_fixed_height_major = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_fixed_height_major; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_fixed_height_minor = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_fixed_height_minor; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_fixed_width_major = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_fixed_width_major; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_fixed_width_minor = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_fixed_width_minor; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_list_padding_top_no_title = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_list_padding_top_no_title; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_min_width_major = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_min_width_major; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_min_width_minor = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_min_width_minor; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_padding_material = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_padding_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_padding_top_material = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_padding_top_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_title_divider_material = global::EFGetStarted.Droid.Resource.Dimension.abc_dialog_title_divider_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_disabled_alpha_material_dark = global::EFGetStarted.Droid.Resource.Dimension.abc_disabled_alpha_material_dark; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_disabled_alpha_material_light = global::EFGetStarted.Droid.Resource.Dimension.abc_disabled_alpha_material_light; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dropdownitem_icon_width = global::EFGetStarted.Droid.Resource.Dimension.abc_dropdownitem_icon_width; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dropdownitem_text_padding_left = global::EFGetStarted.Droid.Resource.Dimension.abc_dropdownitem_text_padding_left; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_dropdownitem_text_padding_right = global::EFGetStarted.Droid.Resource.Dimension.abc_dropdownitem_text_padding_right; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_edit_text_inset_bottom_material = global::EFGetStarted.Droid.Resource.Dimension.abc_edit_text_inset_bottom_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_edit_text_inset_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.abc_edit_text_inset_horizontal_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_edit_text_inset_top_material = global::EFGetStarted.Droid.Resource.Dimension.abc_edit_text_inset_top_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_floating_window_z = global::EFGetStarted.Droid.Resource.Dimension.abc_floating_window_z; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_list_item_padding_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.abc_list_item_padding_horizontal_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_panel_menu_list_width = global::EFGetStarted.Droid.Resource.Dimension.abc_panel_menu_list_width; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_progress_bar_height_material = global::EFGetStarted.Droid.Resource.Dimension.abc_progress_bar_height_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_search_view_preferred_height = global::EFGetStarted.Droid.Resource.Dimension.abc_search_view_preferred_height; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_search_view_preferred_width = global::EFGetStarted.Droid.Resource.Dimension.abc_search_view_preferred_width; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_seekbar_track_background_height_material = global::EFGetStarted.Droid.Resource.Dimension.abc_seekbar_track_background_height_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_seekbar_track_progress_height_material = global::EFGetStarted.Droid.Resource.Dimension.abc_seekbar_track_progress_height_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_select_dialog_padding_start_material = global::EFGetStarted.Droid.Resource.Dimension.abc_select_dialog_padding_start_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_switch_padding = global::EFGetStarted.Droid.Resource.Dimension.abc_switch_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_body_1_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_body_1_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_body_2_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_body_2_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_button_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_button_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_caption_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_caption_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_display_1_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_display_1_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_display_2_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_display_2_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_display_3_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_display_3_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_display_4_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_display_4_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_headline_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_headline_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_large_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_large_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_medium_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_medium_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_menu_header_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_menu_header_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_menu_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_menu_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_small_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_small_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_subhead_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_subhead_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_subtitle_material_toolbar = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_subtitle_material_toolbar; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_title_material = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_title_material; - global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_title_material_toolbar = global::EFGetStarted.Droid.Resource.Dimension.abc_text_size_title_material_toolbar; - global::Xamarin.Forms.Platform.Resource.Dimension.cardview_compat_inset_shadow = global::EFGetStarted.Droid.Resource.Dimension.cardview_compat_inset_shadow; - global::Xamarin.Forms.Platform.Resource.Dimension.cardview_default_elevation = global::EFGetStarted.Droid.Resource.Dimension.cardview_default_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.cardview_default_radius = global::EFGetStarted.Droid.Resource.Dimension.cardview_default_radius; - global::Xamarin.Forms.Platform.Resource.Dimension.compat_button_inset_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_inset_horizontal_material; - global::Xamarin.Forms.Platform.Resource.Dimension.compat_button_inset_vertical_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_inset_vertical_material; - global::Xamarin.Forms.Platform.Resource.Dimension.compat_button_padding_horizontal_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_padding_horizontal_material; - global::Xamarin.Forms.Platform.Resource.Dimension.compat_button_padding_vertical_material = global::EFGetStarted.Droid.Resource.Dimension.compat_button_padding_vertical_material; - global::Xamarin.Forms.Platform.Resource.Dimension.compat_control_corner_material = global::EFGetStarted.Droid.Resource.Dimension.compat_control_corner_material; - global::Xamarin.Forms.Platform.Resource.Dimension.compat_notification_large_icon_max_height = global::EFGetStarted.Droid.Resource.Dimension.compat_notification_large_icon_max_height; - global::Xamarin.Forms.Platform.Resource.Dimension.compat_notification_large_icon_max_width = global::EFGetStarted.Droid.Resource.Dimension.compat_notification_large_icon_max_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_appbar_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_appbar_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_active_item_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_active_item_max_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_active_item_min_width = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_active_item_min_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_active_text_size = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_active_text_size; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_height = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_height; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_icon_size = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_icon_size; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_item_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_item_max_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_item_min_width = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_item_min_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_margin = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_margin; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_shadow_height = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_shadow_height; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_text_size = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_navigation_text_size; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_sheet_modal_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_sheet_modal_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_sheet_peek_height_min = global::EFGetStarted.Droid.Resource.Dimension.design_bottom_sheet_peek_height_min; - global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_border_width = global::EFGetStarted.Droid.Resource.Dimension.design_fab_border_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_fab_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_image_size = global::EFGetStarted.Droid.Resource.Dimension.design_fab_image_size; - global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_size_mini = global::EFGetStarted.Droid.Resource.Dimension.design_fab_size_mini; - global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_size_normal = global::EFGetStarted.Droid.Resource.Dimension.design_fab_size_normal; - global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_translation_z_hovered_focused = global::EFGetStarted.Droid.Resource.Dimension.design_fab_translation_z_hovered_focused; - global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_translation_z_pressed = global::EFGetStarted.Droid.Resource.Dimension.design_fab_translation_z_pressed; - global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_icon_padding = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_icon_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_icon_size = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_icon_size; - global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_item_horizontal_padding = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_item_horizontal_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_item_icon_padding = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_item_icon_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_max_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_padding_bottom = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_padding_bottom; - global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_separator_vertical_padding = global::EFGetStarted.Droid.Resource.Dimension.design_navigation_separator_vertical_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_action_inline_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_action_inline_max_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_background_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_background_corner_radius; - global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_elevation = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_extra_spacing_horizontal = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_extra_spacing_horizontal; - global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_max_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_min_width = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_min_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_padding_horizontal = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_padding_horizontal; - global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_padding_vertical = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_padding_vertical; - global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_padding_vertical_2lines = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_padding_vertical_2lines; - global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_text_size = global::EFGetStarted.Droid.Resource.Dimension.design_snackbar_text_size; - global::Xamarin.Forms.Platform.Resource.Dimension.design_tab_max_width = global::EFGetStarted.Droid.Resource.Dimension.design_tab_max_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_tab_scrollable_min_width = global::EFGetStarted.Droid.Resource.Dimension.design_tab_scrollable_min_width; - global::Xamarin.Forms.Platform.Resource.Dimension.design_tab_text_size = global::EFGetStarted.Droid.Resource.Dimension.design_tab_text_size; - global::Xamarin.Forms.Platform.Resource.Dimension.design_tab_text_size_2line = global::EFGetStarted.Droid.Resource.Dimension.design_tab_text_size_2line; - global::Xamarin.Forms.Platform.Resource.Dimension.design_textinput_caption_translate_y = global::EFGetStarted.Droid.Resource.Dimension.design_textinput_caption_translate_y; - global::Xamarin.Forms.Platform.Resource.Dimension.disabled_alpha_material_dark = global::EFGetStarted.Droid.Resource.Dimension.disabled_alpha_material_dark; - global::Xamarin.Forms.Platform.Resource.Dimension.disabled_alpha_material_light = global::EFGetStarted.Droid.Resource.Dimension.disabled_alpha_material_light; - global::Xamarin.Forms.Platform.Resource.Dimension.fastscroll_default_thickness = global::EFGetStarted.Droid.Resource.Dimension.fastscroll_default_thickness; - global::Xamarin.Forms.Platform.Resource.Dimension.fastscroll_margin = global::EFGetStarted.Droid.Resource.Dimension.fastscroll_margin; - global::Xamarin.Forms.Platform.Resource.Dimension.fastscroll_minimum_range = global::EFGetStarted.Droid.Resource.Dimension.fastscroll_minimum_range; - global::Xamarin.Forms.Platform.Resource.Dimension.highlight_alpha_material_colored = global::EFGetStarted.Droid.Resource.Dimension.highlight_alpha_material_colored; - global::Xamarin.Forms.Platform.Resource.Dimension.highlight_alpha_material_dark = global::EFGetStarted.Droid.Resource.Dimension.highlight_alpha_material_dark; - global::Xamarin.Forms.Platform.Resource.Dimension.highlight_alpha_material_light = global::EFGetStarted.Droid.Resource.Dimension.highlight_alpha_material_light; - global::Xamarin.Forms.Platform.Resource.Dimension.hint_alpha_material_dark = global::EFGetStarted.Droid.Resource.Dimension.hint_alpha_material_dark; - global::Xamarin.Forms.Platform.Resource.Dimension.hint_alpha_material_light = global::EFGetStarted.Droid.Resource.Dimension.hint_alpha_material_light; - global::Xamarin.Forms.Platform.Resource.Dimension.hint_pressed_alpha_material_dark = global::EFGetStarted.Droid.Resource.Dimension.hint_pressed_alpha_material_dark; - global::Xamarin.Forms.Platform.Resource.Dimension.hint_pressed_alpha_material_light = global::EFGetStarted.Droid.Resource.Dimension.hint_pressed_alpha_material_light; - global::Xamarin.Forms.Platform.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame = global::EFGetStarted.Droid.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame; - global::Xamarin.Forms.Platform.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity = global::EFGetStarted.Droid.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity; - global::Xamarin.Forms.Platform.Resource.Dimension.item_touch_helper_swipe_escape_velocity = global::EFGetStarted.Droid.Resource.Dimension.item_touch_helper_swipe_escape_velocity; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode = global::EFGetStarted.Droid.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin = global::EFGetStarted.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset = global::EFGetStarted.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_bottomappbar_height = global::EFGetStarted.Droid.Resource.Dimension.mtrl_bottomappbar_height; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_corner_radius; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_dialog_btn_min_width = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_dialog_btn_min_width; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_disabled_elevation = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_disabled_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_disabled_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_disabled_z; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_elevation = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_focused_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_focused_z; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_hovered_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_hovered_z; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_icon_btn_padding_left = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_icon_btn_padding_left; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_icon_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_icon_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_inset = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_inset; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_letter_spacing = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_letter_spacing; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_padding_bottom = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_padding_bottom; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_padding_left = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_padding_left; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_padding_right = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_padding_right; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_padding_top = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_padding_top; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_pressed_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_pressed_z; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_stroke_size = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_stroke_size; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_text_btn_icon_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_text_btn_icon_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_text_btn_padding_left = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_left; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_text_btn_padding_right = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_right; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_text_size = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_text_size; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_btn_z; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_card_elevation = global::EFGetStarted.Droid.Resource.Dimension.mtrl_card_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_card_spacing = global::EFGetStarted.Droid.Resource.Dimension.mtrl_card_spacing; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_chip_pressed_translation_z = global::EFGetStarted.Droid.Resource.Dimension.mtrl_chip_pressed_translation_z; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_chip_text_size = global::EFGetStarted.Droid.Resource.Dimension.mtrl_chip_text_size; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_fab_elevation = global::EFGetStarted.Droid.Resource.Dimension.mtrl_fab_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_fab_translation_z_hovered_focused = global::EFGetStarted.Droid.Resource.Dimension.mtrl_fab_translation_z_hovered_focused; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_fab_translation_z_pressed = global::EFGetStarted.Droid.Resource.Dimension.mtrl_fab_translation_z_pressed; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_navigation_elevation = global::EFGetStarted.Droid.Resource.Dimension.mtrl_navigation_elevation; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_navigation_item_horizontal_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_navigation_item_horizontal_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_navigation_item_icon_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_navigation_item_icon_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_snackbar_background_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.mtrl_snackbar_background_corner_radius; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_snackbar_margin = global::EFGetStarted.Droid.Resource.Dimension.mtrl_snackbar_margin; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_bottom_offset = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_bottom_offset; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_corner_radius_medium = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_medium; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_corner_radius_small = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_small; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_label_cutout_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_label_cutout_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_padding_end = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_padding_end; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_stroke_width_default = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_default; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_stroke_width_focused = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_focused; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding = global::EFGetStarted.Droid.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_toolbar_default_height = global::EFGetStarted.Droid.Resource.Dimension.mtrl_toolbar_default_height; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_action_icon_size = global::EFGetStarted.Droid.Resource.Dimension.notification_action_icon_size; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_action_text_size = global::EFGetStarted.Droid.Resource.Dimension.notification_action_text_size; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_big_circle_margin = global::EFGetStarted.Droid.Resource.Dimension.notification_big_circle_margin; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_content_margin_start = global::EFGetStarted.Droid.Resource.Dimension.notification_content_margin_start; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_large_icon_height = global::EFGetStarted.Droid.Resource.Dimension.notification_large_icon_height; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_large_icon_width = global::EFGetStarted.Droid.Resource.Dimension.notification_large_icon_width; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_main_column_padding_top = global::EFGetStarted.Droid.Resource.Dimension.notification_main_column_padding_top; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_media_narrow_margin = global::EFGetStarted.Droid.Resource.Dimension.notification_media_narrow_margin; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_right_icon_size = global::EFGetStarted.Droid.Resource.Dimension.notification_right_icon_size; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_right_side_padding_top = global::EFGetStarted.Droid.Resource.Dimension.notification_right_side_padding_top; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_small_icon_background_padding = global::EFGetStarted.Droid.Resource.Dimension.notification_small_icon_background_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_small_icon_size_as_large = global::EFGetStarted.Droid.Resource.Dimension.notification_small_icon_size_as_large; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_subtext_size = global::EFGetStarted.Droid.Resource.Dimension.notification_subtext_size; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_top_pad = global::EFGetStarted.Droid.Resource.Dimension.notification_top_pad; - global::Xamarin.Forms.Platform.Resource.Dimension.notification_top_pad_large_text = global::EFGetStarted.Droid.Resource.Dimension.notification_top_pad_large_text; - global::Xamarin.Forms.Platform.Resource.Dimension.subtitle_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.subtitle_corner_radius; - global::Xamarin.Forms.Platform.Resource.Dimension.subtitle_outline_width = global::EFGetStarted.Droid.Resource.Dimension.subtitle_outline_width; - global::Xamarin.Forms.Platform.Resource.Dimension.subtitle_shadow_offset = global::EFGetStarted.Droid.Resource.Dimension.subtitle_shadow_offset; - global::Xamarin.Forms.Platform.Resource.Dimension.subtitle_shadow_radius = global::EFGetStarted.Droid.Resource.Dimension.subtitle_shadow_radius; - global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_corner_radius = global::EFGetStarted.Droid.Resource.Dimension.tooltip_corner_radius; - global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_horizontal_padding = global::EFGetStarted.Droid.Resource.Dimension.tooltip_horizontal_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_margin = global::EFGetStarted.Droid.Resource.Dimension.tooltip_margin; - global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_precise_anchor_extra_offset = global::EFGetStarted.Droid.Resource.Dimension.tooltip_precise_anchor_extra_offset; - global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_precise_anchor_threshold = global::EFGetStarted.Droid.Resource.Dimension.tooltip_precise_anchor_threshold; - global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_vertical_padding = global::EFGetStarted.Droid.Resource.Dimension.tooltip_vertical_padding; - global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_y_offset_non_touch = global::EFGetStarted.Droid.Resource.Dimension.tooltip_y_offset_non_touch; - global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_y_offset_touch = global::EFGetStarted.Droid.Resource.Dimension.tooltip_y_offset_touch; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ab_share_pack_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ab_share_pack_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_action_bar_item_background_material = global::EFGetStarted.Droid.Resource.Drawable.abc_action_bar_item_background_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_borderless_material = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_borderless_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_check_material = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_check_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_check_to_on_mtrl_000 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_000; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_check_to_on_mtrl_015 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_015; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_colored_material = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_colored_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_default_mtrl_shape = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_default_mtrl_shape; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_radio_material = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_radio_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_radio_to_on_mtrl_000 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_000; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_radio_to_on_mtrl_015 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_015; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012 = global::EFGetStarted.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_cab_background_internal_bg = global::EFGetStarted.Droid.Resource.Drawable.abc_cab_background_internal_bg; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_cab_background_top_material = global::EFGetStarted.Droid.Resource.Drawable.abc_cab_background_top_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_cab_background_top_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_cab_background_top_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_control_background_material = global::EFGetStarted.Droid.Resource.Drawable.abc_control_background_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_dialog_material_background = global::EFGetStarted.Droid.Resource.Drawable.abc_dialog_material_background; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_edit_text_material = global::EFGetStarted.Droid.Resource.Drawable.abc_edit_text_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_ab_back_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_ab_back_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_clear_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_clear_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_go_search_api_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_go_search_api_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_overflow_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_overflow_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_share_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_menu_share_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_search_api_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_search_api_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_black_16dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_black_16dp; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_black_36dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_black_36dp; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_black_48dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_black_48dp; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_half_black_16dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_half_black_16dp; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_half_black_36dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_half_black_36dp; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_half_black_48dp = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_star_half_black_48dp; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_voice_search_api_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ic_voice_search_api_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_item_background_holo_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_item_background_holo_dark; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_item_background_holo_light = global::EFGetStarted.Droid.Resource.Drawable.abc_item_background_holo_light; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_divider_material = global::EFGetStarted.Droid.Resource.Drawable.abc_list_divider_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_divider_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_list_divider_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_focused_holo = global::EFGetStarted.Droid.Resource.Drawable.abc_list_focused_holo; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_longpressed_holo = global::EFGetStarted.Droid.Resource.Drawable.abc_list_longpressed_holo; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_pressed_holo_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_list_pressed_holo_dark; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_pressed_holo_light = global::EFGetStarted.Droid.Resource.Drawable.abc_list_pressed_holo_light; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_background_transition_holo_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_dark; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_background_transition_holo_light = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_light; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_disabled_holo_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_disabled_holo_dark; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_disabled_holo_light = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_disabled_holo_light; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_holo_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_holo_dark; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_holo_light = global::EFGetStarted.Droid.Resource.Drawable.abc_list_selector_holo_light; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult = global::EFGetStarted.Droid.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_popup_background_mtrl_mult = global::EFGetStarted.Droid.Resource.Drawable.abc_popup_background_mtrl_mult; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ratingbar_indicator_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ratingbar_indicator_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ratingbar_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ratingbar_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_ratingbar_small_material = global::EFGetStarted.Droid.Resource.Drawable.abc_ratingbar_small_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000 = global::EFGetStarted.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005 = global::EFGetStarted.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_scrubber_primary_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_scrubber_primary_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_scrubber_track_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_scrubber_track_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_seekbar_thumb_material = global::EFGetStarted.Droid.Resource.Drawable.abc_seekbar_thumb_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_seekbar_tick_mark_material = global::EFGetStarted.Droid.Resource.Drawable.abc_seekbar_tick_mark_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_seekbar_track_material = global::EFGetStarted.Droid.Resource.Drawable.abc_seekbar_track_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_spinner_mtrl_am_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_spinner_mtrl_am_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_spinner_textfield_background_material = global::EFGetStarted.Droid.Resource.Drawable.abc_spinner_textfield_background_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_switch_thumb_material = global::EFGetStarted.Droid.Resource.Drawable.abc_switch_thumb_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_switch_track_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_switch_track_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_tab_indicator_material = global::EFGetStarted.Droid.Resource.Drawable.abc_tab_indicator_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_tab_indicator_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_tab_indicator_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_textfield_activated_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_textfield_activated_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_textfield_default_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_textfield_default_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_textfield_search_default_mtrl_alpha = global::EFGetStarted.Droid.Resource.Drawable.abc_textfield_search_default_mtrl_alpha; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_textfield_search_material = global::EFGetStarted.Droid.Resource.Drawable.abc_textfield_search_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_cursor_material = global::EFGetStarted.Droid.Resource.Drawable.abc_text_cursor_material; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_left_mtrl_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_dark; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_left_mtrl_light = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_light; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_middle_mtrl_light = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_light; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_right_mtrl_dark = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_dark; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_right_mtrl_light = global::EFGetStarted.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_light; - global::Xamarin.Forms.Platform.Resource.Drawable.abc_vector_test = global::EFGetStarted.Droid.Resource.Drawable.abc_vector_test; - global::Xamarin.Forms.Platform.Resource.Drawable.avd_hide_password = global::EFGetStarted.Droid.Resource.Drawable.avd_hide_password; - global::Xamarin.Forms.Platform.Resource.Drawable.avd_show_password = global::EFGetStarted.Droid.Resource.Drawable.avd_show_password; - global::Xamarin.Forms.Platform.Resource.Drawable.design_bottom_navigation_item_background = global::EFGetStarted.Droid.Resource.Drawable.design_bottom_navigation_item_background; - global::Xamarin.Forms.Platform.Resource.Drawable.design_fab_background = global::EFGetStarted.Droid.Resource.Drawable.design_fab_background; - global::Xamarin.Forms.Platform.Resource.Drawable.design_ic_visibility = global::EFGetStarted.Droid.Resource.Drawable.design_ic_visibility; - global::Xamarin.Forms.Platform.Resource.Drawable.design_ic_visibility_off = global::EFGetStarted.Droid.Resource.Drawable.design_ic_visibility_off; - global::Xamarin.Forms.Platform.Resource.Drawable.design_password_eye = global::EFGetStarted.Droid.Resource.Drawable.design_password_eye; - global::Xamarin.Forms.Platform.Resource.Drawable.design_snackbar_background = global::EFGetStarted.Droid.Resource.Drawable.design_snackbar_background; - global::Xamarin.Forms.Platform.Resource.Drawable.ic_mtrl_chip_checked_black = global::EFGetStarted.Droid.Resource.Drawable.ic_mtrl_chip_checked_black; - global::Xamarin.Forms.Platform.Resource.Drawable.ic_mtrl_chip_checked_circle = global::EFGetStarted.Droid.Resource.Drawable.ic_mtrl_chip_checked_circle; - global::Xamarin.Forms.Platform.Resource.Drawable.ic_mtrl_chip_close_circle = global::EFGetStarted.Droid.Resource.Drawable.ic_mtrl_chip_close_circle; - global::Xamarin.Forms.Platform.Resource.Drawable.mtrl_snackbar_background = global::EFGetStarted.Droid.Resource.Drawable.mtrl_snackbar_background; - global::Xamarin.Forms.Platform.Resource.Drawable.mtrl_tabs_default_indicator = global::EFGetStarted.Droid.Resource.Drawable.mtrl_tabs_default_indicator; - global::Xamarin.Forms.Platform.Resource.Drawable.navigation_empty_icon = global::EFGetStarted.Droid.Resource.Drawable.navigation_empty_icon; - global::Xamarin.Forms.Platform.Resource.Drawable.notification_action_background = global::EFGetStarted.Droid.Resource.Drawable.notification_action_background; - global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_bg; - global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg_low = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_low; - global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg_low_normal = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_low_normal; - global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg_low_pressed = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_low_pressed; - global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg_normal = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_normal; - global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg_normal_pressed = global::EFGetStarted.Droid.Resource.Drawable.notification_bg_normal_pressed; - global::Xamarin.Forms.Platform.Resource.Drawable.notification_icon_background = global::EFGetStarted.Droid.Resource.Drawable.notification_icon_background; - global::Xamarin.Forms.Platform.Resource.Drawable.notification_template_icon_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_template_icon_bg; - global::Xamarin.Forms.Platform.Resource.Drawable.notification_template_icon_low_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_template_icon_low_bg; - global::Xamarin.Forms.Platform.Resource.Drawable.notification_tile_bg = global::EFGetStarted.Droid.Resource.Drawable.notification_tile_bg; - global::Xamarin.Forms.Platform.Resource.Drawable.notify_panel_notification_icon_bg = global::EFGetStarted.Droid.Resource.Drawable.notify_panel_notification_icon_bg; - global::Xamarin.Forms.Platform.Resource.Drawable.tooltip_frame_dark = global::EFGetStarted.Droid.Resource.Drawable.tooltip_frame_dark; - global::Xamarin.Forms.Platform.Resource.Drawable.tooltip_frame_light = global::EFGetStarted.Droid.Resource.Drawable.tooltip_frame_light; - global::Xamarin.Forms.Platform.Resource.Id.action0 = global::EFGetStarted.Droid.Resource.Id.action0; - global::Xamarin.Forms.Platform.Resource.Id.actions = global::EFGetStarted.Droid.Resource.Id.actions; - global::Xamarin.Forms.Platform.Resource.Id.action_bar = global::EFGetStarted.Droid.Resource.Id.action_bar; - global::Xamarin.Forms.Platform.Resource.Id.action_bar_activity_content = global::EFGetStarted.Droid.Resource.Id.action_bar_activity_content; - global::Xamarin.Forms.Platform.Resource.Id.action_bar_container = global::EFGetStarted.Droid.Resource.Id.action_bar_container; - global::Xamarin.Forms.Platform.Resource.Id.action_bar_root = global::EFGetStarted.Droid.Resource.Id.action_bar_root; - global::Xamarin.Forms.Platform.Resource.Id.action_bar_spinner = global::EFGetStarted.Droid.Resource.Id.action_bar_spinner; - global::Xamarin.Forms.Platform.Resource.Id.action_bar_subtitle = global::EFGetStarted.Droid.Resource.Id.action_bar_subtitle; - global::Xamarin.Forms.Platform.Resource.Id.action_bar_title = global::EFGetStarted.Droid.Resource.Id.action_bar_title; - global::Xamarin.Forms.Platform.Resource.Id.action_container = global::EFGetStarted.Droid.Resource.Id.action_container; - global::Xamarin.Forms.Platform.Resource.Id.action_context_bar = global::EFGetStarted.Droid.Resource.Id.action_context_bar; - global::Xamarin.Forms.Platform.Resource.Id.action_divider = global::EFGetStarted.Droid.Resource.Id.action_divider; - global::Xamarin.Forms.Platform.Resource.Id.action_image = global::EFGetStarted.Droid.Resource.Id.action_image; - global::Xamarin.Forms.Platform.Resource.Id.action_menu_divider = global::EFGetStarted.Droid.Resource.Id.action_menu_divider; - global::Xamarin.Forms.Platform.Resource.Id.action_menu_presenter = global::EFGetStarted.Droid.Resource.Id.action_menu_presenter; - global::Xamarin.Forms.Platform.Resource.Id.action_mode_bar = global::EFGetStarted.Droid.Resource.Id.action_mode_bar; - global::Xamarin.Forms.Platform.Resource.Id.action_mode_bar_stub = global::EFGetStarted.Droid.Resource.Id.action_mode_bar_stub; - global::Xamarin.Forms.Platform.Resource.Id.action_mode_close_button = global::EFGetStarted.Droid.Resource.Id.action_mode_close_button; - global::Xamarin.Forms.Platform.Resource.Id.action_text = global::EFGetStarted.Droid.Resource.Id.action_text; - global::Xamarin.Forms.Platform.Resource.Id.activity_chooser_view_content = global::EFGetStarted.Droid.Resource.Id.activity_chooser_view_content; - global::Xamarin.Forms.Platform.Resource.Id.add = global::EFGetStarted.Droid.Resource.Id.add; - global::Xamarin.Forms.Platform.Resource.Id.alertTitle = global::EFGetStarted.Droid.Resource.Id.alertTitle; - global::Xamarin.Forms.Platform.Resource.Id.all = global::EFGetStarted.Droid.Resource.Id.all; - global::Xamarin.Forms.Platform.Resource.Id.ALT = global::EFGetStarted.Droid.Resource.Id.ALT; - global::Xamarin.Forms.Platform.Resource.Id.always = global::EFGetStarted.Droid.Resource.Id.always; - global::Xamarin.Forms.Platform.Resource.Id.async = global::EFGetStarted.Droid.Resource.Id.async; - global::Xamarin.Forms.Platform.Resource.Id.auto = global::EFGetStarted.Droid.Resource.Id.auto; - global::Xamarin.Forms.Platform.Resource.Id.beginning = global::EFGetStarted.Droid.Resource.Id.beginning; - global::Xamarin.Forms.Platform.Resource.Id.blocking = global::EFGetStarted.Droid.Resource.Id.blocking; - global::Xamarin.Forms.Platform.Resource.Id.bottom = global::EFGetStarted.Droid.Resource.Id.bottom; - global::Xamarin.Forms.Platform.Resource.Id.bottomtab_navarea = global::EFGetStarted.Droid.Resource.Id.bottomtab_navarea; - global::Xamarin.Forms.Platform.Resource.Id.bottomtab_tabbar = global::EFGetStarted.Droid.Resource.Id.bottomtab_tabbar; - global::Xamarin.Forms.Platform.Resource.Id.buttonPanel = global::EFGetStarted.Droid.Resource.Id.buttonPanel; - global::Xamarin.Forms.Platform.Resource.Id.cancel_action = global::EFGetStarted.Droid.Resource.Id.cancel_action; - global::Xamarin.Forms.Platform.Resource.Id.center = global::EFGetStarted.Droid.Resource.Id.center; - global::Xamarin.Forms.Platform.Resource.Id.center_horizontal = global::EFGetStarted.Droid.Resource.Id.center_horizontal; - global::Xamarin.Forms.Platform.Resource.Id.center_vertical = global::EFGetStarted.Droid.Resource.Id.center_vertical; - global::Xamarin.Forms.Platform.Resource.Id.checkbox = global::EFGetStarted.Droid.Resource.Id.checkbox; - global::Xamarin.Forms.Platform.Resource.Id.chronometer = global::EFGetStarted.Droid.Resource.Id.chronometer; - global::Xamarin.Forms.Platform.Resource.Id.clip_horizontal = global::EFGetStarted.Droid.Resource.Id.clip_horizontal; - global::Xamarin.Forms.Platform.Resource.Id.clip_vertical = global::EFGetStarted.Droid.Resource.Id.clip_vertical; - global::Xamarin.Forms.Platform.Resource.Id.collapseActionView = global::EFGetStarted.Droid.Resource.Id.collapseActionView; - global::Xamarin.Forms.Platform.Resource.Id.container = global::EFGetStarted.Droid.Resource.Id.container; - global::Xamarin.Forms.Platform.Resource.Id.content = global::EFGetStarted.Droid.Resource.Id.content; - global::Xamarin.Forms.Platform.Resource.Id.contentPanel = global::EFGetStarted.Droid.Resource.Id.contentPanel; - global::Xamarin.Forms.Platform.Resource.Id.coordinator = global::EFGetStarted.Droid.Resource.Id.coordinator; - global::Xamarin.Forms.Platform.Resource.Id.CTRL = global::EFGetStarted.Droid.Resource.Id.CTRL; - global::Xamarin.Forms.Platform.Resource.Id.custom = global::EFGetStarted.Droid.Resource.Id.custom; - global::Xamarin.Forms.Platform.Resource.Id.customPanel = global::EFGetStarted.Droid.Resource.Id.customPanel; - global::Xamarin.Forms.Platform.Resource.Id.decor_content_parent = global::EFGetStarted.Droid.Resource.Id.decor_content_parent; - global::Xamarin.Forms.Platform.Resource.Id.default_activity_button = global::EFGetStarted.Droid.Resource.Id.default_activity_button; - global::Xamarin.Forms.Platform.Resource.Id.design_bottom_sheet = global::EFGetStarted.Droid.Resource.Id.design_bottom_sheet; - global::Xamarin.Forms.Platform.Resource.Id.design_menu_item_action_area = global::EFGetStarted.Droid.Resource.Id.design_menu_item_action_area; - global::Xamarin.Forms.Platform.Resource.Id.design_menu_item_action_area_stub = global::EFGetStarted.Droid.Resource.Id.design_menu_item_action_area_stub; - global::Xamarin.Forms.Platform.Resource.Id.design_menu_item_text = global::EFGetStarted.Droid.Resource.Id.design_menu_item_text; - global::Xamarin.Forms.Platform.Resource.Id.design_navigation_view = global::EFGetStarted.Droid.Resource.Id.design_navigation_view; - global::Xamarin.Forms.Platform.Resource.Id.disableHome = global::EFGetStarted.Droid.Resource.Id.disableHome; - global::Xamarin.Forms.Platform.Resource.Id.edit_query = global::EFGetStarted.Droid.Resource.Id.edit_query; - global::Xamarin.Forms.Platform.Resource.Id.end = global::EFGetStarted.Droid.Resource.Id.end; - global::Xamarin.Forms.Platform.Resource.Id.end_padder = global::EFGetStarted.Droid.Resource.Id.end_padder; - global::Xamarin.Forms.Platform.Resource.Id.enterAlways = global::EFGetStarted.Droid.Resource.Id.enterAlways; - global::Xamarin.Forms.Platform.Resource.Id.enterAlwaysCollapsed = global::EFGetStarted.Droid.Resource.Id.enterAlwaysCollapsed; - global::Xamarin.Forms.Platform.Resource.Id.exitUntilCollapsed = global::EFGetStarted.Droid.Resource.Id.exitUntilCollapsed; - global::Xamarin.Forms.Platform.Resource.Id.expanded_menu = global::EFGetStarted.Droid.Resource.Id.expanded_menu; - global::Xamarin.Forms.Platform.Resource.Id.expand_activities_button = global::EFGetStarted.Droid.Resource.Id.expand_activities_button; - global::Xamarin.Forms.Platform.Resource.Id.fill = global::EFGetStarted.Droid.Resource.Id.fill; - global::Xamarin.Forms.Platform.Resource.Id.filled = global::EFGetStarted.Droid.Resource.Id.filled; - global::Xamarin.Forms.Platform.Resource.Id.fill_horizontal = global::EFGetStarted.Droid.Resource.Id.fill_horizontal; - global::Xamarin.Forms.Platform.Resource.Id.fill_vertical = global::EFGetStarted.Droid.Resource.Id.fill_vertical; - global::Xamarin.Forms.Platform.Resource.Id.@fixed = global::EFGetStarted.Droid.Resource.Id.@fixed; - global::Xamarin.Forms.Platform.Resource.Id.flyoutcontent_appbar = global::EFGetStarted.Droid.Resource.Id.flyoutcontent_appbar; - global::Xamarin.Forms.Platform.Resource.Id.flyoutcontent_recycler = global::EFGetStarted.Droid.Resource.Id.flyoutcontent_recycler; - global::Xamarin.Forms.Platform.Resource.Id.forever = global::EFGetStarted.Droid.Resource.Id.forever; - global::Xamarin.Forms.Platform.Resource.Id.FUNCTION = global::EFGetStarted.Droid.Resource.Id.FUNCTION; - global::Xamarin.Forms.Platform.Resource.Id.ghost_view = global::EFGetStarted.Droid.Resource.Id.ghost_view; - global::Xamarin.Forms.Platform.Resource.Id.group_divider = global::EFGetStarted.Droid.Resource.Id.group_divider; - global::Xamarin.Forms.Platform.Resource.Id.home = global::EFGetStarted.Droid.Resource.Id.home; - global::Xamarin.Forms.Platform.Resource.Id.homeAsUp = global::EFGetStarted.Droid.Resource.Id.homeAsUp; - global::Xamarin.Forms.Platform.Resource.Id.icon = global::EFGetStarted.Droid.Resource.Id.icon; - global::Xamarin.Forms.Platform.Resource.Id.icon_group = global::EFGetStarted.Droid.Resource.Id.icon_group; - global::Xamarin.Forms.Platform.Resource.Id.ifRoom = global::EFGetStarted.Droid.Resource.Id.ifRoom; - global::Xamarin.Forms.Platform.Resource.Id.image = global::EFGetStarted.Droid.Resource.Id.image; - global::Xamarin.Forms.Platform.Resource.Id.info = global::EFGetStarted.Droid.Resource.Id.info; - global::Xamarin.Forms.Platform.Resource.Id.italic = global::EFGetStarted.Droid.Resource.Id.italic; - global::Xamarin.Forms.Platform.Resource.Id.item_touch_helper_previous_elevation = global::EFGetStarted.Droid.Resource.Id.item_touch_helper_previous_elevation; - global::Xamarin.Forms.Platform.Resource.Id.labeled = global::EFGetStarted.Droid.Resource.Id.labeled; - global::Xamarin.Forms.Platform.Resource.Id.largeLabel = global::EFGetStarted.Droid.Resource.Id.largeLabel; - global::Xamarin.Forms.Platform.Resource.Id.left = global::EFGetStarted.Droid.Resource.Id.left; - global::Xamarin.Forms.Platform.Resource.Id.line1 = global::EFGetStarted.Droid.Resource.Id.line1; - global::Xamarin.Forms.Platform.Resource.Id.line3 = global::EFGetStarted.Droid.Resource.Id.line3; - global::Xamarin.Forms.Platform.Resource.Id.listMode = global::EFGetStarted.Droid.Resource.Id.listMode; - global::Xamarin.Forms.Platform.Resource.Id.list_item = global::EFGetStarted.Droid.Resource.Id.list_item; - global::Xamarin.Forms.Platform.Resource.Id.main_appbar = global::EFGetStarted.Droid.Resource.Id.main_appbar; - global::Xamarin.Forms.Platform.Resource.Id.main_tablayout = global::EFGetStarted.Droid.Resource.Id.main_tablayout; - global::Xamarin.Forms.Platform.Resource.Id.main_toolbar = global::EFGetStarted.Droid.Resource.Id.main_toolbar; - global::Xamarin.Forms.Platform.Resource.Id.main_viewpager = global::EFGetStarted.Droid.Resource.Id.main_viewpager; - global::Xamarin.Forms.Platform.Resource.Id.masked = global::EFGetStarted.Droid.Resource.Id.masked; - global::Xamarin.Forms.Platform.Resource.Id.media_actions = global::EFGetStarted.Droid.Resource.Id.media_actions; - global::Xamarin.Forms.Platform.Resource.Id.message = global::EFGetStarted.Droid.Resource.Id.message; - global::Xamarin.Forms.Platform.Resource.Id.META = global::EFGetStarted.Droid.Resource.Id.META; - global::Xamarin.Forms.Platform.Resource.Id.middle = global::EFGetStarted.Droid.Resource.Id.middle; - global::Xamarin.Forms.Platform.Resource.Id.mini = global::EFGetStarted.Droid.Resource.Id.mini; - global::Xamarin.Forms.Platform.Resource.Id.mtrl_child_content_container = global::EFGetStarted.Droid.Resource.Id.mtrl_child_content_container; - global::Xamarin.Forms.Platform.Resource.Id.mtrl_internal_children_alpha_tag = global::EFGetStarted.Droid.Resource.Id.mtrl_internal_children_alpha_tag; - global::Xamarin.Forms.Platform.Resource.Id.multiply = global::EFGetStarted.Droid.Resource.Id.multiply; - global::Xamarin.Forms.Platform.Resource.Id.navigation_header_container = global::EFGetStarted.Droid.Resource.Id.navigation_header_container; - global::Xamarin.Forms.Platform.Resource.Id.never = global::EFGetStarted.Droid.Resource.Id.never; - global::Xamarin.Forms.Platform.Resource.Id.none = global::EFGetStarted.Droid.Resource.Id.none; - global::Xamarin.Forms.Platform.Resource.Id.normal = global::EFGetStarted.Droid.Resource.Id.normal; - global::Xamarin.Forms.Platform.Resource.Id.notification_background = global::EFGetStarted.Droid.Resource.Id.notification_background; - global::Xamarin.Forms.Platform.Resource.Id.notification_main_column = global::EFGetStarted.Droid.Resource.Id.notification_main_column; - global::Xamarin.Forms.Platform.Resource.Id.notification_main_column_container = global::EFGetStarted.Droid.Resource.Id.notification_main_column_container; - global::Xamarin.Forms.Platform.Resource.Id.outline = global::EFGetStarted.Droid.Resource.Id.outline; - global::Xamarin.Forms.Platform.Resource.Id.parallax = global::EFGetStarted.Droid.Resource.Id.parallax; - global::Xamarin.Forms.Platform.Resource.Id.parentPanel = global::EFGetStarted.Droid.Resource.Id.parentPanel; - global::Xamarin.Forms.Platform.Resource.Id.parent_matrix = global::EFGetStarted.Droid.Resource.Id.parent_matrix; - global::Xamarin.Forms.Platform.Resource.Id.pin = global::EFGetStarted.Droid.Resource.Id.pin; - global::Xamarin.Forms.Platform.Resource.Id.progress_circular = global::EFGetStarted.Droid.Resource.Id.progress_circular; - global::Xamarin.Forms.Platform.Resource.Id.progress_horizontal = global::EFGetStarted.Droid.Resource.Id.progress_horizontal; - global::Xamarin.Forms.Platform.Resource.Id.radio = global::EFGetStarted.Droid.Resource.Id.radio; - global::Xamarin.Forms.Platform.Resource.Id.right = global::EFGetStarted.Droid.Resource.Id.right; - global::Xamarin.Forms.Platform.Resource.Id.right_icon = global::EFGetStarted.Droid.Resource.Id.right_icon; - global::Xamarin.Forms.Platform.Resource.Id.right_side = global::EFGetStarted.Droid.Resource.Id.right_side; - global::Xamarin.Forms.Platform.Resource.Id.save_image_matrix = global::EFGetStarted.Droid.Resource.Id.save_image_matrix; - global::Xamarin.Forms.Platform.Resource.Id.save_non_transition_alpha = global::EFGetStarted.Droid.Resource.Id.save_non_transition_alpha; - global::Xamarin.Forms.Platform.Resource.Id.save_scale_type = global::EFGetStarted.Droid.Resource.Id.save_scale_type; - global::Xamarin.Forms.Platform.Resource.Id.screen = global::EFGetStarted.Droid.Resource.Id.screen; - global::Xamarin.Forms.Platform.Resource.Id.scroll = global::EFGetStarted.Droid.Resource.Id.scroll; - global::Xamarin.Forms.Platform.Resource.Id.scrollable = global::EFGetStarted.Droid.Resource.Id.scrollable; - global::Xamarin.Forms.Platform.Resource.Id.scrollIndicatorDown = global::EFGetStarted.Droid.Resource.Id.scrollIndicatorDown; - global::Xamarin.Forms.Platform.Resource.Id.scrollIndicatorUp = global::EFGetStarted.Droid.Resource.Id.scrollIndicatorUp; - global::Xamarin.Forms.Platform.Resource.Id.scrollView = global::EFGetStarted.Droid.Resource.Id.scrollView; - global::Xamarin.Forms.Platform.Resource.Id.search_badge = global::EFGetStarted.Droid.Resource.Id.search_badge; - global::Xamarin.Forms.Platform.Resource.Id.search_bar = global::EFGetStarted.Droid.Resource.Id.search_bar; - global::Xamarin.Forms.Platform.Resource.Id.search_button = global::EFGetStarted.Droid.Resource.Id.search_button; - global::Xamarin.Forms.Platform.Resource.Id.search_close_btn = global::EFGetStarted.Droid.Resource.Id.search_close_btn; - global::Xamarin.Forms.Platform.Resource.Id.search_edit_frame = global::EFGetStarted.Droid.Resource.Id.search_edit_frame; - global::Xamarin.Forms.Platform.Resource.Id.search_go_btn = global::EFGetStarted.Droid.Resource.Id.search_go_btn; - global::Xamarin.Forms.Platform.Resource.Id.search_mag_icon = global::EFGetStarted.Droid.Resource.Id.search_mag_icon; - global::Xamarin.Forms.Platform.Resource.Id.search_plate = global::EFGetStarted.Droid.Resource.Id.search_plate; - global::Xamarin.Forms.Platform.Resource.Id.search_src_text = global::EFGetStarted.Droid.Resource.Id.search_src_text; - global::Xamarin.Forms.Platform.Resource.Id.search_voice_btn = global::EFGetStarted.Droid.Resource.Id.search_voice_btn; - global::Xamarin.Forms.Platform.Resource.Id.selected = global::EFGetStarted.Droid.Resource.Id.selected; - global::Xamarin.Forms.Platform.Resource.Id.select_dialog_listview = global::EFGetStarted.Droid.Resource.Id.select_dialog_listview; - global::Xamarin.Forms.Platform.Resource.Id.shellcontent_appbar = global::EFGetStarted.Droid.Resource.Id.shellcontent_appbar; - global::Xamarin.Forms.Platform.Resource.Id.shellcontent_toolbar = global::EFGetStarted.Droid.Resource.Id.shellcontent_toolbar; - global::Xamarin.Forms.Platform.Resource.Id.SHIFT = global::EFGetStarted.Droid.Resource.Id.SHIFT; - global::Xamarin.Forms.Platform.Resource.Id.shortcut = global::EFGetStarted.Droid.Resource.Id.shortcut; - global::Xamarin.Forms.Platform.Resource.Id.showCustom = global::EFGetStarted.Droid.Resource.Id.showCustom; - global::Xamarin.Forms.Platform.Resource.Id.showHome = global::EFGetStarted.Droid.Resource.Id.showHome; - global::Xamarin.Forms.Platform.Resource.Id.showTitle = global::EFGetStarted.Droid.Resource.Id.showTitle; - global::Xamarin.Forms.Platform.Resource.Id.smallLabel = global::EFGetStarted.Droid.Resource.Id.smallLabel; - global::Xamarin.Forms.Platform.Resource.Id.snackbar_action = global::EFGetStarted.Droid.Resource.Id.snackbar_action; - global::Xamarin.Forms.Platform.Resource.Id.snackbar_text = global::EFGetStarted.Droid.Resource.Id.snackbar_text; - global::Xamarin.Forms.Platform.Resource.Id.snap = global::EFGetStarted.Droid.Resource.Id.snap; - global::Xamarin.Forms.Platform.Resource.Id.snapMargins = global::EFGetStarted.Droid.Resource.Id.snapMargins; - global::Xamarin.Forms.Platform.Resource.Id.spacer = global::EFGetStarted.Droid.Resource.Id.spacer; - global::Xamarin.Forms.Platform.Resource.Id.split_action_bar = global::EFGetStarted.Droid.Resource.Id.split_action_bar; - global::Xamarin.Forms.Platform.Resource.Id.src_atop = global::EFGetStarted.Droid.Resource.Id.src_atop; - global::Xamarin.Forms.Platform.Resource.Id.src_in = global::EFGetStarted.Droid.Resource.Id.src_in; - global::Xamarin.Forms.Platform.Resource.Id.src_over = global::EFGetStarted.Droid.Resource.Id.src_over; - global::Xamarin.Forms.Platform.Resource.Id.start = global::EFGetStarted.Droid.Resource.Id.start; - global::Xamarin.Forms.Platform.Resource.Id.status_bar_latest_event_content = global::EFGetStarted.Droid.Resource.Id.status_bar_latest_event_content; - global::Xamarin.Forms.Platform.Resource.Id.stretch = global::EFGetStarted.Droid.Resource.Id.stretch; - global::Xamarin.Forms.Platform.Resource.Id.submenuarrow = global::EFGetStarted.Droid.Resource.Id.submenuarrow; - global::Xamarin.Forms.Platform.Resource.Id.submit_area = global::EFGetStarted.Droid.Resource.Id.submit_area; - global::Xamarin.Forms.Platform.Resource.Id.SYM = global::EFGetStarted.Droid.Resource.Id.SYM; - global::Xamarin.Forms.Platform.Resource.Id.tabMode = global::EFGetStarted.Droid.Resource.Id.tabMode; - global::Xamarin.Forms.Platform.Resource.Id.tag_transition_group = global::EFGetStarted.Droid.Resource.Id.tag_transition_group; - global::Xamarin.Forms.Platform.Resource.Id.tag_unhandled_key_event_manager = global::EFGetStarted.Droid.Resource.Id.tag_unhandled_key_event_manager; - global::Xamarin.Forms.Platform.Resource.Id.tag_unhandled_key_listeners = global::EFGetStarted.Droid.Resource.Id.tag_unhandled_key_listeners; - global::Xamarin.Forms.Platform.Resource.Id.text = global::EFGetStarted.Droid.Resource.Id.text; - global::Xamarin.Forms.Platform.Resource.Id.text2 = global::EFGetStarted.Droid.Resource.Id.text2; - global::Xamarin.Forms.Platform.Resource.Id.textinput_counter = global::EFGetStarted.Droid.Resource.Id.textinput_counter; - global::Xamarin.Forms.Platform.Resource.Id.textinput_error = global::EFGetStarted.Droid.Resource.Id.textinput_error; - global::Xamarin.Forms.Platform.Resource.Id.textinput_helper_text = global::EFGetStarted.Droid.Resource.Id.textinput_helper_text; - global::Xamarin.Forms.Platform.Resource.Id.textSpacerNoButtons = global::EFGetStarted.Droid.Resource.Id.textSpacerNoButtons; - global::Xamarin.Forms.Platform.Resource.Id.textSpacerNoTitle = global::EFGetStarted.Droid.Resource.Id.textSpacerNoTitle; - global::Xamarin.Forms.Platform.Resource.Id.textStart = global::EFGetStarted.Droid.Resource.Id.textStart; - global::Xamarin.Forms.Platform.Resource.Id.text_input_password_toggle = global::EFGetStarted.Droid.Resource.Id.text_input_password_toggle; - global::Xamarin.Forms.Platform.Resource.Id.time = global::EFGetStarted.Droid.Resource.Id.time; - global::Xamarin.Forms.Platform.Resource.Id.title = global::EFGetStarted.Droid.Resource.Id.title; - global::Xamarin.Forms.Platform.Resource.Id.titleDividerNoCustom = global::EFGetStarted.Droid.Resource.Id.titleDividerNoCustom; - global::Xamarin.Forms.Platform.Resource.Id.title_template = global::EFGetStarted.Droid.Resource.Id.title_template; - global::Xamarin.Forms.Platform.Resource.Id.top = global::EFGetStarted.Droid.Resource.Id.top; - global::Xamarin.Forms.Platform.Resource.Id.topPanel = global::EFGetStarted.Droid.Resource.Id.topPanel; - global::Xamarin.Forms.Platform.Resource.Id.touch_outside = global::EFGetStarted.Droid.Resource.Id.touch_outside; - global::Xamarin.Forms.Platform.Resource.Id.transition_current_scene = global::EFGetStarted.Droid.Resource.Id.transition_current_scene; - global::Xamarin.Forms.Platform.Resource.Id.transition_layout_save = global::EFGetStarted.Droid.Resource.Id.transition_layout_save; - global::Xamarin.Forms.Platform.Resource.Id.transition_position = global::EFGetStarted.Droid.Resource.Id.transition_position; - global::Xamarin.Forms.Platform.Resource.Id.transition_scene_layoutid_cache = global::EFGetStarted.Droid.Resource.Id.transition_scene_layoutid_cache; - global::Xamarin.Forms.Platform.Resource.Id.transition_transform = global::EFGetStarted.Droid.Resource.Id.transition_transform; - global::Xamarin.Forms.Platform.Resource.Id.uniform = global::EFGetStarted.Droid.Resource.Id.uniform; - global::Xamarin.Forms.Platform.Resource.Id.unlabeled = global::EFGetStarted.Droid.Resource.Id.unlabeled; - global::Xamarin.Forms.Platform.Resource.Id.up = global::EFGetStarted.Droid.Resource.Id.up; - global::Xamarin.Forms.Platform.Resource.Id.useLogo = global::EFGetStarted.Droid.Resource.Id.useLogo; - global::Xamarin.Forms.Platform.Resource.Id.view_offset_helper = global::EFGetStarted.Droid.Resource.Id.view_offset_helper; - global::Xamarin.Forms.Platform.Resource.Id.visible = global::EFGetStarted.Droid.Resource.Id.visible; - global::Xamarin.Forms.Platform.Resource.Id.withText = global::EFGetStarted.Droid.Resource.Id.withText; - global::Xamarin.Forms.Platform.Resource.Id.wrap_content = global::EFGetStarted.Droid.Resource.Id.wrap_content; - global::Xamarin.Forms.Platform.Resource.Integer.abc_config_activityDefaultDur = global::EFGetStarted.Droid.Resource.Integer.abc_config_activityDefaultDur; - global::Xamarin.Forms.Platform.Resource.Integer.abc_config_activityShortDur = global::EFGetStarted.Droid.Resource.Integer.abc_config_activityShortDur; - global::Xamarin.Forms.Platform.Resource.Integer.app_bar_elevation_anim_duration = global::EFGetStarted.Droid.Resource.Integer.app_bar_elevation_anim_duration; - global::Xamarin.Forms.Platform.Resource.Integer.bottom_sheet_slide_duration = global::EFGetStarted.Droid.Resource.Integer.bottom_sheet_slide_duration; - global::Xamarin.Forms.Platform.Resource.Integer.cancel_button_image_alpha = global::EFGetStarted.Droid.Resource.Integer.cancel_button_image_alpha; - global::Xamarin.Forms.Platform.Resource.Integer.config_tooltipAnimTime = global::EFGetStarted.Droid.Resource.Integer.config_tooltipAnimTime; - global::Xamarin.Forms.Platform.Resource.Integer.design_snackbar_text_max_lines = global::EFGetStarted.Droid.Resource.Integer.design_snackbar_text_max_lines; - global::Xamarin.Forms.Platform.Resource.Integer.design_tab_indicator_anim_duration_ms = global::EFGetStarted.Droid.Resource.Integer.design_tab_indicator_anim_duration_ms; - global::Xamarin.Forms.Platform.Resource.Integer.hide_password_duration = global::EFGetStarted.Droid.Resource.Integer.hide_password_duration; - global::Xamarin.Forms.Platform.Resource.Integer.mtrl_btn_anim_delay_ms = global::EFGetStarted.Droid.Resource.Integer.mtrl_btn_anim_delay_ms; - global::Xamarin.Forms.Platform.Resource.Integer.mtrl_btn_anim_duration_ms = global::EFGetStarted.Droid.Resource.Integer.mtrl_btn_anim_duration_ms; - global::Xamarin.Forms.Platform.Resource.Integer.mtrl_chip_anim_duration = global::EFGetStarted.Droid.Resource.Integer.mtrl_chip_anim_duration; - global::Xamarin.Forms.Platform.Resource.Integer.mtrl_tab_indicator_anim_duration_ms = global::EFGetStarted.Droid.Resource.Integer.mtrl_tab_indicator_anim_duration_ms; - global::Xamarin.Forms.Platform.Resource.Integer.show_password_duration = global::EFGetStarted.Droid.Resource.Integer.show_password_duration; - global::Xamarin.Forms.Platform.Resource.Integer.status_bar_notification_info_maxnum = global::EFGetStarted.Droid.Resource.Integer.status_bar_notification_info_maxnum; - global::Xamarin.Forms.Platform.Resource.Interpolator.mtrl_fast_out_linear_in = global::EFGetStarted.Droid.Resource.Interpolator.mtrl_fast_out_linear_in; - global::Xamarin.Forms.Platform.Resource.Interpolator.mtrl_fast_out_slow_in = global::EFGetStarted.Droid.Resource.Interpolator.mtrl_fast_out_slow_in; - global::Xamarin.Forms.Platform.Resource.Interpolator.mtrl_linear = global::EFGetStarted.Droid.Resource.Interpolator.mtrl_linear; - global::Xamarin.Forms.Platform.Resource.Interpolator.mtrl_linear_out_slow_in = global::EFGetStarted.Droid.Resource.Interpolator.mtrl_linear_out_slow_in; - global::Xamarin.Forms.Platform.Resource.Layout.abc_action_bar_title_item = global::EFGetStarted.Droid.Resource.Layout.abc_action_bar_title_item; - global::Xamarin.Forms.Platform.Resource.Layout.abc_action_bar_up_container = global::EFGetStarted.Droid.Resource.Layout.abc_action_bar_up_container; - global::Xamarin.Forms.Platform.Resource.Layout.abc_action_menu_item_layout = global::EFGetStarted.Droid.Resource.Layout.abc_action_menu_item_layout; - global::Xamarin.Forms.Platform.Resource.Layout.abc_action_menu_layout = global::EFGetStarted.Droid.Resource.Layout.abc_action_menu_layout; - global::Xamarin.Forms.Platform.Resource.Layout.abc_action_mode_bar = global::EFGetStarted.Droid.Resource.Layout.abc_action_mode_bar; - global::Xamarin.Forms.Platform.Resource.Layout.abc_action_mode_close_item_material = global::EFGetStarted.Droid.Resource.Layout.abc_action_mode_close_item_material; - global::Xamarin.Forms.Platform.Resource.Layout.abc_activity_chooser_view = global::EFGetStarted.Droid.Resource.Layout.abc_activity_chooser_view; - global::Xamarin.Forms.Platform.Resource.Layout.abc_activity_chooser_view_list_item = global::EFGetStarted.Droid.Resource.Layout.abc_activity_chooser_view_list_item; - global::Xamarin.Forms.Platform.Resource.Layout.abc_alert_dialog_button_bar_material = global::EFGetStarted.Droid.Resource.Layout.abc_alert_dialog_button_bar_material; - global::Xamarin.Forms.Platform.Resource.Layout.abc_alert_dialog_material = global::EFGetStarted.Droid.Resource.Layout.abc_alert_dialog_material; - global::Xamarin.Forms.Platform.Resource.Layout.abc_alert_dialog_title_material = global::EFGetStarted.Droid.Resource.Layout.abc_alert_dialog_title_material; - global::Xamarin.Forms.Platform.Resource.Layout.abc_cascading_menu_item_layout = global::EFGetStarted.Droid.Resource.Layout.abc_cascading_menu_item_layout; - global::Xamarin.Forms.Platform.Resource.Layout.abc_dialog_title_material = global::EFGetStarted.Droid.Resource.Layout.abc_dialog_title_material; - global::Xamarin.Forms.Platform.Resource.Layout.abc_expanded_menu_layout = global::EFGetStarted.Droid.Resource.Layout.abc_expanded_menu_layout; - global::Xamarin.Forms.Platform.Resource.Layout.abc_list_menu_item_checkbox = global::EFGetStarted.Droid.Resource.Layout.abc_list_menu_item_checkbox; - global::Xamarin.Forms.Platform.Resource.Layout.abc_list_menu_item_icon = global::EFGetStarted.Droid.Resource.Layout.abc_list_menu_item_icon; - global::Xamarin.Forms.Platform.Resource.Layout.abc_list_menu_item_layout = global::EFGetStarted.Droid.Resource.Layout.abc_list_menu_item_layout; - global::Xamarin.Forms.Platform.Resource.Layout.abc_list_menu_item_radio = global::EFGetStarted.Droid.Resource.Layout.abc_list_menu_item_radio; - global::Xamarin.Forms.Platform.Resource.Layout.abc_popup_menu_header_item_layout = global::EFGetStarted.Droid.Resource.Layout.abc_popup_menu_header_item_layout; - global::Xamarin.Forms.Platform.Resource.Layout.abc_popup_menu_item_layout = global::EFGetStarted.Droid.Resource.Layout.abc_popup_menu_item_layout; - global::Xamarin.Forms.Platform.Resource.Layout.abc_screen_content_include = global::EFGetStarted.Droid.Resource.Layout.abc_screen_content_include; - global::Xamarin.Forms.Platform.Resource.Layout.abc_screen_simple = global::EFGetStarted.Droid.Resource.Layout.abc_screen_simple; - global::Xamarin.Forms.Platform.Resource.Layout.abc_screen_simple_overlay_action_mode = global::EFGetStarted.Droid.Resource.Layout.abc_screen_simple_overlay_action_mode; - global::Xamarin.Forms.Platform.Resource.Layout.abc_screen_toolbar = global::EFGetStarted.Droid.Resource.Layout.abc_screen_toolbar; - global::Xamarin.Forms.Platform.Resource.Layout.abc_search_dropdown_item_icons_2line = global::EFGetStarted.Droid.Resource.Layout.abc_search_dropdown_item_icons_2line; - global::Xamarin.Forms.Platform.Resource.Layout.abc_search_view = global::EFGetStarted.Droid.Resource.Layout.abc_search_view; - global::Xamarin.Forms.Platform.Resource.Layout.abc_select_dialog_material = global::EFGetStarted.Droid.Resource.Layout.abc_select_dialog_material; - global::Xamarin.Forms.Platform.Resource.Layout.abc_tooltip = global::EFGetStarted.Droid.Resource.Layout.abc_tooltip; - global::Xamarin.Forms.Platform.Resource.Layout.BottomTabLayout = global::EFGetStarted.Droid.Resource.Layout.BottomTabLayout; - global::Xamarin.Forms.Platform.Resource.Layout.design_bottom_navigation_item = global::EFGetStarted.Droid.Resource.Layout.design_bottom_navigation_item; - global::Xamarin.Forms.Platform.Resource.Layout.design_bottom_sheet_dialog = global::EFGetStarted.Droid.Resource.Layout.design_bottom_sheet_dialog; - global::Xamarin.Forms.Platform.Resource.Layout.design_layout_snackbar = global::EFGetStarted.Droid.Resource.Layout.design_layout_snackbar; - global::Xamarin.Forms.Platform.Resource.Layout.design_layout_snackbar_include = global::EFGetStarted.Droid.Resource.Layout.design_layout_snackbar_include; - global::Xamarin.Forms.Platform.Resource.Layout.design_layout_tab_icon = global::EFGetStarted.Droid.Resource.Layout.design_layout_tab_icon; - global::Xamarin.Forms.Platform.Resource.Layout.design_layout_tab_text = global::EFGetStarted.Droid.Resource.Layout.design_layout_tab_text; - global::Xamarin.Forms.Platform.Resource.Layout.design_menu_item_action_area = global::EFGetStarted.Droid.Resource.Layout.design_menu_item_action_area; - global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_item = global::EFGetStarted.Droid.Resource.Layout.design_navigation_item; - global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_item_header = global::EFGetStarted.Droid.Resource.Layout.design_navigation_item_header; - global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_item_separator = global::EFGetStarted.Droid.Resource.Layout.design_navigation_item_separator; - global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_item_subheader = global::EFGetStarted.Droid.Resource.Layout.design_navigation_item_subheader; - global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_menu = global::EFGetStarted.Droid.Resource.Layout.design_navigation_menu; - global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_menu_item = global::EFGetStarted.Droid.Resource.Layout.design_navigation_menu_item; - global::Xamarin.Forms.Platform.Resource.Layout.design_text_input_password_icon = global::EFGetStarted.Droid.Resource.Layout.design_text_input_password_icon; - global::Xamarin.Forms.Platform.Resource.Layout.FlyoutContent = global::EFGetStarted.Droid.Resource.Layout.FlyoutContent; - global::Xamarin.Forms.Platform.Resource.Layout.mtrl_layout_snackbar = global::EFGetStarted.Droid.Resource.Layout.mtrl_layout_snackbar; - global::Xamarin.Forms.Platform.Resource.Layout.mtrl_layout_snackbar_include = global::EFGetStarted.Droid.Resource.Layout.mtrl_layout_snackbar_include; - global::Xamarin.Forms.Platform.Resource.Layout.notification_action = global::EFGetStarted.Droid.Resource.Layout.notification_action; - global::Xamarin.Forms.Platform.Resource.Layout.notification_action_tombstone = global::EFGetStarted.Droid.Resource.Layout.notification_action_tombstone; - global::Xamarin.Forms.Platform.Resource.Layout.notification_media_action = global::EFGetStarted.Droid.Resource.Layout.notification_media_action; - global::Xamarin.Forms.Platform.Resource.Layout.notification_media_cancel_action = global::EFGetStarted.Droid.Resource.Layout.notification_media_cancel_action; - global::Xamarin.Forms.Platform.Resource.Layout.notification_template_big_media = global::EFGetStarted.Droid.Resource.Layout.notification_template_big_media; - global::Xamarin.Forms.Platform.Resource.Layout.notification_template_big_media_custom = global::EFGetStarted.Droid.Resource.Layout.notification_template_big_media_custom; - global::Xamarin.Forms.Platform.Resource.Layout.notification_template_big_media_narrow = global::EFGetStarted.Droid.Resource.Layout.notification_template_big_media_narrow; - global::Xamarin.Forms.Platform.Resource.Layout.notification_template_big_media_narrow_custom = global::EFGetStarted.Droid.Resource.Layout.notification_template_big_media_narrow_custom; - global::Xamarin.Forms.Platform.Resource.Layout.notification_template_custom_big = global::EFGetStarted.Droid.Resource.Layout.notification_template_custom_big; - global::Xamarin.Forms.Platform.Resource.Layout.notification_template_icon_group = global::EFGetStarted.Droid.Resource.Layout.notification_template_icon_group; - global::Xamarin.Forms.Platform.Resource.Layout.notification_template_lines_media = global::EFGetStarted.Droid.Resource.Layout.notification_template_lines_media; - global::Xamarin.Forms.Platform.Resource.Layout.notification_template_media = global::EFGetStarted.Droid.Resource.Layout.notification_template_media; - global::Xamarin.Forms.Platform.Resource.Layout.notification_template_media_custom = global::EFGetStarted.Droid.Resource.Layout.notification_template_media_custom; - global::Xamarin.Forms.Platform.Resource.Layout.notification_template_part_chronometer = global::EFGetStarted.Droid.Resource.Layout.notification_template_part_chronometer; - global::Xamarin.Forms.Platform.Resource.Layout.notification_template_part_time = global::EFGetStarted.Droid.Resource.Layout.notification_template_part_time; - global::Xamarin.Forms.Platform.Resource.Layout.RootLayout = global::EFGetStarted.Droid.Resource.Layout.RootLayout; - global::Xamarin.Forms.Platform.Resource.Layout.select_dialog_item_material = global::EFGetStarted.Droid.Resource.Layout.select_dialog_item_material; - global::Xamarin.Forms.Platform.Resource.Layout.select_dialog_multichoice_material = global::EFGetStarted.Droid.Resource.Layout.select_dialog_multichoice_material; - global::Xamarin.Forms.Platform.Resource.Layout.select_dialog_singlechoice_material = global::EFGetStarted.Droid.Resource.Layout.select_dialog_singlechoice_material; - global::Xamarin.Forms.Platform.Resource.Layout.ShellContent = global::EFGetStarted.Droid.Resource.Layout.ShellContent; - global::Xamarin.Forms.Platform.Resource.Layout.support_simple_spinner_dropdown_item = global::EFGetStarted.Droid.Resource.Layout.support_simple_spinner_dropdown_item; - global::Xamarin.Forms.Platform.Resource.String.abc_action_bar_home_description = global::EFGetStarted.Droid.Resource.String.abc_action_bar_home_description; - global::Xamarin.Forms.Platform.Resource.String.abc_action_bar_up_description = global::EFGetStarted.Droid.Resource.String.abc_action_bar_up_description; - global::Xamarin.Forms.Platform.Resource.String.abc_action_menu_overflow_description = global::EFGetStarted.Droid.Resource.String.abc_action_menu_overflow_description; - global::Xamarin.Forms.Platform.Resource.String.abc_action_mode_done = global::EFGetStarted.Droid.Resource.String.abc_action_mode_done; - global::Xamarin.Forms.Platform.Resource.String.abc_activitychooserview_choose_application = global::EFGetStarted.Droid.Resource.String.abc_activitychooserview_choose_application; - global::Xamarin.Forms.Platform.Resource.String.abc_activity_chooser_view_see_all = global::EFGetStarted.Droid.Resource.String.abc_activity_chooser_view_see_all; - global::Xamarin.Forms.Platform.Resource.String.abc_capital_off = global::EFGetStarted.Droid.Resource.String.abc_capital_off; - global::Xamarin.Forms.Platform.Resource.String.abc_capital_on = global::EFGetStarted.Droid.Resource.String.abc_capital_on; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_body_1_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_body_1_material; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_body_2_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_body_2_material; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_button_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_button_material; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_caption_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_caption_material; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_display_1_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_display_1_material; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_display_2_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_display_2_material; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_display_3_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_display_3_material; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_display_4_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_display_4_material; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_headline_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_headline_material; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_menu_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_menu_material; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_subhead_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_subhead_material; - global::Xamarin.Forms.Platform.Resource.String.abc_font_family_title_material = global::EFGetStarted.Droid.Resource.String.abc_font_family_title_material; - global::Xamarin.Forms.Platform.Resource.String.abc_menu_alt_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_alt_shortcut_label; - global::Xamarin.Forms.Platform.Resource.String.abc_menu_ctrl_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_ctrl_shortcut_label; - global::Xamarin.Forms.Platform.Resource.String.abc_menu_delete_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_delete_shortcut_label; - global::Xamarin.Forms.Platform.Resource.String.abc_menu_enter_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_enter_shortcut_label; - global::Xamarin.Forms.Platform.Resource.String.abc_menu_function_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_function_shortcut_label; - global::Xamarin.Forms.Platform.Resource.String.abc_menu_meta_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_meta_shortcut_label; - global::Xamarin.Forms.Platform.Resource.String.abc_menu_shift_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_shift_shortcut_label; - global::Xamarin.Forms.Platform.Resource.String.abc_menu_space_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_space_shortcut_label; - global::Xamarin.Forms.Platform.Resource.String.abc_menu_sym_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_menu_sym_shortcut_label; - global::Xamarin.Forms.Platform.Resource.String.abc_prepend_shortcut_label = global::EFGetStarted.Droid.Resource.String.abc_prepend_shortcut_label; - global::Xamarin.Forms.Platform.Resource.String.abc_searchview_description_clear = global::EFGetStarted.Droid.Resource.String.abc_searchview_description_clear; - global::Xamarin.Forms.Platform.Resource.String.abc_searchview_description_query = global::EFGetStarted.Droid.Resource.String.abc_searchview_description_query; - global::Xamarin.Forms.Platform.Resource.String.abc_searchview_description_search = global::EFGetStarted.Droid.Resource.String.abc_searchview_description_search; - global::Xamarin.Forms.Platform.Resource.String.abc_searchview_description_submit = global::EFGetStarted.Droid.Resource.String.abc_searchview_description_submit; - global::Xamarin.Forms.Platform.Resource.String.abc_searchview_description_voice = global::EFGetStarted.Droid.Resource.String.abc_searchview_description_voice; - global::Xamarin.Forms.Platform.Resource.String.abc_search_hint = global::EFGetStarted.Droid.Resource.String.abc_search_hint; - global::Xamarin.Forms.Platform.Resource.String.abc_shareactionprovider_share_with = global::EFGetStarted.Droid.Resource.String.abc_shareactionprovider_share_with; - global::Xamarin.Forms.Platform.Resource.String.abc_shareactionprovider_share_with_application = global::EFGetStarted.Droid.Resource.String.abc_shareactionprovider_share_with_application; - global::Xamarin.Forms.Platform.Resource.String.abc_toolbar_collapse_description = global::EFGetStarted.Droid.Resource.String.abc_toolbar_collapse_description; - global::Xamarin.Forms.Platform.Resource.String.appbar_scrolling_view_behavior = global::EFGetStarted.Droid.Resource.String.appbar_scrolling_view_behavior; - global::Xamarin.Forms.Platform.Resource.String.bottom_sheet_behavior = global::EFGetStarted.Droid.Resource.String.bottom_sheet_behavior; - global::Xamarin.Forms.Platform.Resource.String.character_counter_content_description = global::EFGetStarted.Droid.Resource.String.character_counter_content_description; - global::Xamarin.Forms.Platform.Resource.String.character_counter_pattern = global::EFGetStarted.Droid.Resource.String.character_counter_pattern; - global::Xamarin.Forms.Platform.Resource.String.fab_transformation_scrim_behavior = global::EFGetStarted.Droid.Resource.String.fab_transformation_scrim_behavior; - global::Xamarin.Forms.Platform.Resource.String.fab_transformation_sheet_behavior = global::EFGetStarted.Droid.Resource.String.fab_transformation_sheet_behavior; - global::Xamarin.Forms.Platform.Resource.String.hide_bottom_view_on_scroll_behavior = global::EFGetStarted.Droid.Resource.String.hide_bottom_view_on_scroll_behavior; - global::Xamarin.Forms.Platform.Resource.String.mtrl_chip_close_icon_content_description = global::EFGetStarted.Droid.Resource.String.mtrl_chip_close_icon_content_description; - global::Xamarin.Forms.Platform.Resource.String.overflow_tab_title = global::EFGetStarted.Droid.Resource.String.overflow_tab_title; - global::Xamarin.Forms.Platform.Resource.String.password_toggle_content_description = global::EFGetStarted.Droid.Resource.String.password_toggle_content_description; - global::Xamarin.Forms.Platform.Resource.String.path_password_eye = global::EFGetStarted.Droid.Resource.String.path_password_eye; - global::Xamarin.Forms.Platform.Resource.String.path_password_eye_mask_strike_through = global::EFGetStarted.Droid.Resource.String.path_password_eye_mask_strike_through; - global::Xamarin.Forms.Platform.Resource.String.path_password_eye_mask_visible = global::EFGetStarted.Droid.Resource.String.path_password_eye_mask_visible; - global::Xamarin.Forms.Platform.Resource.String.path_password_strike_through = global::EFGetStarted.Droid.Resource.String.path_password_strike_through; - global::Xamarin.Forms.Platform.Resource.String.search_menu_title = global::EFGetStarted.Droid.Resource.String.search_menu_title; - global::Xamarin.Forms.Platform.Resource.String.status_bar_notification_info_overflow = global::EFGetStarted.Droid.Resource.String.status_bar_notification_info_overflow; - global::Xamarin.Forms.Platform.Resource.Style.AlertDialog_AppCompat = global::EFGetStarted.Droid.Resource.Style.AlertDialog_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.AlertDialog_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.AlertDialog_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Animation_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Animation_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Animation_AppCompat_DropDownUp = global::EFGetStarted.Droid.Resource.Style.Animation_AppCompat_DropDownUp; - global::Xamarin.Forms.Platform.Resource.Style.Animation_AppCompat_Tooltip = global::EFGetStarted.Droid.Resource.Style.Animation_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Resource.Style.Animation_Design_BottomSheetDialog = global::EFGetStarted.Droid.Resource.Style.Animation_Design_BottomSheetDialog; - global::Xamarin.Forms.Platform.Resource.Style.AppCompatDialogStyle = global::EFGetStarted.Droid.Resource.Style.AppCompatDialogStyle; - global::Xamarin.Forms.Platform.Resource.Style.Base_AlertDialog_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_AlertDialog_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_AlertDialog_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_AlertDialog_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Base_Animation_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_Animation_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_Animation_AppCompat_DropDownUp = global::EFGetStarted.Droid.Resource.Style.Base_Animation_AppCompat_DropDownUp; - global::Xamarin.Forms.Platform.Resource.Style.Base_Animation_AppCompat_Tooltip = global::EFGetStarted.Droid.Resource.Style.Base_Animation_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Resource.Style.Base_CardView = global::EFGetStarted.Droid.Resource.Style.Base_CardView; - global::Xamarin.Forms.Platform.Resource.Style.Base_DialogWindowTitleBackground_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_DialogWindowTitleBackground_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_DialogWindowTitle_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_DialogWindowTitle_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Body1 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body1; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Body2 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body2; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Button = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Button; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Caption = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Caption; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Display1 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display1; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Display2 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display2; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Display3 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display3; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Display4 = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display4; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Headline = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Headline; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Large = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Medium = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Menu = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Menu; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_SearchResult = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Small = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Subhead = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Title = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Tooltip = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle; - global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title = global::EFGetStarted.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title; - global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_Dark = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark; - global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_CompactMenu = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_CompactMenu; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Bridge; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_CompactMenu = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_CompactMenu; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize; - global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents; - global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge; - global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Light = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge; - global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_V21_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V21_Theme_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_V21_Theme_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V21_Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_V21_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_V22_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V22_Theme_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_V22_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V22_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Base_V23_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V23_Theme_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_V23_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V23_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Base_V26_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V26_Theme_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_V26_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V26_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Base_V26_Widget_AppCompat_Toolbar = global::EFGetStarted.Droid.Resource.Style.Base_V26_Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Resource.Style.Base_V28_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V28_Theme_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_V28_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V28_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Base_V7_Theme_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Theme_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V7_Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView = global::EFGetStarted.Droid.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Widget_AppCompat_EditText = global::EFGetStarted.Droid.Resource.Style.Base_V7_Widget_AppCompat_EditText; - global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Widget_AppCompat_Toolbar = global::EFGetStarted.Droid.Resource.Style.Base_V7_Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionButton = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionMode = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActionMode; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActivityChooserView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ActivityChooserView; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ButtonBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button_Borderless = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button_Colored = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button_Colored; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button_Small = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Button_Small; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_EditText = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_EditText; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ImageButton = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ImageButton; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ListMenuView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ListMenuView; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ListPopupWindow = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ListPopupWindow; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ListView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ListView; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ListView_DropDown = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ListView_DropDown; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ListView_Menu = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ListView_Menu; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_PopupMenu = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_PopupWindow = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_PopupWindow; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ProgressBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_RatingBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_RatingBar_Small = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Small; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_SearchView = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_SearchView; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_SeekBar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Spinner = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Spinner; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Toolbar = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation = global::EFGetStarted.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_Design_TabLayout = global::EFGetStarted.Droid.Resource.Style.Base_Widget_Design_TabLayout; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_MaterialComponents_Chip = global::EFGetStarted.Droid.Resource.Style.Base_Widget_MaterialComponents_Chip; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText = global::EFGetStarted.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText; - global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout = global::EFGetStarted.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout; - global::Xamarin.Forms.Platform.Resource.Style.CardView = global::EFGetStarted.Droid.Resource.Style.CardView; - global::Xamarin.Forms.Platform.Resource.Style.CardView_Dark = global::EFGetStarted.Droid.Resource.Style.CardView_Dark; - global::Xamarin.Forms.Platform.Resource.Style.CardView_Light = global::EFGetStarted.Droid.Resource.Style.CardView_Light; - global::Xamarin.Forms.Platform.Resource.Style.collectionViewTheme = global::EFGetStarted.Droid.Resource.Style.collectionViewTheme; - global::Xamarin.Forms.Platform.Resource.Style.MainTheme = global::EFGetStarted.Droid.Resource.Style.MainTheme; - global::Xamarin.Forms.Platform.Resource.Style.MainTheme_Base = global::EFGetStarted.Droid.Resource.Style.MainTheme_Base; - global::Xamarin.Forms.Platform.Resource.Style.Platform_AppCompat = global::EFGetStarted.Droid.Resource.Style.Platform_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Platform_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Platform_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Platform_MaterialComponents = global::EFGetStarted.Droid.Resource.Style.Platform_MaterialComponents; - global::Xamarin.Forms.Platform.Resource.Style.Platform_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Platform_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Platform_MaterialComponents_Light = global::EFGetStarted.Droid.Resource.Style.Platform_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Resource.Style.Platform_MaterialComponents_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Platform_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Platform_ThemeOverlay_AppCompat = global::EFGetStarted.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark = global::EFGetStarted.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark; - global::Xamarin.Forms.Platform.Resource.Style.Platform_ThemeOverlay_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Platform_V21_AppCompat = global::EFGetStarted.Droid.Resource.Style.Platform_V21_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Platform_V21_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Platform_V21_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Platform_V25_AppCompat = global::EFGetStarted.Droid.Resource.Style.Platform_V25_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Platform_V25_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Platform_V25_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Platform_Widget_AppCompat_Spinner = global::EFGetStarted.Droid.Resource.Style.Platform_Widget_AppCompat_Spinner; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query; - global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text = global::EFGetStarted.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text; - global::Xamarin.Forms.Platform.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton = global::EFGetStarted.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton; - global::Xamarin.Forms.Platform.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = global::EFGetStarted.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Resource.Style.scrollViewScrollBars = global::EFGetStarted.Droid.Resource.Style.scrollViewScrollBars; - global::Xamarin.Forms.Platform.Resource.Style.scrollViewTheme = global::EFGetStarted.Droid.Resource.Style.scrollViewTheme; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Body1 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Body1; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Body2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Body2; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Button = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Button; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Caption = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Caption; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Display1 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Display1; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Display2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Display2; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Display3 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Display3; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Display4 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Display4; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Headline = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Headline; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Large = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Large; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Large_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Large_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Medium = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Medium; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Medium_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Medium_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Menu = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Menu; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_SearchResult_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Title; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Small = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Small; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Small_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Small_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Subhead = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Subhead; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Title; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Title_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Title_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Tooltip = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Tooltip; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_Button = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_Switch = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Switch; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::EFGetStarted.Droid.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Info = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Info; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Info_Media = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Info_Media; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Line2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Line2_Media = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2_Media; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Media = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Media; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Time = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Time; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Time_Media = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Time_Media; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Title; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Title_Media = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Compat_Notification_Title_Media; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Counter = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Counter; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Counter_Overflow = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Counter_Overflow; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Error = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Error; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_HelperText = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_HelperText; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Hint = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Hint; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Snackbar_Message = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Snackbar_Message; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Tab = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Design_Tab; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Body1 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Body1; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Body2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Body2; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Button = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Button; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Caption = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Caption; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Chip = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Chip; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline1 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline1; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline2; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline3 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline3; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline4 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline4; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline5 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline5; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline6 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline6; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Overline = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Overline; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Subtitle1 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle1; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Subtitle2 = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle2; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Tab = global::EFGetStarted.Droid.Resource.Style.TextAppearance_MaterialComponents_Tab; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle; - global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title = global::EFGetStarted.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_ActionBar = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_Dark = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_Dark = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_Light = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox; - global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::EFGetStarted.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_CompactMenu = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_CompactMenu; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_Dialog = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DayNight_NoActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Dialog = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_DialogWhenLarge; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_DarkActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_Light_NoActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_AppCompat_NoActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Theme_Design = global::EFGetStarted.Droid.Resource.Style.Theme_Design; - global::Xamarin.Forms.Platform.Resource.Style.Theme_Design_BottomSheetDialog = global::EFGetStarted.Droid.Resource.Style.Theme_Design_BottomSheetDialog; - global::Xamarin.Forms.Platform.Resource.Style.Theme_Design_Light = global::EFGetStarted.Droid.Resource.Style.Theme_Design_Light; - global::Xamarin.Forms.Platform.Resource.Style.Theme_Design_Light_BottomSheetDialog = global::EFGetStarted.Droid.Resource.Style.Theme_Design_Light_BottomSheetDialog; - global::Xamarin.Forms.Platform.Resource.Style.Theme_Design_Light_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_Design_Light_NoActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Theme_Design_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_Design_NoActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_BottomSheetDialog = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_BottomSheetDialog; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Bridge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Bridge; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_CompactMenu = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_CompactMenu; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Dialog = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_DialogWhenLarge; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_Bridge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_Bridge; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_Dialog = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_NoActionBar = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge = global::EFGetStarted.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionBar_Solid = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionBar_Solid; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionBar_TabBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionBar_TabText = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabText; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionBar_TabView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionButton = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionButton; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionButton_CloseMode = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionButton_CloseMode; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionButton_Overflow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionMode = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActionMode; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActivityChooserView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ActivityChooserView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_AutoCompleteTextView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ButtonBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ButtonBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button_Borderless = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button_Borderless; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button_Borderless_Colored = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button_Borderless_Colored; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button_Colored = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button_Colored; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button_Small = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Button_Small; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_CompoundButton_Switch = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_CompoundButton_Switch; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_DrawerArrowToggle = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_DrawerArrowToggle; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_DropDownItem_Spinner = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_DropDownItem_Spinner; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_EditText = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_EditText; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ImageButton = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ImageButton; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionButton = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActivityChooserView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ActivityChooserView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ListPopupWindow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ListPopupWindow; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ListView_DropDown = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_ListView_DropDown; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_PopupMenu = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_SearchView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_SearchView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ListMenuView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ListMenuView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ListPopupWindow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ListPopupWindow; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ListView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ListView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ListView_DropDown = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ListView_DropDown; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ListView_Menu = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ListView_Menu; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_PopupMenu = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_PopupMenu; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_PopupMenu_Overflow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_PopupMenu_Overflow; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_PopupWindow = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_PopupWindow; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ProgressBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ProgressBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_RatingBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_RatingBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_RatingBar_Indicator = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_RatingBar_Indicator; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_RatingBar_Small = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_RatingBar_Small; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_SearchView = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_SearchView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_SearchView_ActionBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_SearchView_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_SeekBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_SeekBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_SeekBar_Discrete = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_SeekBar_Discrete; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Spinner = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Spinner; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Spinner_DropDown = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Spinner_Underlined = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Spinner_Underlined; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_TextView_SpinnerItem = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_TextView_SpinnerItem; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Toolbar = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Toolbar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation = global::EFGetStarted.Droid.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Compat_NotificationActionContainer = global::EFGetStarted.Droid.Resource.Style.Widget_Compat_NotificationActionContainer; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Compat_NotificationActionText = global::EFGetStarted.Droid.Resource.Style.Widget_Compat_NotificationActionText; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_AppBarLayout = global::EFGetStarted.Droid.Resource.Style.Widget_Design_AppBarLayout; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_BottomNavigationView = global::EFGetStarted.Droid.Resource.Style.Widget_Design_BottomNavigationView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_BottomSheet_Modal = global::EFGetStarted.Droid.Resource.Style.Widget_Design_BottomSheet_Modal; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_CollapsingToolbar = global::EFGetStarted.Droid.Resource.Style.Widget_Design_CollapsingToolbar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_FloatingActionButton = global::EFGetStarted.Droid.Resource.Style.Widget_Design_FloatingActionButton; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_NavigationView = global::EFGetStarted.Droid.Resource.Style.Widget_Design_NavigationView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_ScrimInsetsFrameLayout = global::EFGetStarted.Droid.Resource.Style.Widget_Design_ScrimInsetsFrameLayout; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_Snackbar = global::EFGetStarted.Droid.Resource.Style.Widget_Design_Snackbar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_TabLayout = global::EFGetStarted.Droid.Resource.Style.Widget_Design_TabLayout; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_TextInputLayout = global::EFGetStarted.Droid.Resource.Style.Widget_Design_TextInputLayout; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_BottomAppBar = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_BottomNavigationView = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_Icon = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_Icon; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_TextButton = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_CardView = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_CardView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_ChipGroup = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_ChipGroup; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Chip_Action = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Chip_Action; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Chip_Choice = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Chip_Choice; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Chip_Entry = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Chip_Entry; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Chip_Filter = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Chip_Filter; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_FloatingActionButton = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_FloatingActionButton; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_NavigationView = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_NavigationView; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Snackbar = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Snackbar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TabLayout = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TabLayout; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TabLayout_Colored = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TabLayout_Colored; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense; - global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Toolbar = global::EFGetStarted.Droid.Resource.Style.Widget_MaterialComponents_Toolbar; - global::Xamarin.Forms.Platform.Resource.Style.Widget_Support_CoordinatorLayout = global::EFGetStarted.Droid.Resource.Style.Widget_Support_CoordinatorLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar = global::EFGetStarted.Droid.Resource.Styleable.ActionBar; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBarLayout = global::EFGetStarted.Droid.Resource.Styleable.ActionBarLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBarLayout_android_layout_gravity = global::EFGetStarted.Droid.Resource.Styleable.ActionBarLayout_android_layout_gravity; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_background = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_background; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_backgroundSplit = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_backgroundSplit; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_backgroundStacked = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_backgroundStacked; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetEnd = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetEnd; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetEndWithActions = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetEndWithActions; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetLeft = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetLeft; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetRight = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetRight; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetStart = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetStart; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetStartWithNavigation = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_contentInsetStartWithNavigation; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_customNavigationLayout = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_customNavigationLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_displayOptions = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_displayOptions; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_divider = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_divider; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_elevation = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_elevation; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_height = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_height; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_hideOnContentScroll = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_hideOnContentScroll; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_homeAsUpIndicator = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_homeAsUpIndicator; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_homeLayout = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_homeLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_icon = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_icon; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_indeterminateProgressStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_indeterminateProgressStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_itemPadding = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_itemPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_logo = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_logo; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_navigationMode = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_navigationMode; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_popupTheme = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_popupTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_progressBarPadding = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_progressBarPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_progressBarStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_progressBarStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_subtitle = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_subtitle; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_subtitleTextStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_subtitleTextStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_title = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_title; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_titleTextStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionBar_titleTextStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionMenuItemView = global::EFGetStarted.Droid.Resource.Styleable.ActionMenuItemView; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionMenuItemView_android_minWidth = global::EFGetStarted.Droid.Resource.Styleable.ActionMenuItemView_android_minWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionMenuView = global::EFGetStarted.Droid.Resource.Styleable.ActionMenuView; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode = global::EFGetStarted.Droid.Resource.Styleable.ActionMode; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_background = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_background; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_backgroundSplit = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_backgroundSplit; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_closeItemLayout = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_closeItemLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_height = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_height; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_subtitleTextStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_subtitleTextStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_titleTextStyle = global::EFGetStarted.Droid.Resource.Styleable.ActionMode_titleTextStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.ActivityChooserView = global::EFGetStarted.Droid.Resource.Styleable.ActivityChooserView; - global::Xamarin.Forms.Platform.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable = global::EFGetStarted.Droid.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.ActivityChooserView_initialActivityCount = global::EFGetStarted.Droid.Resource.Styleable.ActivityChooserView_initialActivityCount; - global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog; - global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_android_layout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_android_layout; - global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_buttonIconDimen = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_buttonIconDimen; - global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_buttonPanelSideLayout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_buttonPanelSideLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_listItemLayout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_listItemLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_listLayout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_listLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_multiChoiceItemLayout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_multiChoiceItemLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_showTitle = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_showTitle; - global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_singleChoiceItemLayout = global::EFGetStarted.Droid.Resource.Styleable.AlertDialog_singleChoiceItemLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableItem = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableItem; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableItem_android_id = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_id; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableTransition = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableTransition; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible; - global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId = global::EFGetStarted.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayoutStates = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayoutStates; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayoutStates_state_collapsed = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsed; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayoutStates_state_collapsible = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsible; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayoutStates_state_liftable = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayoutStates_state_liftable; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayoutStates_state_lifted = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayoutStates_state_lifted; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_android_background = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_android_background; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_elevation = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_elevation; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_expanded = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_expanded; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_Layout = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_Layout; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator; - global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_liftOnScroll = global::EFGetStarted.Droid.Resource.Styleable.AppBarLayout_liftOnScroll; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatImageView = global::EFGetStarted.Droid.Resource.Styleable.AppCompatImageView; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatImageView_android_src = global::EFGetStarted.Droid.Resource.Styleable.AppCompatImageView_android_src; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatImageView_srcCompat = global::EFGetStarted.Droid.Resource.Styleable.AppCompatImageView_srcCompat; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatImageView_tint = global::EFGetStarted.Droid.Resource.Styleable.AppCompatImageView_tint; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatImageView_tintMode = global::EFGetStarted.Droid.Resource.Styleable.AppCompatImageView_tintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatSeekBar = global::EFGetStarted.Droid.Resource.Styleable.AppCompatSeekBar; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatSeekBar_android_thumb = global::EFGetStarted.Droid.Resource.Styleable.AppCompatSeekBar_android_thumb; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatSeekBar_tickMark = global::EFGetStarted.Droid.Resource.Styleable.AppCompatSeekBar_tickMark; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatSeekBar_tickMarkTint = global::EFGetStarted.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTint; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode = global::EFGetStarted.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableBottom = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableBottom; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableEnd = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableEnd; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableLeft = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableLeft; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableRight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableRight; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableStart = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableStart; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableTop = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableTop; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_textAppearance = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextHelper_android_textAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_android_textAppearance = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_android_textAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_autoSizePresetSizes = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_autoSizePresetSizes; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_autoSizeTextType = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_autoSizeTextType; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_fontFamily = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_fontFamily; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_lineHeight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_lineHeight; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_textAllCaps = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTextView_textAllCaps; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarDivider = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarDivider; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarItemBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarItemBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarPopupTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarPopupTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarSize = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarSize; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarSplitStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarSplitStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarTabStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarTabStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionDropDownStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionDropDownStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionMenuTextColor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextColor; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeCutDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeCutDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeFindDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeFindDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModePasteDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModePasteDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeShareDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeShareDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeSplitBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeSplitBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_activityChooserViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_activityChooserViewStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_alertDialogStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_alertDialogStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_alertDialogTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_alertDialogTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_android_windowIsFloating = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_android_windowIsFloating; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_borderlessButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_borderlessButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonBarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonBarStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonStyleSmall = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_buttonStyleSmall; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_checkboxStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_checkboxStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_checkedTextViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_checkedTextViewStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorAccent = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorAccent; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorBackgroundFloating = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorBackgroundFloating; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorButtonNormal = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorButtonNormal; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorControlActivated = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorControlActivated; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorControlHighlight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorControlHighlight; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorControlNormal = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorControlNormal; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorError = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorError; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorPrimary = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorPrimary; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorPrimaryDark = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorPrimaryDark; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_controlBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_controlBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dialogCornerRadius = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dialogCornerRadius; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dialogPreferredPadding = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dialogPreferredPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dialogTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dialogTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dividerHorizontal = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dividerHorizontal; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dividerVertical = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dividerVertical; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dropDownListViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_dropDownListViewStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_editTextBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_editTextBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_editTextColor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_editTextColor; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_editTextStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_editTextStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_homeAsUpIndicator = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_homeAsUpIndicator; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_imageButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_imageButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listDividerAlertDialog = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listDividerAlertDialog; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listMenuViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listMenuViewStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPopupWindowStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPopupWindowStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPreferredItemHeight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeight; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_panelBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_panelBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_panelMenuListTheme = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_panelMenuListTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_panelMenuListWidth = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_panelMenuListWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_popupMenuStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_popupMenuStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_popupWindowStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_popupWindowStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_radioButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_radioButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_ratingBarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_searchViewStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_searchViewStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_seekBarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_seekBarStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_selectableItemBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_spinnerStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_spinnerStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_switchStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_switchStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceListItem = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItem; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textColorSearchUrl = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_textColorSearchUrl; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_toolbarStyle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_toolbarStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_tooltipForegroundColor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_tooltipForegroundColor; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_tooltipFrameBackground = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_tooltipFrameBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_viewInflaterClass = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_viewInflaterClass; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowActionBar = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowActionBar; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowActionBarOverlay = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowActionBarOverlay; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowActionModeOverlay = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowActionModeOverlay; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowMinWidthMajor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMajor; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowMinWidthMinor = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMinor; - global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowNoTitle = global::EFGetStarted.Droid.Resource.Styleable.AppCompatTheme_windowNoTitle; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_backgroundTint = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_backgroundTint; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_fabAlignmentMode = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_fabAlignmentMode; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_fabCradleMargin = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_fabCradleMargin; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_hideOnScroll = global::EFGetStarted.Droid.Resource.Styleable.BottomAppBar_hideOnScroll; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_elevation = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_elevation; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemBackground = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemIconSize = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemIconSize; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemIconTint = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemIconTint; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemTextColor = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_itemTextColor; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_labelVisibilityMode = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_labelVisibilityMode; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_menu = global::EFGetStarted.Droid.Resource.Styleable.BottomNavigationView_menu; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomSheetBehavior_Layout = global::EFGetStarted.Droid.Resource.Styleable.BottomSheetBehavior_Layout; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents = global::EFGetStarted.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable = global::EFGetStarted.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight = global::EFGetStarted.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight; - global::Xamarin.Forms.Platform.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed = global::EFGetStarted.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed; - global::Xamarin.Forms.Platform.Resource.Styleable.ButtonBarLayout = global::EFGetStarted.Droid.Resource.Styleable.ButtonBarLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.ButtonBarLayout_allowStacking = global::EFGetStarted.Droid.Resource.Styleable.ButtonBarLayout_allowStacking; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView = global::EFGetStarted.Droid.Resource.Styleable.CardView; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_android_minHeight = global::EFGetStarted.Droid.Resource.Styleable.CardView_android_minHeight; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_android_minWidth = global::EFGetStarted.Droid.Resource.Styleable.CardView_android_minWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardBackgroundColor = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardBackgroundColor; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardCornerRadius = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardCornerRadius; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardElevation = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardElevation; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardMaxElevation = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardMaxElevation; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardPreventCornerOverlap = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardPreventCornerOverlap; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardUseCompatPadding = global::EFGetStarted.Droid.Resource.Styleable.CardView_cardUseCompatPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_contentPadding = global::EFGetStarted.Droid.Resource.Styleable.CardView_contentPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_contentPaddingBottom = global::EFGetStarted.Droid.Resource.Styleable.CardView_contentPaddingBottom; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_contentPaddingLeft = global::EFGetStarted.Droid.Resource.Styleable.CardView_contentPaddingLeft; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_contentPaddingRight = global::EFGetStarted.Droid.Resource.Styleable.CardView_contentPaddingRight; - global::Xamarin.Forms.Platform.Resource.Styleable.CardView_contentPaddingTop = global::EFGetStarted.Droid.Resource.Styleable.CardView_contentPaddingTop; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip = global::EFGetStarted.Droid.Resource.Styleable.Chip; - global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup; - global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_checkedChip = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_checkedChip; - global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_chipSpacing = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_chipSpacing; - global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_chipSpacingHorizontal = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_chipSpacingHorizontal; - global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_chipSpacingVertical = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_chipSpacingVertical; - global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_singleLine = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_singleLine; - global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_singleSelection = global::EFGetStarted.Droid.Resource.Styleable.ChipGroup_singleSelection; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_android_checkable = global::EFGetStarted.Droid.Resource.Styleable.Chip_android_checkable; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_android_ellipsize = global::EFGetStarted.Droid.Resource.Styleable.Chip_android_ellipsize; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_android_maxWidth = global::EFGetStarted.Droid.Resource.Styleable.Chip_android_maxWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_android_text = global::EFGetStarted.Droid.Resource.Styleable.Chip_android_text; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_android_textAppearance = global::EFGetStarted.Droid.Resource.Styleable.Chip_android_textAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_checkedIcon = global::EFGetStarted.Droid.Resource.Styleable.Chip_checkedIcon; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_checkedIconEnabled = global::EFGetStarted.Droid.Resource.Styleable.Chip_checkedIconEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_checkedIconVisible = global::EFGetStarted.Droid.Resource.Styleable.Chip_checkedIconVisible; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipBackgroundColor = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipBackgroundColor; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipCornerRadius = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipCornerRadius; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipEndPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipEndPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipIcon = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipIcon; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipIconEnabled = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipIconEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipIconSize = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipIconSize; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipIconTint = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipIconTint; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipIconVisible = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipIconVisible; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipMinHeight = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipMinHeight; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipStartPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipStartPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipStrokeColor = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipStrokeColor; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipStrokeWidth = global::EFGetStarted.Droid.Resource.Styleable.Chip_chipStrokeWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIcon = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIcon; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconEnabled = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconEndPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconEndPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconSize = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconSize; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconStartPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconStartPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconTint = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconTint; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconVisible = global::EFGetStarted.Droid.Resource.Styleable.Chip_closeIconVisible; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_hideMotionSpec = global::EFGetStarted.Droid.Resource.Styleable.Chip_hideMotionSpec; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_iconEndPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_iconEndPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_iconStartPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_iconStartPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_rippleColor = global::EFGetStarted.Droid.Resource.Styleable.Chip_rippleColor; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_showMotionSpec = global::EFGetStarted.Droid.Resource.Styleable.Chip_showMotionSpec; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_textEndPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_textEndPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.Chip_textStartPadding = global::EFGetStarted.Droid.Resource.Styleable.Chip_textStartPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_contentScrim = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_contentScrim; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_Layout = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_title = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_title; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_titleEnabled = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_titleEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_toolbarId = global::EFGetStarted.Droid.Resource.Styleable.CollapsingToolbarLayout_toolbarId; - global::Xamarin.Forms.Platform.Resource.Styleable.ColorStateListItem = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem; - global::Xamarin.Forms.Platform.Resource.Styleable.ColorStateListItem_alpha = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem_alpha; - global::Xamarin.Forms.Platform.Resource.Styleable.ColorStateListItem_android_alpha = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem_android_alpha; - global::Xamarin.Forms.Platform.Resource.Styleable.ColorStateListItem_android_color = global::EFGetStarted.Droid.Resource.Styleable.ColorStateListItem_android_color; - global::Xamarin.Forms.Platform.Resource.Styleable.CompoundButton = global::EFGetStarted.Droid.Resource.Styleable.CompoundButton; - global::Xamarin.Forms.Platform.Resource.Styleable.CompoundButton_android_button = global::EFGetStarted.Droid.Resource.Styleable.CompoundButton_android_button; - global::Xamarin.Forms.Platform.Resource.Styleable.CompoundButton_buttonTint = global::EFGetStarted.Droid.Resource.Styleable.CompoundButton_buttonTint; - global::Xamarin.Forms.Platform.Resource.Styleable.CompoundButton_buttonTintMode = global::EFGetStarted.Droid.Resource.Styleable.CompoundButton_buttonTintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_keylines = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_keylines; - global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout; - global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity; - global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor; - global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity; - global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior; - global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges; - global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge; - global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline; - global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_statusBarBackground = global::EFGetStarted.Droid.Resource.Styleable.CoordinatorLayout_statusBarBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.DesignTheme = global::EFGetStarted.Droid.Resource.Styleable.DesignTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.DesignTheme_bottomSheetDialogTheme = global::EFGetStarted.Droid.Resource.Styleable.DesignTheme_bottomSheetDialogTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.DesignTheme_bottomSheetStyle = global::EFGetStarted.Droid.Resource.Styleable.DesignTheme_bottomSheetStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle; - global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_arrowHeadLength = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_arrowHeadLength; - global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_arrowShaftLength = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_arrowShaftLength; - global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_barLength = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_barLength; - global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_color = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_color; - global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_drawableSize = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_drawableSize; - global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_gapBetweenBars = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_gapBetweenBars; - global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_spinBars = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_spinBars; - global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_thickness = global::EFGetStarted.Droid.Resource.Styleable.DrawerArrowToggle_thickness; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_backgroundTint = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_backgroundTint; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_backgroundTintMode = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_backgroundTintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_Behavior_Layout = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_borderWidth = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_borderWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_elevation = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_elevation; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_fabCustomSize = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_fabCustomSize; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_fabSize = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_fabSize; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_hideMotionSpec = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_hideMotionSpec; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_maxImageSize = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_maxImageSize; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_pressedTranslationZ = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_pressedTranslationZ; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_rippleColor = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_rippleColor; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_showMotionSpec = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_showMotionSpec; - global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_useCompatPadding = global::EFGetStarted.Droid.Resource.Styleable.FloatingActionButton_useCompatPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.FlowLayout = global::EFGetStarted.Droid.Resource.Styleable.FlowLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.FlowLayout_itemSpacing = global::EFGetStarted.Droid.Resource.Styleable.FlowLayout_itemSpacing; - global::Xamarin.Forms.Platform.Resource.Styleable.FlowLayout_lineSpacing = global::EFGetStarted.Droid.Resource.Styleable.FlowLayout_lineSpacing; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily = global::EFGetStarted.Droid.Resource.Styleable.FontFamily; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_android_font = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_font; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_android_fontStyle = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_fontStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_android_fontVariationSettings = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_fontVariationSettings; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_android_fontWeight = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_fontWeight; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_android_ttcIndex = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_android_ttcIndex; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_font = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_font; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_fontStyle = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_fontStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_fontVariationSettings = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_fontVariationSettings; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_fontWeight = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_fontWeight; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_ttcIndex = global::EFGetStarted.Droid.Resource.Styleable.FontFamilyFont_ttcIndex; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderAuthority = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderAuthority; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderCerts = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderCerts; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderFetchStrategy = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderFetchStrategy; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderFetchTimeout = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderFetchTimeout; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderPackage = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderPackage; - global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderQuery = global::EFGetStarted.Droid.Resource.Styleable.FontFamily_fontProviderQuery; - global::Xamarin.Forms.Platform.Resource.Styleable.ForegroundLinearLayout = global::EFGetStarted.Droid.Resource.Styleable.ForegroundLinearLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.ForegroundLinearLayout_android_foreground = global::EFGetStarted.Droid.Resource.Styleable.ForegroundLinearLayout_android_foreground; - global::Xamarin.Forms.Platform.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity = global::EFGetStarted.Droid.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity; - global::Xamarin.Forms.Platform.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding = global::EFGetStarted.Droid.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColorItem = global::EFGetStarted.Droid.Resource.Styleable.GradientColorItem; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColorItem_android_color = global::EFGetStarted.Droid.Resource.Styleable.GradientColorItem_android_color; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColorItem_android_offset = global::EFGetStarted.Droid.Resource.Styleable.GradientColorItem_android_offset; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_centerColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_centerColor; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_centerX = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_centerX; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_centerY = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_centerY; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_endColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_endColor; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_endX = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_endX; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_endY = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_endY; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_gradientRadius = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_gradientRadius; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_startColor = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_startColor; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_startX = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_startX; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_startY = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_startY; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_tileMode = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_tileMode; - global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_type = global::EFGetStarted.Droid.Resource.Styleable.GradientColor_android_type; - global::Xamarin.Forms.Platform.Resource.Styleable.ItemsViewRendererTheme = global::EFGetStarted.Droid.Resource.Styleable.ItemsViewRendererTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.ItemsViewRendererTheme_collectionViewStyle = global::EFGetStarted.Droid.Resource.Styleable.ItemsViewRendererTheme_collectionViewStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_android_baselineAligned = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAligned; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_android_gravity = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_android_gravity; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_android_orientation = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_android_orientation; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_android_weightSum = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_android_weightSum; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_divider = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_divider; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_dividerPadding = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_dividerPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_Layout = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_Layout; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild; - global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_showDividers = global::EFGetStarted.Droid.Resource.Styleable.LinearLayoutCompat_showDividers; - global::Xamarin.Forms.Platform.Resource.Styleable.ListPopupWindow = global::EFGetStarted.Droid.Resource.Styleable.ListPopupWindow; - global::Xamarin.Forms.Platform.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset = global::EFGetStarted.Droid.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset; - global::Xamarin.Forms.Platform.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset = global::EFGetStarted.Droid.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_android_insetBottom = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_android_insetBottom; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_android_insetLeft = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_android_insetLeft; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_android_insetRight = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_android_insetRight; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_android_insetTop = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_android_insetTop; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_backgroundTint = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_backgroundTint; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_backgroundTintMode = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_backgroundTintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_cornerRadius = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_cornerRadius; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_icon = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_icon; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_iconGravity = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_iconGravity; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_iconPadding = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_iconPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_iconSize = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_iconSize; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_iconTint = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_iconTint; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_iconTintMode = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_iconTintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_rippleColor = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_rippleColor; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_strokeColor = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_strokeColor; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_strokeWidth = global::EFGetStarted.Droid.Resource.Styleable.MaterialButton_strokeWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialCardView = global::EFGetStarted.Droid.Resource.Styleable.MaterialCardView; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialCardView_strokeColor = global::EFGetStarted.Droid.Resource.Styleable.MaterialCardView_strokeColor; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialCardView_strokeWidth = global::EFGetStarted.Droid.Resource.Styleable.MaterialCardView_strokeWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_chipStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_chipStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_colorAccent = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_colorAccent; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_colorPrimary = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimary; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_colorSecondary = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_colorSecondary; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_editTextStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_editTextStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_scrimBackground = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_scrimBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_tabStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_tabStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2 = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2; - global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textInputStyle = global::EFGetStarted.Droid.Resource.Styleable.MaterialComponentsTheme_textInputStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_checkableBehavior = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_checkableBehavior; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_enabled = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_enabled; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_id = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_id; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_menuCategory = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_menuCategory; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_orderInCategory = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_orderInCategory; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_visible = global::EFGetStarted.Droid.Resource.Styleable.MenuGroup_android_visible; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem = global::EFGetStarted.Droid.Resource.Styleable.MenuItem; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_actionLayout = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_actionLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_actionProviderClass = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_actionProviderClass; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_actionViewClass = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_actionViewClass; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_alphabeticModifiers = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_alphabeticModifiers; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_alphabeticShortcut = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_alphabeticShortcut; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_checkable = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_checkable; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_checked = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_checked; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_enabled = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_enabled; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_icon = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_icon; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_id = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_id; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_menuCategory = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_menuCategory; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_numericShortcut = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_numericShortcut; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_onClick = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_onClick; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_orderInCategory = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_orderInCategory; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_title = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_title; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_titleCondensed = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_titleCondensed; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_visible = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_android_visible; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_contentDescription = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_contentDescription; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_iconTint = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_iconTint; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_iconTintMode = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_iconTintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_numericModifiers = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_numericModifiers; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_showAsAction = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_showAsAction; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_tooltipText = global::EFGetStarted.Droid.Resource.Styleable.MenuItem_tooltipText; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuView = global::EFGetStarted.Droid.Resource.Styleable.MenuView; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_headerBackground = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_headerBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_horizontalDivider = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_horizontalDivider; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_itemBackground = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_itemBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_itemIconDisabledAlpha = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_itemIconDisabledAlpha; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_itemTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_itemTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_verticalDivider = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_verticalDivider; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_windowAnimationStyle = global::EFGetStarted.Droid.Resource.Styleable.MenuView_android_windowAnimationStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_preserveIconSpacing = global::EFGetStarted.Droid.Resource.Styleable.MenuView_preserveIconSpacing; - global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_subMenuArrow = global::EFGetStarted.Droid.Resource.Styleable.MenuView_subMenuArrow; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView = global::EFGetStarted.Droid.Resource.Styleable.NavigationView; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_android_background = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_android_background; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_android_fitsSystemWindows = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_android_fitsSystemWindows; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_android_maxWidth = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_android_maxWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_elevation = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_elevation; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_headerLayout = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_headerLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemBackground = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemHorizontalPadding = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemHorizontalPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemIconPadding = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemIconPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemIconTint = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemIconTint; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemTextColor = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_itemTextColor; - global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_menu = global::EFGetStarted.Droid.Resource.Styleable.NavigationView_menu; - global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindow = global::EFGetStarted.Droid.Resource.Styleable.PopupWindow; - global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindowBackgroundState = global::EFGetStarted.Droid.Resource.Styleable.PopupWindowBackgroundState; - global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor = global::EFGetStarted.Droid.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor; - global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindow_android_popupAnimationStyle = global::EFGetStarted.Droid.Resource.Styleable.PopupWindow_android_popupAnimationStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindow_android_popupBackground = global::EFGetStarted.Droid.Resource.Styleable.PopupWindow_android_popupBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindow_overlapAnchor = global::EFGetStarted.Droid.Resource.Styleable.PopupWindow_overlapAnchor; - global::Xamarin.Forms.Platform.Resource.Styleable.RecycleListView = global::EFGetStarted.Droid.Resource.Styleable.RecycleListView; - global::Xamarin.Forms.Platform.Resource.Styleable.RecycleListView_paddingBottomNoButtons = global::EFGetStarted.Droid.Resource.Styleable.RecycleListView_paddingBottomNoButtons; - global::Xamarin.Forms.Platform.Resource.Styleable.RecycleListView_paddingTopNoTitle = global::EFGetStarted.Droid.Resource.Styleable.RecycleListView_paddingTopNoTitle; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_android_descendantFocusability = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_android_descendantFocusability; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_android_orientation = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_android_orientation; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_fastScrollEnabled = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_fastScrollEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_layoutManager = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_layoutManager; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_reverseLayout = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_reverseLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_spanCount = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_spanCount; - global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_stackFromEnd = global::EFGetStarted.Droid.Resource.Styleable.RecyclerView_stackFromEnd; - global::Xamarin.Forms.Platform.Resource.Styleable.ScrimInsetsFrameLayout = global::EFGetStarted.Droid.Resource.Styleable.ScrimInsetsFrameLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground = global::EFGetStarted.Droid.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground; - global::Xamarin.Forms.Platform.Resource.Styleable.ScrollingViewBehavior_Layout = global::EFGetStarted.Droid.Resource.Styleable.ScrollingViewBehavior_Layout; - global::Xamarin.Forms.Platform.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop = global::EFGetStarted.Droid.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop; - global::Xamarin.Forms.Platform.Resource.Styleable.ScrollViewRendererTheme = global::EFGetStarted.Droid.Resource.Styleable.ScrollViewRendererTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.ScrollViewRendererTheme_scrollViewStyle = global::EFGetStarted.Droid.Resource.Styleable.ScrollViewRendererTheme_scrollViewStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView = global::EFGetStarted.Droid.Resource.Styleable.SearchView; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_android_focusable = global::EFGetStarted.Droid.Resource.Styleable.SearchView_android_focusable; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_android_imeOptions = global::EFGetStarted.Droid.Resource.Styleable.SearchView_android_imeOptions; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_android_inputType = global::EFGetStarted.Droid.Resource.Styleable.SearchView_android_inputType; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_android_maxWidth = global::EFGetStarted.Droid.Resource.Styleable.SearchView_android_maxWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_closeIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_closeIcon; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_commitIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_commitIcon; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_defaultQueryHint = global::EFGetStarted.Droid.Resource.Styleable.SearchView_defaultQueryHint; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_goIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_goIcon; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_iconifiedByDefault = global::EFGetStarted.Droid.Resource.Styleable.SearchView_iconifiedByDefault; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_layout = global::EFGetStarted.Droid.Resource.Styleable.SearchView_layout; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_queryBackground = global::EFGetStarted.Droid.Resource.Styleable.SearchView_queryBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_queryHint = global::EFGetStarted.Droid.Resource.Styleable.SearchView_queryHint; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_searchHintIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_searchHintIcon; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_searchIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_searchIcon; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_submitBackground = global::EFGetStarted.Droid.Resource.Styleable.SearchView_submitBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_suggestionRowLayout = global::EFGetStarted.Droid.Resource.Styleable.SearchView_suggestionRowLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_voiceIcon = global::EFGetStarted.Droid.Resource.Styleable.SearchView_voiceIcon; - global::Xamarin.Forms.Platform.Resource.Styleable.Snackbar = global::EFGetStarted.Droid.Resource.Styleable.Snackbar; - global::Xamarin.Forms.Platform.Resource.Styleable.SnackbarLayout = global::EFGetStarted.Droid.Resource.Styleable.SnackbarLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.SnackbarLayout_android_maxWidth = global::EFGetStarted.Droid.Resource.Styleable.SnackbarLayout_android_maxWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.SnackbarLayout_elevation = global::EFGetStarted.Droid.Resource.Styleable.SnackbarLayout_elevation; - global::Xamarin.Forms.Platform.Resource.Styleable.SnackbarLayout_maxActionInlineWidth = global::EFGetStarted.Droid.Resource.Styleable.SnackbarLayout_maxActionInlineWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.Snackbar_snackbarButtonStyle = global::EFGetStarted.Droid.Resource.Styleable.Snackbar_snackbarButtonStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.Snackbar_snackbarStyle = global::EFGetStarted.Droid.Resource.Styleable.Snackbar_snackbarStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.Spinner = global::EFGetStarted.Droid.Resource.Styleable.Spinner; - global::Xamarin.Forms.Platform.Resource.Styleable.Spinner_android_dropDownWidth = global::EFGetStarted.Droid.Resource.Styleable.Spinner_android_dropDownWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.Spinner_android_entries = global::EFGetStarted.Droid.Resource.Styleable.Spinner_android_entries; - global::Xamarin.Forms.Platform.Resource.Styleable.Spinner_android_popupBackground = global::EFGetStarted.Droid.Resource.Styleable.Spinner_android_popupBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.Spinner_android_prompt = global::EFGetStarted.Droid.Resource.Styleable.Spinner_android_prompt; - global::Xamarin.Forms.Platform.Resource.Styleable.Spinner_popupTheme = global::EFGetStarted.Droid.Resource.Styleable.Spinner_popupTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawableItem = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawableItem; - global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawableItem_android_drawable = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawableItem_android_drawable; - global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_constantSize = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_constantSize; - global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_dither = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_dither; - global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_enterFadeDuration = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_enterFadeDuration; - global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_exitFadeDuration = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_exitFadeDuration; - global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_variablePadding = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_variablePadding; - global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_visible = global::EFGetStarted.Droid.Resource.Styleable.StateListDrawable_android_visible; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_android_textOff = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_android_textOff; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_android_textOn = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_android_textOn; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_android_thumb = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_android_thumb; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_showText = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_showText; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_splitTrack = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_splitTrack; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_switchMinWidth = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_switchMinWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_switchPadding = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_switchPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_switchTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_switchTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_thumbTextPadding = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_thumbTextPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_thumbTint = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_thumbTint; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_thumbTintMode = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_thumbTintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_track = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_track; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_trackTint = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_trackTint; - global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_trackTintMode = global::EFGetStarted.Droid.Resource.Styleable.SwitchCompat_trackTintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.TabItem = global::EFGetStarted.Droid.Resource.Styleable.TabItem; - global::Xamarin.Forms.Platform.Resource.Styleable.TabItem_android_icon = global::EFGetStarted.Droid.Resource.Styleable.TabItem_android_icon; - global::Xamarin.Forms.Platform.Resource.Styleable.TabItem_android_layout = global::EFGetStarted.Droid.Resource.Styleable.TabItem_android_layout; - global::Xamarin.Forms.Platform.Resource.Styleable.TabItem_android_text = global::EFGetStarted.Droid.Resource.Styleable.TabItem_android_text; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout = global::EFGetStarted.Droid.Resource.Styleable.TabLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabBackground = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabBackground; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabContentStart = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabContentStart; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabGravity = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabGravity; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIconTint = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIconTint; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIconTintMode = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIconTintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicator = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicator; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicatorColor = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicatorColor; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicatorFullWidth = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicatorFullWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicatorGravity = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicatorGravity; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicatorHeight = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabIndicatorHeight; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabInlineLabel = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabInlineLabel; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabMaxWidth = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabMaxWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabMinWidth = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabMinWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabMode = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabMode; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabPadding = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabPadding; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabPaddingBottom = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabPaddingBottom; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabPaddingEnd = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabPaddingEnd; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabPaddingStart = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabPaddingStart; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabPaddingTop = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabPaddingTop; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabRippleColor = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabRippleColor; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabSelectedTextColor = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabSelectedTextColor; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabTextColor = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabTextColor; - global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabUnboundedRipple = global::EFGetStarted.Droid.Resource.Styleable.TabLayout_tabUnboundedRipple; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_fontFamily = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_fontFamily; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_shadowColor = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_shadowColor; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_shadowDx = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_shadowDx; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_shadowDy = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_shadowDy; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_shadowRadius = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_shadowRadius; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_textColor = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_textColor; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_textColorHint = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_textColorHint; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_textColorLink = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_textColorLink; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_textSize = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_textSize; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_textStyle = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_textStyle; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_typeface = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_android_typeface; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_fontFamily = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_fontFamily; - global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_textAllCaps = global::EFGetStarted.Droid.Resource.Styleable.TextAppearance_textAllCaps; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_android_hint = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_android_hint; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_android_textColorHint = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_android_textColorHint; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxBackgroundColor = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxBackgroundColor; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxBackgroundMode = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxBackgroundMode; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxStrokeColor = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxStrokeColor; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxStrokeWidth = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_boxStrokeWidth; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_counterEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_counterEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_counterMaxLength = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_counterMaxLength; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_counterTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_counterTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_errorEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_errorEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_errorTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_errorTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_helperText = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_helperText; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_helperTextEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_helperTextEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_helperTextTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_helperTextTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_hintAnimationEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_hintAnimationEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_hintEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_hintEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_hintTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_hintTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_passwordToggleContentDescription = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_passwordToggleContentDescription; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_passwordToggleDrawable = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_passwordToggleDrawable; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_passwordToggleEnabled = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_passwordToggleEnabled; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_passwordToggleTint = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_passwordToggleTint; - global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_passwordToggleTintMode = global::EFGetStarted.Droid.Resource.Styleable.TextInputLayout_passwordToggleTintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.ThemeEnforcement = global::EFGetStarted.Droid.Resource.Styleable.ThemeEnforcement; - global::Xamarin.Forms.Platform.Resource.Styleable.ThemeEnforcement_android_textAppearance = global::EFGetStarted.Droid.Resource.Styleable.ThemeEnforcement_android_textAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme = global::EFGetStarted.Droid.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.ThemeEnforcement_enforceTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.ThemeEnforcement_enforceTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar = global::EFGetStarted.Droid.Resource.Styleable.Toolbar; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_android_gravity = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_android_gravity; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_android_minHeight = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_android_minHeight; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_buttonGravity = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_buttonGravity; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_collapseContentDescription = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_collapseContentDescription; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_collapseIcon = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_collapseIcon; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetEnd = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetEnd; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetEndWithActions = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetEndWithActions; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetLeft = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetLeft; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetRight = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetRight; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetStart = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetStart; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetStartWithNavigation = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_contentInsetStartWithNavigation; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_logo = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_logo; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_logoDescription = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_logoDescription; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_maxButtonHeight = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_maxButtonHeight; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_navigationContentDescription = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_navigationContentDescription; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_navigationIcon = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_navigationIcon; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_popupTheme = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_popupTheme; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_subtitle = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_subtitle; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_subtitleTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_subtitleTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_subtitleTextColor = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_subtitleTextColor; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_title = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_title; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMargin = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMargin; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMarginBottom = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMarginBottom; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMarginEnd = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMarginEnd; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMargins = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMargins; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMarginStart = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMarginStart; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMarginTop = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleMarginTop; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleTextAppearance = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleTextAppearance; - global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleTextColor = global::EFGetStarted.Droid.Resource.Styleable.Toolbar_titleTextColor; - global::Xamarin.Forms.Platform.Resource.Styleable.View = global::EFGetStarted.Droid.Resource.Styleable.View; - global::Xamarin.Forms.Platform.Resource.Styleable.ViewBackgroundHelper = global::EFGetStarted.Droid.Resource.Styleable.ViewBackgroundHelper; - global::Xamarin.Forms.Platform.Resource.Styleable.ViewBackgroundHelper_android_background = global::EFGetStarted.Droid.Resource.Styleable.ViewBackgroundHelper_android_background; - global::Xamarin.Forms.Platform.Resource.Styleable.ViewBackgroundHelper_backgroundTint = global::EFGetStarted.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTint; - global::Xamarin.Forms.Platform.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode = global::EFGetStarted.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode; - global::Xamarin.Forms.Platform.Resource.Styleable.ViewStubCompat = global::EFGetStarted.Droid.Resource.Styleable.ViewStubCompat; - global::Xamarin.Forms.Platform.Resource.Styleable.ViewStubCompat_android_id = global::EFGetStarted.Droid.Resource.Styleable.ViewStubCompat_android_id; - global::Xamarin.Forms.Platform.Resource.Styleable.ViewStubCompat_android_inflatedId = global::EFGetStarted.Droid.Resource.Styleable.ViewStubCompat_android_inflatedId; - global::Xamarin.Forms.Platform.Resource.Styleable.ViewStubCompat_android_layout = global::EFGetStarted.Droid.Resource.Styleable.ViewStubCompat_android_layout; - global::Xamarin.Forms.Platform.Resource.Styleable.View_android_focusable = global::EFGetStarted.Droid.Resource.Styleable.View_android_focusable; - global::Xamarin.Forms.Platform.Resource.Styleable.View_android_theme = global::EFGetStarted.Droid.Resource.Styleable.View_android_theme; - global::Xamarin.Forms.Platform.Resource.Styleable.View_paddingEnd = global::EFGetStarted.Droid.Resource.Styleable.View_paddingEnd; - global::Xamarin.Forms.Platform.Resource.Styleable.View_paddingStart = global::EFGetStarted.Droid.Resource.Styleable.View_paddingStart; - global::Xamarin.Forms.Platform.Resource.Styleable.View_theme = global::EFGetStarted.Droid.Resource.Styleable.View_theme; - } - - public partial class Animation - { - - // aapt resource value: 0x7F010000 - public const int abc_fade_in = 2130771968; - - // aapt resource value: 0x7F010001 - public const int abc_fade_out = 2130771969; - - // aapt resource value: 0x7F010002 - public const int abc_grow_fade_in_from_bottom = 2130771970; - - // aapt resource value: 0x7F010003 - public const int abc_popup_enter = 2130771971; - - // aapt resource value: 0x7F010004 - public const int abc_popup_exit = 2130771972; - - // aapt resource value: 0x7F010005 - public const int abc_shrink_fade_out_from_bottom = 2130771973; - - // aapt resource value: 0x7F010006 - public const int abc_slide_in_bottom = 2130771974; - - // aapt resource value: 0x7F010007 - public const int abc_slide_in_top = 2130771975; - - // aapt resource value: 0x7F010008 - public const int abc_slide_out_bottom = 2130771976; - - // aapt resource value: 0x7F010009 - public const int abc_slide_out_top = 2130771977; - - // aapt resource value: 0x7F01000A - public const int abc_tooltip_enter = 2130771978; - - // aapt resource value: 0x7F01000B - public const int abc_tooltip_exit = 2130771979; - - // aapt resource value: 0x7F01000C - public const int design_bottom_sheet_slide_in = 2130771980; - - // aapt resource value: 0x7F01000D - public const int design_bottom_sheet_slide_out = 2130771981; - - // aapt resource value: 0x7F01000E - public const int design_snackbar_in = 2130771982; - - // aapt resource value: 0x7F01000F - public const int design_snackbar_out = 2130771983; - - // aapt resource value: 0x7F010010 - public const int EnterFromLeft = 2130771984; - - // aapt resource value: 0x7F010011 - public const int EnterFromRight = 2130771985; - - // aapt resource value: 0x7F010012 - public const int ExitToLeft = 2130771986; - - // aapt resource value: 0x7F010013 - public const int ExitToRight = 2130771987; - - static Animation() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Animation() - { - } - } - - public partial class Animator - { - - // aapt resource value: 0x7F020000 - public const int design_appbar_state_list_animator = 2130837504; - - // aapt resource value: 0x7F020001 - public const int design_fab_hide_motion_spec = 2130837505; - - // aapt resource value: 0x7F020002 - public const int design_fab_show_motion_spec = 2130837506; - - // aapt resource value: 0x7F020003 - public const int mtrl_btn_state_list_anim = 2130837507; - - // aapt resource value: 0x7F020004 - public const int mtrl_btn_unelevated_state_list_anim = 2130837508; - - // aapt resource value: 0x7F020005 - public const int mtrl_chip_state_list_anim = 2130837509; - - // aapt resource value: 0x7F020006 - public const int mtrl_fab_hide_motion_spec = 2130837510; - - // aapt resource value: 0x7F020007 - public const int mtrl_fab_show_motion_spec = 2130837511; - - // aapt resource value: 0x7F020008 - public const int mtrl_fab_transformation_sheet_collapse_spec = 2130837512; - - // aapt resource value: 0x7F020009 - public const int mtrl_fab_transformation_sheet_expand_spec = 2130837513; - - static Animator() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Animator() - { - } - } - - public partial class Attribute - { - - // aapt resource value: 0x7F030000 - public const int actionBarDivider = 2130903040; - - // aapt resource value: 0x7F030001 - public const int actionBarItemBackground = 2130903041; - - // aapt resource value: 0x7F030002 - public const int actionBarPopupTheme = 2130903042; - - // aapt resource value: 0x7F030003 - public const int actionBarSize = 2130903043; - - // aapt resource value: 0x7F030004 - public const int actionBarSplitStyle = 2130903044; - - // aapt resource value: 0x7F030005 - public const int actionBarStyle = 2130903045; - - // aapt resource value: 0x7F030006 - public const int actionBarTabBarStyle = 2130903046; - - // aapt resource value: 0x7F030007 - public const int actionBarTabStyle = 2130903047; - - // aapt resource value: 0x7F030008 - public const int actionBarTabTextStyle = 2130903048; - - // aapt resource value: 0x7F030009 - public const int actionBarTheme = 2130903049; - - // aapt resource value: 0x7F03000A - public const int actionBarWidgetTheme = 2130903050; - - // aapt resource value: 0x7F03000B - public const int actionButtonStyle = 2130903051; - - // aapt resource value: 0x7F03000C - public const int actionDropDownStyle = 2130903052; - - // aapt resource value: 0x7F03000D - public const int actionLayout = 2130903053; - - // aapt resource value: 0x7F03000E - public const int actionMenuTextAppearance = 2130903054; - - // aapt resource value: 0x7F03000F - public const int actionMenuTextColor = 2130903055; - - // aapt resource value: 0x7F030010 - public const int actionModeBackground = 2130903056; - - // aapt resource value: 0x7F030011 - public const int actionModeCloseButtonStyle = 2130903057; - - // aapt resource value: 0x7F030012 - public const int actionModeCloseDrawable = 2130903058; - - // aapt resource value: 0x7F030013 - public const int actionModeCopyDrawable = 2130903059; - - // aapt resource value: 0x7F030014 - public const int actionModeCutDrawable = 2130903060; - - // aapt resource value: 0x7F030015 - public const int actionModeFindDrawable = 2130903061; - - // aapt resource value: 0x7F030016 - public const int actionModePasteDrawable = 2130903062; - - // aapt resource value: 0x7F030017 - public const int actionModePopupWindowStyle = 2130903063; - - // aapt resource value: 0x7F030018 - public const int actionModeSelectAllDrawable = 2130903064; - - // aapt resource value: 0x7F030019 - public const int actionModeShareDrawable = 2130903065; - - // aapt resource value: 0x7F03001A - public const int actionModeSplitBackground = 2130903066; - - // aapt resource value: 0x7F03001B - public const int actionModeStyle = 2130903067; - - // aapt resource value: 0x7F03001C - public const int actionModeWebSearchDrawable = 2130903068; - - // aapt resource value: 0x7F03001D - public const int actionOverflowButtonStyle = 2130903069; - - // aapt resource value: 0x7F03001E - public const int actionOverflowMenuStyle = 2130903070; - - // aapt resource value: 0x7F03001F - public const int actionProviderClass = 2130903071; - - // aapt resource value: 0x7F030020 - public const int actionViewClass = 2130903072; - - // aapt resource value: 0x7F030021 - public const int activityChooserViewStyle = 2130903073; - - // aapt resource value: 0x7F030022 - public const int alertDialogButtonGroupStyle = 2130903074; - - // aapt resource value: 0x7F030023 - public const int alertDialogCenterButtons = 2130903075; - - // aapt resource value: 0x7F030024 - public const int alertDialogStyle = 2130903076; - - // aapt resource value: 0x7F030025 - public const int alertDialogTheme = 2130903077; - - // aapt resource value: 0x7F030026 - public const int allowStacking = 2130903078; - - // aapt resource value: 0x7F030027 - public const int alpha = 2130903079; - - // aapt resource value: 0x7F030028 - public const int alphabeticModifiers = 2130903080; - - // aapt resource value: 0x7F030029 - public const int arrowHeadLength = 2130903081; - - // aapt resource value: 0x7F03002A - public const int arrowShaftLength = 2130903082; - - // aapt resource value: 0x7F03002B - public const int autoCompleteTextViewStyle = 2130903083; - - // aapt resource value: 0x7F03002C - public const int autoSizeMaxTextSize = 2130903084; - - // aapt resource value: 0x7F03002D - public const int autoSizeMinTextSize = 2130903085; - - // aapt resource value: 0x7F03002E - public const int autoSizePresetSizes = 2130903086; - - // aapt resource value: 0x7F03002F - public const int autoSizeStepGranularity = 2130903087; - - // aapt resource value: 0x7F030030 - public const int autoSizeTextType = 2130903088; - - // aapt resource value: 0x7F030031 - public const int background = 2130903089; - - // aapt resource value: 0x7F030032 - public const int backgroundSplit = 2130903090; - - // aapt resource value: 0x7F030033 - public const int backgroundStacked = 2130903091; - - // aapt resource value: 0x7F030034 - public const int backgroundTint = 2130903092; - - // aapt resource value: 0x7F030035 - public const int backgroundTintMode = 2130903093; - - // aapt resource value: 0x7F030036 - public const int barLength = 2130903094; - - // aapt resource value: 0x7F030037 - public const int behavior_autoHide = 2130903095; - - // aapt resource value: 0x7F030038 - public const int behavior_fitToContents = 2130903096; - - // aapt resource value: 0x7F030039 - public const int behavior_hideable = 2130903097; - - // aapt resource value: 0x7F03003A - public const int behavior_overlapTop = 2130903098; - - // aapt resource value: 0x7F03003B - public const int behavior_peekHeight = 2130903099; - - // aapt resource value: 0x7F03003C - public const int behavior_skipCollapsed = 2130903100; - - // aapt resource value: 0x7F03003E - public const int borderlessButtonStyle = 2130903102; - - // aapt resource value: 0x7F03003D - public const int borderWidth = 2130903101; - - // aapt resource value: 0x7F03003F - public const int bottomAppBarStyle = 2130903103; - - // aapt resource value: 0x7F030040 - public const int bottomNavigationStyle = 2130903104; - - // aapt resource value: 0x7F030041 - public const int bottomSheetDialogTheme = 2130903105; - - // aapt resource value: 0x7F030042 - public const int bottomSheetStyle = 2130903106; - - // aapt resource value: 0x7F030043 - public const int boxBackgroundColor = 2130903107; - - // aapt resource value: 0x7F030044 - public const int boxBackgroundMode = 2130903108; - - // aapt resource value: 0x7F030045 - public const int boxCollapsedPaddingTop = 2130903109; - - // aapt resource value: 0x7F030046 - public const int boxCornerRadiusBottomEnd = 2130903110; - - // aapt resource value: 0x7F030047 - public const int boxCornerRadiusBottomStart = 2130903111; - - // aapt resource value: 0x7F030048 - public const int boxCornerRadiusTopEnd = 2130903112; - - // aapt resource value: 0x7F030049 - public const int boxCornerRadiusTopStart = 2130903113; - - // aapt resource value: 0x7F03004A - public const int boxStrokeColor = 2130903114; - - // aapt resource value: 0x7F03004B - public const int boxStrokeWidth = 2130903115; - - // aapt resource value: 0x7F03004C - public const int buttonBarButtonStyle = 2130903116; - - // aapt resource value: 0x7F03004D - public const int buttonBarNegativeButtonStyle = 2130903117; - - // aapt resource value: 0x7F03004E - public const int buttonBarNeutralButtonStyle = 2130903118; - - // aapt resource value: 0x7F03004F - public const int buttonBarPositiveButtonStyle = 2130903119; - - // aapt resource value: 0x7F030050 - public const int buttonBarStyle = 2130903120; - - // aapt resource value: 0x7F030051 - public const int buttonGravity = 2130903121; - - // aapt resource value: 0x7F030052 - public const int buttonIconDimen = 2130903122; - - // aapt resource value: 0x7F030053 - public const int buttonPanelSideLayout = 2130903123; - - // aapt resource value: 0x7F030054 - public const int buttonStyle = 2130903124; - - // aapt resource value: 0x7F030055 - public const int buttonStyleSmall = 2130903125; - - // aapt resource value: 0x7F030056 - public const int buttonTint = 2130903126; - - // aapt resource value: 0x7F030057 - public const int buttonTintMode = 2130903127; - - // aapt resource value: 0x7F030058 - public const int cardBackgroundColor = 2130903128; - - // aapt resource value: 0x7F030059 - public const int cardCornerRadius = 2130903129; - - // aapt resource value: 0x7F03005A - public const int cardElevation = 2130903130; - - // aapt resource value: 0x7F03005B - public const int cardMaxElevation = 2130903131; - - // aapt resource value: 0x7F03005C - public const int cardPreventCornerOverlap = 2130903132; - - // aapt resource value: 0x7F03005D - public const int cardUseCompatPadding = 2130903133; - - // aapt resource value: 0x7F03005E - public const int cardViewStyle = 2130903134; - - // aapt resource value: 0x7F03005F - public const int checkboxStyle = 2130903135; - - // aapt resource value: 0x7F030060 - public const int checkedChip = 2130903136; - - // aapt resource value: 0x7F030061 - public const int checkedIcon = 2130903137; - - // aapt resource value: 0x7F030062 - public const int checkedIconEnabled = 2130903138; - - // aapt resource value: 0x7F030063 - public const int checkedIconVisible = 2130903139; - - // aapt resource value: 0x7F030064 - public const int checkedTextViewStyle = 2130903140; - - // aapt resource value: 0x7F030065 - public const int chipBackgroundColor = 2130903141; - - // aapt resource value: 0x7F030066 - public const int chipCornerRadius = 2130903142; - - // aapt resource value: 0x7F030067 - public const int chipEndPadding = 2130903143; - - // aapt resource value: 0x7F030068 - public const int chipGroupStyle = 2130903144; - - // aapt resource value: 0x7F030069 - public const int chipIcon = 2130903145; - - // aapt resource value: 0x7F03006A - public const int chipIconEnabled = 2130903146; - - // aapt resource value: 0x7F03006B - public const int chipIconSize = 2130903147; - - // aapt resource value: 0x7F03006C - public const int chipIconTint = 2130903148; - - // aapt resource value: 0x7F03006D - public const int chipIconVisible = 2130903149; - - // aapt resource value: 0x7F03006E - public const int chipMinHeight = 2130903150; - - // aapt resource value: 0x7F03006F - public const int chipSpacing = 2130903151; - - // aapt resource value: 0x7F030070 - public const int chipSpacingHorizontal = 2130903152; - - // aapt resource value: 0x7F030071 - public const int chipSpacingVertical = 2130903153; - - // aapt resource value: 0x7F030072 - public const int chipStandaloneStyle = 2130903154; - - // aapt resource value: 0x7F030073 - public const int chipStartPadding = 2130903155; - - // aapt resource value: 0x7F030074 - public const int chipStrokeColor = 2130903156; - - // aapt resource value: 0x7F030075 - public const int chipStrokeWidth = 2130903157; - - // aapt resource value: 0x7F030076 - public const int chipStyle = 2130903158; - - // aapt resource value: 0x7F030077 - public const int closeIcon = 2130903159; - - // aapt resource value: 0x7F030078 - public const int closeIconEnabled = 2130903160; - - // aapt resource value: 0x7F030079 - public const int closeIconEndPadding = 2130903161; - - // aapt resource value: 0x7F03007A - public const int closeIconSize = 2130903162; - - // aapt resource value: 0x7F03007B - public const int closeIconStartPadding = 2130903163; - - // aapt resource value: 0x7F03007C - public const int closeIconTint = 2130903164; - - // aapt resource value: 0x7F03007D - public const int closeIconVisible = 2130903165; - - // aapt resource value: 0x7F03007E - public const int closeItemLayout = 2130903166; - - // aapt resource value: 0x7F03007F - public const int collapseContentDescription = 2130903167; - - // aapt resource value: 0x7F030081 - public const int collapsedTitleGravity = 2130903169; - - // aapt resource value: 0x7F030082 - public const int collapsedTitleTextAppearance = 2130903170; - - // aapt resource value: 0x7F030080 - public const int collapseIcon = 2130903168; - - // aapt resource value: 0x7F030083 - public const int collectionViewStyle = 2130903171; - - // aapt resource value: 0x7F030084 - public const int color = 2130903172; - - // aapt resource value: 0x7F030085 - public const int colorAccent = 2130903173; - - // aapt resource value: 0x7F030086 - public const int colorBackgroundFloating = 2130903174; - - // aapt resource value: 0x7F030087 - public const int colorButtonNormal = 2130903175; - - // aapt resource value: 0x7F030088 - public const int colorControlActivated = 2130903176; - - // aapt resource value: 0x7F030089 - public const int colorControlHighlight = 2130903177; - - // aapt resource value: 0x7F03008A - public const int colorControlNormal = 2130903178; - - // aapt resource value: 0x7F03008B - public const int colorError = 2130903179; - - // aapt resource value: 0x7F03008C - public const int colorPrimary = 2130903180; - - // aapt resource value: 0x7F03008D - public const int colorPrimaryDark = 2130903181; - - // aapt resource value: 0x7F03008E - public const int colorSecondary = 2130903182; - - // aapt resource value: 0x7F03008F - public const int colorSwitchThumbNormal = 2130903183; - - // aapt resource value: 0x7F030090 - public const int commitIcon = 2130903184; - - // aapt resource value: 0x7F030091 - public const int contentDescription = 2130903185; - - // aapt resource value: 0x7F030092 - public const int contentInsetEnd = 2130903186; - - // aapt resource value: 0x7F030093 - public const int contentInsetEndWithActions = 2130903187; - - // aapt resource value: 0x7F030094 - public const int contentInsetLeft = 2130903188; - - // aapt resource value: 0x7F030095 - public const int contentInsetRight = 2130903189; - - // aapt resource value: 0x7F030096 - public const int contentInsetStart = 2130903190; - - // aapt resource value: 0x7F030097 - public const int contentInsetStartWithNavigation = 2130903191; - - // aapt resource value: 0x7F030098 - public const int contentPadding = 2130903192; - - // aapt resource value: 0x7F030099 - public const int contentPaddingBottom = 2130903193; - - // aapt resource value: 0x7F03009A - public const int contentPaddingLeft = 2130903194; - - // aapt resource value: 0x7F03009B - public const int contentPaddingRight = 2130903195; - - // aapt resource value: 0x7F03009C - public const int contentPaddingTop = 2130903196; - - // aapt resource value: 0x7F03009D - public const int contentScrim = 2130903197; - - // aapt resource value: 0x7F03009E - public const int controlBackground = 2130903198; - - // aapt resource value: 0x7F03009F - public const int coordinatorLayoutStyle = 2130903199; - - // aapt resource value: 0x7F0300A0 - public const int cornerRadius = 2130903200; - - // aapt resource value: 0x7F0300A1 - public const int counterEnabled = 2130903201; - - // aapt resource value: 0x7F0300A2 - public const int counterMaxLength = 2130903202; - - // aapt resource value: 0x7F0300A3 - public const int counterOverflowTextAppearance = 2130903203; - - // aapt resource value: 0x7F0300A4 - public const int counterTextAppearance = 2130903204; - - // aapt resource value: 0x7F0300A5 - public const int customNavigationLayout = 2130903205; - - // aapt resource value: 0x7F0300A6 - public const int defaultQueryHint = 2130903206; - - // aapt resource value: 0x7F0300A7 - public const int dialogCornerRadius = 2130903207; - - // aapt resource value: 0x7F0300A8 - public const int dialogPreferredPadding = 2130903208; - - // aapt resource value: 0x7F0300A9 - public const int dialogTheme = 2130903209; - - // aapt resource value: 0x7F0300AA - public const int displayOptions = 2130903210; - - // aapt resource value: 0x7F0300AB - public const int divider = 2130903211; - - // aapt resource value: 0x7F0300AC - public const int dividerHorizontal = 2130903212; - - // aapt resource value: 0x7F0300AD - public const int dividerPadding = 2130903213; - - // aapt resource value: 0x7F0300AE - public const int dividerVertical = 2130903214; - - // aapt resource value: 0x7F0300AF - public const int drawableSize = 2130903215; - - // aapt resource value: 0x7F0300B0 - public const int drawerArrowStyle = 2130903216; - - // aapt resource value: 0x7F0300B2 - public const int dropdownListPreferredItemHeight = 2130903218; - - // aapt resource value: 0x7F0300B1 - public const int dropDownListViewStyle = 2130903217; - - // aapt resource value: 0x7F0300B3 - public const int editTextBackground = 2130903219; - - // aapt resource value: 0x7F0300B4 - public const int editTextColor = 2130903220; - - // aapt resource value: 0x7F0300B5 - public const int editTextStyle = 2130903221; - - // aapt resource value: 0x7F0300B6 - public const int elevation = 2130903222; - - // aapt resource value: 0x7F0300B7 - public const int enforceMaterialTheme = 2130903223; - - // aapt resource value: 0x7F0300B8 - public const int enforceTextAppearance = 2130903224; - - // aapt resource value: 0x7F0300B9 - public const int errorEnabled = 2130903225; - - // aapt resource value: 0x7F0300BA - public const int errorTextAppearance = 2130903226; - - // aapt resource value: 0x7F0300BB - public const int expandActivityOverflowButtonDrawable = 2130903227; - - // aapt resource value: 0x7F0300BC - public const int expanded = 2130903228; - - // aapt resource value: 0x7F0300BD - public const int expandedTitleGravity = 2130903229; - - // aapt resource value: 0x7F0300BE - public const int expandedTitleMargin = 2130903230; - - // aapt resource value: 0x7F0300BF - public const int expandedTitleMarginBottom = 2130903231; - - // aapt resource value: 0x7F0300C0 - public const int expandedTitleMarginEnd = 2130903232; - - // aapt resource value: 0x7F0300C1 - public const int expandedTitleMarginStart = 2130903233; - - // aapt resource value: 0x7F0300C2 - public const int expandedTitleMarginTop = 2130903234; - - // aapt resource value: 0x7F0300C3 - public const int expandedTitleTextAppearance = 2130903235; - - // aapt resource value: 0x7F0300C4 - public const int fabAlignmentMode = 2130903236; - - // aapt resource value: 0x7F0300C5 - public const int fabCradleMargin = 2130903237; - - // aapt resource value: 0x7F0300C6 - public const int fabCradleRoundedCornerRadius = 2130903238; - - // aapt resource value: 0x7F0300C7 - public const int fabCradleVerticalOffset = 2130903239; - - // aapt resource value: 0x7F0300C8 - public const int fabCustomSize = 2130903240; - - // aapt resource value: 0x7F0300C9 - public const int fabSize = 2130903241; - - // aapt resource value: 0x7F0300CA - public const int fastScrollEnabled = 2130903242; - - // aapt resource value: 0x7F0300CB - public const int fastScrollHorizontalThumbDrawable = 2130903243; - - // aapt resource value: 0x7F0300CC - public const int fastScrollHorizontalTrackDrawable = 2130903244; - - // aapt resource value: 0x7F0300CD - public const int fastScrollVerticalThumbDrawable = 2130903245; - - // aapt resource value: 0x7F0300CE - public const int fastScrollVerticalTrackDrawable = 2130903246; - - // aapt resource value: 0x7F0300CF - public const int firstBaselineToTopHeight = 2130903247; - - // aapt resource value: 0x7F0300D0 - public const int floatingActionButtonStyle = 2130903248; - - // aapt resource value: 0x7F0300D1 - public const int font = 2130903249; - - // aapt resource value: 0x7F0300D2 - public const int fontFamily = 2130903250; - - // aapt resource value: 0x7F0300D3 - public const int fontProviderAuthority = 2130903251; - - // aapt resource value: 0x7F0300D4 - public const int fontProviderCerts = 2130903252; - - // aapt resource value: 0x7F0300D5 - public const int fontProviderFetchStrategy = 2130903253; - - // aapt resource value: 0x7F0300D6 - public const int fontProviderFetchTimeout = 2130903254; - - // aapt resource value: 0x7F0300D7 - public const int fontProviderPackage = 2130903255; - - // aapt resource value: 0x7F0300D8 - public const int fontProviderQuery = 2130903256; - - // aapt resource value: 0x7F0300D9 - public const int fontStyle = 2130903257; - - // aapt resource value: 0x7F0300DA - public const int fontVariationSettings = 2130903258; - - // aapt resource value: 0x7F0300DB - public const int fontWeight = 2130903259; - - // aapt resource value: 0x7F0300DC - public const int foregroundInsidePadding = 2130903260; - - // aapt resource value: 0x7F0300DD - public const int gapBetweenBars = 2130903261; - - // aapt resource value: 0x7F0300DE - public const int goIcon = 2130903262; - - // aapt resource value: 0x7F0300DF - public const int headerLayout = 2130903263; - - // aapt resource value: 0x7F0300E0 - public const int height = 2130903264; - - // aapt resource value: 0x7F0300E1 - public const int helperText = 2130903265; - - // aapt resource value: 0x7F0300E2 - public const int helperTextEnabled = 2130903266; - - // aapt resource value: 0x7F0300E3 - public const int helperTextTextAppearance = 2130903267; - - // aapt resource value: 0x7F0300E4 - public const int hideMotionSpec = 2130903268; - - // aapt resource value: 0x7F0300E5 - public const int hideOnContentScroll = 2130903269; - - // aapt resource value: 0x7F0300E6 - public const int hideOnScroll = 2130903270; - - // aapt resource value: 0x7F0300E7 - public const int hintAnimationEnabled = 2130903271; - - // aapt resource value: 0x7F0300E8 - public const int hintEnabled = 2130903272; - - // aapt resource value: 0x7F0300E9 - public const int hintTextAppearance = 2130903273; - - // aapt resource value: 0x7F0300EA - public const int homeAsUpIndicator = 2130903274; - - // aapt resource value: 0x7F0300EB - public const int homeLayout = 2130903275; - - // aapt resource value: 0x7F0300EC - public const int hoveredFocusedTranslationZ = 2130903276; - - // aapt resource value: 0x7F0300ED - public const int icon = 2130903277; - - // aapt resource value: 0x7F0300EE - public const int iconEndPadding = 2130903278; - - // aapt resource value: 0x7F0300EF - public const int iconGravity = 2130903279; - - // aapt resource value: 0x7F0300F5 - public const int iconifiedByDefault = 2130903285; - - // aapt resource value: 0x7F0300F0 - public const int iconPadding = 2130903280; - - // aapt resource value: 0x7F0300F1 - public const int iconSize = 2130903281; - - // aapt resource value: 0x7F0300F2 - public const int iconStartPadding = 2130903282; - - // aapt resource value: 0x7F0300F3 - public const int iconTint = 2130903283; - - // aapt resource value: 0x7F0300F4 - public const int iconTintMode = 2130903284; - - // aapt resource value: 0x7F0300F6 - public const int imageButtonStyle = 2130903286; - - // aapt resource value: 0x7F0300F7 - public const int indeterminateProgressStyle = 2130903287; - - // aapt resource value: 0x7F0300F8 - public const int initialActivityCount = 2130903288; - - // aapt resource value: 0x7F0300F9 - public const int insetForeground = 2130903289; - - // aapt resource value: 0x7F0300FA - public const int isLightTheme = 2130903290; - - // aapt resource value: 0x7F0300FB - public const int itemBackground = 2130903291; - - // aapt resource value: 0x7F0300FC - public const int itemHorizontalPadding = 2130903292; - - // aapt resource value: 0x7F0300FD - public const int itemHorizontalTranslationEnabled = 2130903293; - - // aapt resource value: 0x7F0300FE - public const int itemIconPadding = 2130903294; - - // aapt resource value: 0x7F0300FF - public const int itemIconSize = 2130903295; - - // aapt resource value: 0x7F030100 - public const int itemIconTint = 2130903296; - - // aapt resource value: 0x7F030101 - public const int itemPadding = 2130903297; - - // aapt resource value: 0x7F030102 - public const int itemSpacing = 2130903298; - - // aapt resource value: 0x7F030103 - public const int itemTextAppearance = 2130903299; - - // aapt resource value: 0x7F030104 - public const int itemTextAppearanceActive = 2130903300; - - // aapt resource value: 0x7F030105 - public const int itemTextAppearanceInactive = 2130903301; - - // aapt resource value: 0x7F030106 - public const int itemTextColor = 2130903302; - - // aapt resource value: 0x7F030107 - public const int keylines = 2130903303; - - // aapt resource value: 0x7F030108 - public const int labelVisibilityMode = 2130903304; - - // aapt resource value: 0x7F030109 - public const int lastBaselineToBottomHeight = 2130903305; - - // aapt resource value: 0x7F03010A - public const int layout = 2130903306; - - // aapt resource value: 0x7F03010B - public const int layoutManager = 2130903307; - - // aapt resource value: 0x7F03010C - public const int layout_anchor = 2130903308; - - // aapt resource value: 0x7F03010D - public const int layout_anchorGravity = 2130903309; - - // aapt resource value: 0x7F03010E - public const int layout_behavior = 2130903310; - - // aapt resource value: 0x7F03010F - public const int layout_collapseMode = 2130903311; - - // aapt resource value: 0x7F030110 - public const int layout_collapseParallaxMultiplier = 2130903312; - - // aapt resource value: 0x7F030111 - public const int layout_dodgeInsetEdges = 2130903313; - - // aapt resource value: 0x7F030112 - public const int layout_insetEdge = 2130903314; - - // aapt resource value: 0x7F030113 - public const int layout_keyline = 2130903315; - - // aapt resource value: 0x7F030114 - public const int layout_scrollFlags = 2130903316; - - // aapt resource value: 0x7F030115 - public const int layout_scrollInterpolator = 2130903317; - - // aapt resource value: 0x7F030116 - public const int liftOnScroll = 2130903318; - - // aapt resource value: 0x7F030117 - public const int lineHeight = 2130903319; - - // aapt resource value: 0x7F030118 - public const int lineSpacing = 2130903320; - - // aapt resource value: 0x7F030119 - public const int listChoiceBackgroundIndicator = 2130903321; - - // aapt resource value: 0x7F03011A - public const int listDividerAlertDialog = 2130903322; - - // aapt resource value: 0x7F03011B - public const int listItemLayout = 2130903323; - - // aapt resource value: 0x7F03011C - public const int listLayout = 2130903324; - - // aapt resource value: 0x7F03011D - public const int listMenuViewStyle = 2130903325; - - // aapt resource value: 0x7F03011E - public const int listPopupWindowStyle = 2130903326; - - // aapt resource value: 0x7F03011F - public const int listPreferredItemHeight = 2130903327; - - // aapt resource value: 0x7F030120 - public const int listPreferredItemHeightLarge = 2130903328; - - // aapt resource value: 0x7F030121 - public const int listPreferredItemHeightSmall = 2130903329; - - // aapt resource value: 0x7F030122 - public const int listPreferredItemPaddingLeft = 2130903330; - - // aapt resource value: 0x7F030123 - public const int listPreferredItemPaddingRight = 2130903331; - - // aapt resource value: 0x7F030124 - public const int logo = 2130903332; - - // aapt resource value: 0x7F030125 - public const int logoDescription = 2130903333; - - // aapt resource value: 0x7F030126 - public const int materialButtonStyle = 2130903334; - - // aapt resource value: 0x7F030127 - public const int materialCardViewStyle = 2130903335; - - // aapt resource value: 0x7F030128 - public const int maxActionInlineWidth = 2130903336; - - // aapt resource value: 0x7F030129 - public const int maxButtonHeight = 2130903337; - - // aapt resource value: 0x7F03012A - public const int maxImageSize = 2130903338; - - // aapt resource value: 0x7F03012B - public const int measureWithLargestChild = 2130903339; - - // aapt resource value: 0x7F03012C - public const int menu = 2130903340; - - // aapt resource value: 0x7F03012D - public const int multiChoiceItemLayout = 2130903341; - - // aapt resource value: 0x7F03012E - public const int navigationContentDescription = 2130903342; - - // aapt resource value: 0x7F03012F - public const int navigationIcon = 2130903343; - - // aapt resource value: 0x7F030130 - public const int navigationMode = 2130903344; - - // aapt resource value: 0x7F030131 - public const int navigationViewStyle = 2130903345; - - // aapt resource value: 0x7F030132 - public const int numericModifiers = 2130903346; - - // aapt resource value: 0x7F030133 - public const int overlapAnchor = 2130903347; - - // aapt resource value: 0x7F030134 - public const int paddingBottomNoButtons = 2130903348; - - // aapt resource value: 0x7F030135 - public const int paddingEnd = 2130903349; - - // aapt resource value: 0x7F030136 - public const int paddingStart = 2130903350; - - // aapt resource value: 0x7F030137 - public const int paddingTopNoTitle = 2130903351; - - // aapt resource value: 0x7F030138 - public const int panelBackground = 2130903352; - - // aapt resource value: 0x7F030139 - public const int panelMenuListTheme = 2130903353; - - // aapt resource value: 0x7F03013A - public const int panelMenuListWidth = 2130903354; - - // aapt resource value: 0x7F03013B - public const int passwordToggleContentDescription = 2130903355; - - // aapt resource value: 0x7F03013C - public const int passwordToggleDrawable = 2130903356; - - // aapt resource value: 0x7F03013D - public const int passwordToggleEnabled = 2130903357; - - // aapt resource value: 0x7F03013E - public const int passwordToggleTint = 2130903358; - - // aapt resource value: 0x7F03013F - public const int passwordToggleTintMode = 2130903359; - - // aapt resource value: 0x7F030140 - public const int popupMenuStyle = 2130903360; - - // aapt resource value: 0x7F030141 - public const int popupTheme = 2130903361; - - // aapt resource value: 0x7F030142 - public const int popupWindowStyle = 2130903362; - - // aapt resource value: 0x7F030143 - public const int preserveIconSpacing = 2130903363; - - // aapt resource value: 0x7F030144 - public const int pressedTranslationZ = 2130903364; - - // aapt resource value: 0x7F030145 - public const int progressBarPadding = 2130903365; - - // aapt resource value: 0x7F030146 - public const int progressBarStyle = 2130903366; - - // aapt resource value: 0x7F030147 - public const int queryBackground = 2130903367; - - // aapt resource value: 0x7F030148 - public const int queryHint = 2130903368; - - // aapt resource value: 0x7F030149 - public const int radioButtonStyle = 2130903369; - - // aapt resource value: 0x7F03014A - public const int ratingBarStyle = 2130903370; - - // aapt resource value: 0x7F03014B - public const int ratingBarStyleIndicator = 2130903371; - - // aapt resource value: 0x7F03014C - public const int ratingBarStyleSmall = 2130903372; - - // aapt resource value: 0x7F03014D - public const int reverseLayout = 2130903373; - - // aapt resource value: 0x7F03014E - public const int rippleColor = 2130903374; - - // aapt resource value: 0x7F03014F - public const int scrimAnimationDuration = 2130903375; - - // aapt resource value: 0x7F030150 - public const int scrimBackground = 2130903376; - - // aapt resource value: 0x7F030151 - public const int scrimVisibleHeightTrigger = 2130903377; - - // aapt resource value: 0x7F030152 - public const int scrollViewStyle = 2130903378; - - // aapt resource value: 0x7F030153 - public const int searchHintIcon = 2130903379; - - // aapt resource value: 0x7F030154 - public const int searchIcon = 2130903380; - - // aapt resource value: 0x7F030155 - public const int searchViewStyle = 2130903381; - - // aapt resource value: 0x7F030156 - public const int seekBarStyle = 2130903382; - - // aapt resource value: 0x7F030157 - public const int selectableItemBackground = 2130903383; - - // aapt resource value: 0x7F030158 - public const int selectableItemBackgroundBorderless = 2130903384; - - // aapt resource value: 0x7F030159 - public const int showAsAction = 2130903385; - - // aapt resource value: 0x7F03015A - public const int showDividers = 2130903386; - - // aapt resource value: 0x7F03015B - public const int showMotionSpec = 2130903387; - - // aapt resource value: 0x7F03015C - public const int showText = 2130903388; - - // aapt resource value: 0x7F03015D - public const int showTitle = 2130903389; - - // aapt resource value: 0x7F03015E - public const int singleChoiceItemLayout = 2130903390; - - // aapt resource value: 0x7F03015F - public const int singleLine = 2130903391; - - // aapt resource value: 0x7F030160 - public const int singleSelection = 2130903392; - - // aapt resource value: 0x7F030161 - public const int snackbarButtonStyle = 2130903393; - - // aapt resource value: 0x7F030162 - public const int snackbarStyle = 2130903394; - - // aapt resource value: 0x7F030163 - public const int spanCount = 2130903395; - - // aapt resource value: 0x7F030164 - public const int spinBars = 2130903396; - - // aapt resource value: 0x7F030165 - public const int spinnerDropDownItemStyle = 2130903397; - - // aapt resource value: 0x7F030166 - public const int spinnerStyle = 2130903398; - - // aapt resource value: 0x7F030167 - public const int splitTrack = 2130903399; - - // aapt resource value: 0x7F030168 - public const int srcCompat = 2130903400; - - // aapt resource value: 0x7F030169 - public const int stackFromEnd = 2130903401; - - // aapt resource value: 0x7F03016A - public const int state_above_anchor = 2130903402; - - // aapt resource value: 0x7F03016B - public const int state_collapsed = 2130903403; - - // aapt resource value: 0x7F03016C - public const int state_collapsible = 2130903404; - - // aapt resource value: 0x7F03016D - public const int state_liftable = 2130903405; - - // aapt resource value: 0x7F03016E - public const int state_lifted = 2130903406; - - // aapt resource value: 0x7F03016F - public const int statusBarBackground = 2130903407; - - // aapt resource value: 0x7F030170 - public const int statusBarScrim = 2130903408; - - // aapt resource value: 0x7F030171 - public const int strokeColor = 2130903409; - - // aapt resource value: 0x7F030172 - public const int strokeWidth = 2130903410; - - // aapt resource value: 0x7F030173 - public const int subMenuArrow = 2130903411; - - // aapt resource value: 0x7F030174 - public const int submitBackground = 2130903412; - - // aapt resource value: 0x7F030175 - public const int subtitle = 2130903413; - - // aapt resource value: 0x7F030176 - public const int subtitleTextAppearance = 2130903414; - - // aapt resource value: 0x7F030177 - public const int subtitleTextColor = 2130903415; - - // aapt resource value: 0x7F030178 - public const int subtitleTextStyle = 2130903416; - - // aapt resource value: 0x7F030179 - public const int suggestionRowLayout = 2130903417; - - // aapt resource value: 0x7F03017A - public const int switchMinWidth = 2130903418; - - // aapt resource value: 0x7F03017B - public const int switchPadding = 2130903419; - - // aapt resource value: 0x7F03017C - public const int switchStyle = 2130903420; - - // aapt resource value: 0x7F03017D - public const int switchTextAppearance = 2130903421; - - // aapt resource value: 0x7F03017E - public const int tabBackground = 2130903422; - - // aapt resource value: 0x7F03017F - public const int tabContentStart = 2130903423; - - // aapt resource value: 0x7F030180 - public const int tabGravity = 2130903424; - - // aapt resource value: 0x7F030181 - public const int tabIconTint = 2130903425; - - // aapt resource value: 0x7F030182 - public const int tabIconTintMode = 2130903426; - - // aapt resource value: 0x7F030183 - public const int tabIndicator = 2130903427; - - // aapt resource value: 0x7F030184 - public const int tabIndicatorAnimationDuration = 2130903428; - - // aapt resource value: 0x7F030185 - public const int tabIndicatorColor = 2130903429; - - // aapt resource value: 0x7F030186 - public const int tabIndicatorFullWidth = 2130903430; - - // aapt resource value: 0x7F030187 - public const int tabIndicatorGravity = 2130903431; - - // aapt resource value: 0x7F030188 - public const int tabIndicatorHeight = 2130903432; - - // aapt resource value: 0x7F030189 - public const int tabInlineLabel = 2130903433; - - // aapt resource value: 0x7F03018A - public const int tabMaxWidth = 2130903434; - - // aapt resource value: 0x7F03018B - public const int tabMinWidth = 2130903435; - - // aapt resource value: 0x7F03018C - public const int tabMode = 2130903436; - - // aapt resource value: 0x7F03018D - public const int tabPadding = 2130903437; - - // aapt resource value: 0x7F03018E - public const int tabPaddingBottom = 2130903438; - - // aapt resource value: 0x7F03018F - public const int tabPaddingEnd = 2130903439; - - // aapt resource value: 0x7F030190 - public const int tabPaddingStart = 2130903440; - - // aapt resource value: 0x7F030191 - public const int tabPaddingTop = 2130903441; - - // aapt resource value: 0x7F030192 - public const int tabRippleColor = 2130903442; - - // aapt resource value: 0x7F030193 - public const int tabSelectedTextColor = 2130903443; - - // aapt resource value: 0x7F030194 - public const int tabStyle = 2130903444; - - // aapt resource value: 0x7F030195 - public const int tabTextAppearance = 2130903445; - - // aapt resource value: 0x7F030196 - public const int tabTextColor = 2130903446; - - // aapt resource value: 0x7F030197 - public const int tabUnboundedRipple = 2130903447; - - // aapt resource value: 0x7F030198 - public const int textAllCaps = 2130903448; - - // aapt resource value: 0x7F030199 - public const int textAppearanceBody1 = 2130903449; - - // aapt resource value: 0x7F03019A - public const int textAppearanceBody2 = 2130903450; - - // aapt resource value: 0x7F03019B - public const int textAppearanceButton = 2130903451; - - // aapt resource value: 0x7F03019C - public const int textAppearanceCaption = 2130903452; - - // aapt resource value: 0x7F03019D - public const int textAppearanceHeadline1 = 2130903453; - - // aapt resource value: 0x7F03019E - public const int textAppearanceHeadline2 = 2130903454; - - // aapt resource value: 0x7F03019F - public const int textAppearanceHeadline3 = 2130903455; - - // aapt resource value: 0x7F0301A0 - public const int textAppearanceHeadline4 = 2130903456; - - // aapt resource value: 0x7F0301A1 - public const int textAppearanceHeadline5 = 2130903457; - - // aapt resource value: 0x7F0301A2 - public const int textAppearanceHeadline6 = 2130903458; - - // aapt resource value: 0x7F0301A3 - public const int textAppearanceLargePopupMenu = 2130903459; - - // aapt resource value: 0x7F0301A4 - public const int textAppearanceListItem = 2130903460; - - // aapt resource value: 0x7F0301A5 - public const int textAppearanceListItemSecondary = 2130903461; - - // aapt resource value: 0x7F0301A6 - public const int textAppearanceListItemSmall = 2130903462; - - // aapt resource value: 0x7F0301A7 - public const int textAppearanceOverline = 2130903463; - - // aapt resource value: 0x7F0301A8 - public const int textAppearancePopupMenuHeader = 2130903464; - - // aapt resource value: 0x7F0301A9 - public const int textAppearanceSearchResultSubtitle = 2130903465; - - // aapt resource value: 0x7F0301AA - public const int textAppearanceSearchResultTitle = 2130903466; - - // aapt resource value: 0x7F0301AB - public const int textAppearanceSmallPopupMenu = 2130903467; - - // aapt resource value: 0x7F0301AC - public const int textAppearanceSubtitle1 = 2130903468; - - // aapt resource value: 0x7F0301AD - public const int textAppearanceSubtitle2 = 2130903469; - - // aapt resource value: 0x7F0301AE - public const int textColorAlertDialogListItem = 2130903470; - - // aapt resource value: 0x7F0301AF - public const int textColorSearchUrl = 2130903471; - - // aapt resource value: 0x7F0301B0 - public const int textEndPadding = 2130903472; - - // aapt resource value: 0x7F0301B1 - public const int textInputStyle = 2130903473; - - // aapt resource value: 0x7F0301B2 - public const int textStartPadding = 2130903474; - - // aapt resource value: 0x7F0301B3 - public const int theme = 2130903475; - - // aapt resource value: 0x7F0301B4 - public const int thickness = 2130903476; - - // aapt resource value: 0x7F0301B5 - public const int thumbTextPadding = 2130903477; - - // aapt resource value: 0x7F0301B6 - public const int thumbTint = 2130903478; - - // aapt resource value: 0x7F0301B7 - public const int thumbTintMode = 2130903479; - - // aapt resource value: 0x7F0301B8 - public const int tickMark = 2130903480; - - // aapt resource value: 0x7F0301B9 - public const int tickMarkTint = 2130903481; - - // aapt resource value: 0x7F0301BA - public const int tickMarkTintMode = 2130903482; - - // aapt resource value: 0x7F0301BB - public const int tint = 2130903483; - - // aapt resource value: 0x7F0301BC - public const int tintMode = 2130903484; - - // aapt resource value: 0x7F0301BD - public const int title = 2130903485; - - // aapt resource value: 0x7F0301BE - public const int titleEnabled = 2130903486; - - // aapt resource value: 0x7F0301BF - public const int titleMargin = 2130903487; - - // aapt resource value: 0x7F0301C0 - public const int titleMarginBottom = 2130903488; - - // aapt resource value: 0x7F0301C1 - public const int titleMarginEnd = 2130903489; - - // aapt resource value: 0x7F0301C4 - public const int titleMargins = 2130903492; - - // aapt resource value: 0x7F0301C2 - public const int titleMarginStart = 2130903490; - - // aapt resource value: 0x7F0301C3 - public const int titleMarginTop = 2130903491; - - // aapt resource value: 0x7F0301C5 - public const int titleTextAppearance = 2130903493; - - // aapt resource value: 0x7F0301C6 - public const int titleTextColor = 2130903494; - - // aapt resource value: 0x7F0301C7 - public const int titleTextStyle = 2130903495; - - // aapt resource value: 0x7F0301C8 - public const int toolbarId = 2130903496; - - // aapt resource value: 0x7F0301C9 - public const int toolbarNavigationButtonStyle = 2130903497; - - // aapt resource value: 0x7F0301CA - public const int toolbarStyle = 2130903498; - - // aapt resource value: 0x7F0301CB - public const int tooltipForegroundColor = 2130903499; - - // aapt resource value: 0x7F0301CC - public const int tooltipFrameBackground = 2130903500; - - // aapt resource value: 0x7F0301CD - public const int tooltipText = 2130903501; - - // aapt resource value: 0x7F0301CE - public const int track = 2130903502; - - // aapt resource value: 0x7F0301CF - public const int trackTint = 2130903503; - - // aapt resource value: 0x7F0301D0 - public const int trackTintMode = 2130903504; - - // aapt resource value: 0x7F0301D1 - public const int ttcIndex = 2130903505; - - // aapt resource value: 0x7F0301D2 - public const int useCompatPadding = 2130903506; - - // aapt resource value: 0x7F0301D3 - public const int viewInflaterClass = 2130903507; - - // aapt resource value: 0x7F0301D4 - public const int voiceIcon = 2130903508; - - // aapt resource value: 0x7F0301D5 - public const int windowActionBar = 2130903509; - - // aapt resource value: 0x7F0301D6 - public const int windowActionBarOverlay = 2130903510; - - // aapt resource value: 0x7F0301D7 - public const int windowActionModeOverlay = 2130903511; - - // aapt resource value: 0x7F0301D8 - public const int windowFixedHeightMajor = 2130903512; - - // aapt resource value: 0x7F0301D9 - public const int windowFixedHeightMinor = 2130903513; - - // aapt resource value: 0x7F0301DA - public const int windowFixedWidthMajor = 2130903514; - - // aapt resource value: 0x7F0301DB - public const int windowFixedWidthMinor = 2130903515; - - // aapt resource value: 0x7F0301DC - public const int windowMinWidthMajor = 2130903516; - - // aapt resource value: 0x7F0301DD - public const int windowMinWidthMinor = 2130903517; - - // aapt resource value: 0x7F0301DE - public const int windowNoTitle = 2130903518; - - static Attribute() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Attribute() - { - } - } - - public partial class Boolean - { - - // aapt resource value: 0x7F040000 - public const int abc_action_bar_embed_tabs = 2130968576; - - // aapt resource value: 0x7F040001 - public const int abc_allow_stacked_button_bar = 2130968577; - - // aapt resource value: 0x7F040002 - public const int abc_config_actionMenuItemAllCaps = 2130968578; - - // aapt resource value: 0x7F040003 - public const int mtrl_btn_textappearance_all_caps = 2130968579; - - static Boolean() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Boolean() - { - } - } - - public partial class Color - { - - // aapt resource value: 0x7F050000 - public const int abc_background_cache_hint_selector_material_dark = 2131034112; - - // aapt resource value: 0x7F050001 - public const int abc_background_cache_hint_selector_material_light = 2131034113; - - // aapt resource value: 0x7F050002 - public const int abc_btn_colored_borderless_text_material = 2131034114; - - // aapt resource value: 0x7F050003 - public const int abc_btn_colored_text_material = 2131034115; - - // aapt resource value: 0x7F050004 - public const int abc_color_highlight_material = 2131034116; - - // aapt resource value: 0x7F050005 - public const int abc_hint_foreground_material_dark = 2131034117; - - // aapt resource value: 0x7F050006 - public const int abc_hint_foreground_material_light = 2131034118; - - // aapt resource value: 0x7F050007 - public const int abc_input_method_navigation_guard = 2131034119; - - // aapt resource value: 0x7F050008 - public const int abc_primary_text_disable_only_material_dark = 2131034120; - - // aapt resource value: 0x7F050009 - public const int abc_primary_text_disable_only_material_light = 2131034121; - - // aapt resource value: 0x7F05000A - public const int abc_primary_text_material_dark = 2131034122; - - // aapt resource value: 0x7F05000B - public const int abc_primary_text_material_light = 2131034123; - - // aapt resource value: 0x7F05000C - public const int abc_search_url_text = 2131034124; - - // aapt resource value: 0x7F05000D - public const int abc_search_url_text_normal = 2131034125; - - // aapt resource value: 0x7F05000E - public const int abc_search_url_text_pressed = 2131034126; - - // aapt resource value: 0x7F05000F - public const int abc_search_url_text_selected = 2131034127; - - // aapt resource value: 0x7F050010 - public const int abc_secondary_text_material_dark = 2131034128; - - // aapt resource value: 0x7F050011 - public const int abc_secondary_text_material_light = 2131034129; - - // aapt resource value: 0x7F050012 - public const int abc_tint_btn_checkable = 2131034130; - - // aapt resource value: 0x7F050013 - public const int abc_tint_default = 2131034131; - - // aapt resource value: 0x7F050014 - public const int abc_tint_edittext = 2131034132; - - // aapt resource value: 0x7F050015 - public const int abc_tint_seek_thumb = 2131034133; - - // aapt resource value: 0x7F050016 - public const int abc_tint_spinner = 2131034134; - - // aapt resource value: 0x7F050017 - public const int abc_tint_switch_track = 2131034135; - - // aapt resource value: 0x7F050018 - public const int accent_material_dark = 2131034136; - - // aapt resource value: 0x7F050019 - public const int accent_material_light = 2131034137; - - // aapt resource value: 0x7F05001A - public const int background_floating_material_dark = 2131034138; - - // aapt resource value: 0x7F05001B - public const int background_floating_material_light = 2131034139; - - // aapt resource value: 0x7F05001C - public const int background_material_dark = 2131034140; - - // aapt resource value: 0x7F05001D - public const int background_material_light = 2131034141; - - // aapt resource value: 0x7F05001E - public const int bright_foreground_disabled_material_dark = 2131034142; - - // aapt resource value: 0x7F05001F - public const int bright_foreground_disabled_material_light = 2131034143; - - // aapt resource value: 0x7F050020 - public const int bright_foreground_inverse_material_dark = 2131034144; - - // aapt resource value: 0x7F050021 - public const int bright_foreground_inverse_material_light = 2131034145; - - // aapt resource value: 0x7F050022 - public const int bright_foreground_material_dark = 2131034146; - - // aapt resource value: 0x7F050023 - public const int bright_foreground_material_light = 2131034147; - - // aapt resource value: 0x7F050024 - public const int browser_actions_bg_grey = 2131034148; - - // aapt resource value: 0x7F050025 - public const int browser_actions_divider_color = 2131034149; - - // aapt resource value: 0x7F050026 - public const int browser_actions_text_color = 2131034150; - - // aapt resource value: 0x7F050027 - public const int browser_actions_title_color = 2131034151; - - // aapt resource value: 0x7F050028 - public const int button_material_dark = 2131034152; - - // aapt resource value: 0x7F050029 - public const int button_material_light = 2131034153; - - // aapt resource value: 0x7F05002A - public const int cardview_dark_background = 2131034154; - - // aapt resource value: 0x7F05002B - public const int cardview_light_background = 2131034155; - - // aapt resource value: 0x7F05002C - public const int cardview_shadow_end_color = 2131034156; - - // aapt resource value: 0x7F05002D - public const int cardview_shadow_start_color = 2131034157; - - // aapt resource value: 0x7F05002E - public const int colorAccent = 2131034158; - - // aapt resource value: 0x7F05002F - public const int colorPrimary = 2131034159; - - // aapt resource value: 0x7F050030 - public const int colorPrimaryDark = 2131034160; - - // aapt resource value: 0x7F050031 - public const int design_bottom_navigation_shadow_color = 2131034161; - - // aapt resource value: 0x7F050032 - public const int design_default_color_primary = 2131034162; - - // aapt resource value: 0x7F050033 - public const int design_default_color_primary_dark = 2131034163; - - // aapt resource value: 0x7F050034 - public const int design_error = 2131034164; - - // aapt resource value: 0x7F050035 - public const int design_fab_shadow_end_color = 2131034165; - - // aapt resource value: 0x7F050036 - public const int design_fab_shadow_mid_color = 2131034166; - - // aapt resource value: 0x7F050037 - public const int design_fab_shadow_start_color = 2131034167; - - // aapt resource value: 0x7F050038 - public const int design_fab_stroke_end_inner_color = 2131034168; - - // aapt resource value: 0x7F050039 - public const int design_fab_stroke_end_outer_color = 2131034169; - - // aapt resource value: 0x7F05003A - public const int design_fab_stroke_top_inner_color = 2131034170; - - // aapt resource value: 0x7F05003B - public const int design_fab_stroke_top_outer_color = 2131034171; - - // aapt resource value: 0x7F05003C - public const int design_snackbar_background_color = 2131034172; - - // aapt resource value: 0x7F05003D - public const int design_tint_password_toggle = 2131034173; - - // aapt resource value: 0x7F05003E - public const int dim_foreground_disabled_material_dark = 2131034174; - - // aapt resource value: 0x7F05003F - public const int dim_foreground_disabled_material_light = 2131034175; - - // aapt resource value: 0x7F050040 - public const int dim_foreground_material_dark = 2131034176; - - // aapt resource value: 0x7F050041 - public const int dim_foreground_material_light = 2131034177; - - // aapt resource value: 0x7F050042 - public const int error_color_material_dark = 2131034178; - - // aapt resource value: 0x7F050043 - public const int error_color_material_light = 2131034179; - - // aapt resource value: 0x7F050044 - public const int foreground_material_dark = 2131034180; - - // aapt resource value: 0x7F050045 - public const int foreground_material_light = 2131034181; - - // aapt resource value: 0x7F050046 - public const int highlighted_text_material_dark = 2131034182; - - // aapt resource value: 0x7F050047 - public const int highlighted_text_material_light = 2131034183; - - // aapt resource value: 0x7F050048 - public const int launcher_background = 2131034184; - - // aapt resource value: 0x7F050049 - public const int material_blue_grey_800 = 2131034185; - - // aapt resource value: 0x7F05004A - public const int material_blue_grey_900 = 2131034186; - - // aapt resource value: 0x7F05004B - public const int material_blue_grey_950 = 2131034187; - - // aapt resource value: 0x7F05004C - public const int material_deep_teal_200 = 2131034188; - - // aapt resource value: 0x7F05004D - public const int material_deep_teal_500 = 2131034189; - - // aapt resource value: 0x7F05004E - public const int material_grey_100 = 2131034190; - - // aapt resource value: 0x7F05004F - public const int material_grey_300 = 2131034191; - - // aapt resource value: 0x7F050050 - public const int material_grey_50 = 2131034192; - - // aapt resource value: 0x7F050051 - public const int material_grey_600 = 2131034193; - - // aapt resource value: 0x7F050052 - public const int material_grey_800 = 2131034194; - - // aapt resource value: 0x7F050053 - public const int material_grey_850 = 2131034195; - - // aapt resource value: 0x7F050054 - public const int material_grey_900 = 2131034196; - - // aapt resource value: 0x7F050055 - public const int mtrl_bottom_nav_colored_item_tint = 2131034197; - - // aapt resource value: 0x7F050056 - public const int mtrl_bottom_nav_item_tint = 2131034198; - - // aapt resource value: 0x7F050057 - public const int mtrl_btn_bg_color_disabled = 2131034199; - - // aapt resource value: 0x7F050058 - public const int mtrl_btn_bg_color_selector = 2131034200; - - // aapt resource value: 0x7F050059 - public const int mtrl_btn_ripple_color = 2131034201; - - // aapt resource value: 0x7F05005A - public const int mtrl_btn_stroke_color_selector = 2131034202; - - // aapt resource value: 0x7F05005B - public const int mtrl_btn_text_btn_ripple_color = 2131034203; - - // aapt resource value: 0x7F05005C - public const int mtrl_btn_text_color_disabled = 2131034204; - - // aapt resource value: 0x7F05005D - public const int mtrl_btn_text_color_selector = 2131034205; - - // aapt resource value: 0x7F05005E - public const int mtrl_btn_transparent_bg_color = 2131034206; - - // aapt resource value: 0x7F05005F - public const int mtrl_chip_background_color = 2131034207; - - // aapt resource value: 0x7F050060 - public const int mtrl_chip_close_icon_tint = 2131034208; - - // aapt resource value: 0x7F050061 - public const int mtrl_chip_ripple_color = 2131034209; - - // aapt resource value: 0x7F050062 - public const int mtrl_chip_text_color = 2131034210; - - // aapt resource value: 0x7F050063 - public const int mtrl_fab_ripple_color = 2131034211; - - // aapt resource value: 0x7F050064 - public const int mtrl_scrim_color = 2131034212; - - // aapt resource value: 0x7F050065 - public const int mtrl_tabs_colored_ripple_color = 2131034213; - - // aapt resource value: 0x7F050066 - public const int mtrl_tabs_icon_color_selector = 2131034214; - - // aapt resource value: 0x7F050067 - public const int mtrl_tabs_icon_color_selector_colored = 2131034215; - - // aapt resource value: 0x7F050068 - public const int mtrl_tabs_legacy_text_color_selector = 2131034216; - - // aapt resource value: 0x7F050069 - public const int mtrl_tabs_ripple_color = 2131034217; - - // aapt resource value: 0x7F05006B - public const int mtrl_textinput_default_box_stroke_color = 2131034219; - - // aapt resource value: 0x7F05006C - public const int mtrl_textinput_disabled_color = 2131034220; - - // aapt resource value: 0x7F05006D - public const int mtrl_textinput_filled_box_default_background_color = 2131034221; - - // aapt resource value: 0x7F05006E - public const int mtrl_textinput_hovered_box_stroke_color = 2131034222; - - // aapt resource value: 0x7F05006A - public const int mtrl_text_btn_text_color_selector = 2131034218; - - // aapt resource value: 0x7F05006F - public const int notification_action_color_filter = 2131034223; - - // aapt resource value: 0x7F050070 - public const int notification_icon_bg_color = 2131034224; - - // aapt resource value: 0x7F050071 - public const int notification_material_background_media_default_color = 2131034225; - - // aapt resource value: 0x7F050072 - public const int primary_dark_material_dark = 2131034226; - - // aapt resource value: 0x7F050073 - public const int primary_dark_material_light = 2131034227; - - // aapt resource value: 0x7F050074 - public const int primary_material_dark = 2131034228; - - // aapt resource value: 0x7F050075 - public const int primary_material_light = 2131034229; - - // aapt resource value: 0x7F050076 - public const int primary_text_default_material_dark = 2131034230; - - // aapt resource value: 0x7F050077 - public const int primary_text_default_material_light = 2131034231; - - // aapt resource value: 0x7F050078 - public const int primary_text_disabled_material_dark = 2131034232; - - // aapt resource value: 0x7F050079 - public const int primary_text_disabled_material_light = 2131034233; - - // aapt resource value: 0x7F05007A - public const int ripple_material_dark = 2131034234; - - // aapt resource value: 0x7F05007B - public const int ripple_material_light = 2131034235; - - // aapt resource value: 0x7F05007C - public const int secondary_text_default_material_dark = 2131034236; - - // aapt resource value: 0x7F05007D - public const int secondary_text_default_material_light = 2131034237; - - // aapt resource value: 0x7F05007E - public const int secondary_text_disabled_material_dark = 2131034238; - - // aapt resource value: 0x7F05007F - public const int secondary_text_disabled_material_light = 2131034239; - - // aapt resource value: 0x7F050080 - public const int switch_thumb_disabled_material_dark = 2131034240; - - // aapt resource value: 0x7F050081 - public const int switch_thumb_disabled_material_light = 2131034241; - - // aapt resource value: 0x7F050082 - public const int switch_thumb_material_dark = 2131034242; - - // aapt resource value: 0x7F050083 - public const int switch_thumb_material_light = 2131034243; - - // aapt resource value: 0x7F050084 - public const int switch_thumb_normal_material_dark = 2131034244; - - // aapt resource value: 0x7F050085 - public const int switch_thumb_normal_material_light = 2131034245; - - // aapt resource value: 0x7F050086 - public const int tooltip_background_dark = 2131034246; - - // aapt resource value: 0x7F050087 - public const int tooltip_background_light = 2131034247; - - static Color() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Color() - { - } - } - - public partial class Dimension - { - - // aapt resource value: 0x7F060000 - public const int abc_action_bar_content_inset_material = 2131099648; - - // aapt resource value: 0x7F060001 - public const int abc_action_bar_content_inset_with_nav = 2131099649; - - // aapt resource value: 0x7F060002 - public const int abc_action_bar_default_height_material = 2131099650; - - // aapt resource value: 0x7F060003 - public const int abc_action_bar_default_padding_end_material = 2131099651; - - // aapt resource value: 0x7F060004 - public const int abc_action_bar_default_padding_start_material = 2131099652; - - // aapt resource value: 0x7F060005 - public const int abc_action_bar_elevation_material = 2131099653; - - // aapt resource value: 0x7F060006 - public const int abc_action_bar_icon_vertical_padding_material = 2131099654; - - // aapt resource value: 0x7F060007 - public const int abc_action_bar_overflow_padding_end_material = 2131099655; - - // aapt resource value: 0x7F060008 - public const int abc_action_bar_overflow_padding_start_material = 2131099656; - - // aapt resource value: 0x7F060009 - public const int abc_action_bar_stacked_max_height = 2131099657; - - // aapt resource value: 0x7F06000A - public const int abc_action_bar_stacked_tab_max_width = 2131099658; - - // aapt resource value: 0x7F06000B - public const int abc_action_bar_subtitle_bottom_margin_material = 2131099659; - - // aapt resource value: 0x7F06000C - public const int abc_action_bar_subtitle_top_margin_material = 2131099660; - - // aapt resource value: 0x7F06000D - public const int abc_action_button_min_height_material = 2131099661; - - // aapt resource value: 0x7F06000E - public const int abc_action_button_min_width_material = 2131099662; - - // aapt resource value: 0x7F06000F - public const int abc_action_button_min_width_overflow_material = 2131099663; - - // aapt resource value: 0x7F060010 - public const int abc_alert_dialog_button_bar_height = 2131099664; - - // aapt resource value: 0x7F060011 - public const int abc_alert_dialog_button_dimen = 2131099665; - - // aapt resource value: 0x7F060012 - public const int abc_button_inset_horizontal_material = 2131099666; - - // aapt resource value: 0x7F060013 - public const int abc_button_inset_vertical_material = 2131099667; - - // aapt resource value: 0x7F060014 - public const int abc_button_padding_horizontal_material = 2131099668; - - // aapt resource value: 0x7F060015 - public const int abc_button_padding_vertical_material = 2131099669; - - // aapt resource value: 0x7F060016 - public const int abc_cascading_menus_min_smallest_width = 2131099670; - - // aapt resource value: 0x7F060017 - public const int abc_config_prefDialogWidth = 2131099671; - - // aapt resource value: 0x7F060018 - public const int abc_control_corner_material = 2131099672; - - // aapt resource value: 0x7F060019 - public const int abc_control_inset_material = 2131099673; - - // aapt resource value: 0x7F06001A - public const int abc_control_padding_material = 2131099674; - - // aapt resource value: 0x7F06001B - public const int abc_dialog_corner_radius_material = 2131099675; - - // aapt resource value: 0x7F06001C - public const int abc_dialog_fixed_height_major = 2131099676; - - // aapt resource value: 0x7F06001D - public const int abc_dialog_fixed_height_minor = 2131099677; - - // aapt resource value: 0x7F06001E - public const int abc_dialog_fixed_width_major = 2131099678; - - // aapt resource value: 0x7F06001F - public const int abc_dialog_fixed_width_minor = 2131099679; - - // aapt resource value: 0x7F060020 - public const int abc_dialog_list_padding_bottom_no_buttons = 2131099680; - - // aapt resource value: 0x7F060021 - public const int abc_dialog_list_padding_top_no_title = 2131099681; - - // aapt resource value: 0x7F060022 - public const int abc_dialog_min_width_major = 2131099682; - - // aapt resource value: 0x7F060023 - public const int abc_dialog_min_width_minor = 2131099683; - - // aapt resource value: 0x7F060024 - public const int abc_dialog_padding_material = 2131099684; - - // aapt resource value: 0x7F060025 - public const int abc_dialog_padding_top_material = 2131099685; - - // aapt resource value: 0x7F060026 - public const int abc_dialog_title_divider_material = 2131099686; - - // aapt resource value: 0x7F060027 - public const int abc_disabled_alpha_material_dark = 2131099687; - - // aapt resource value: 0x7F060028 - public const int abc_disabled_alpha_material_light = 2131099688; - - // aapt resource value: 0x7F060029 - public const int abc_dropdownitem_icon_width = 2131099689; - - // aapt resource value: 0x7F06002A - public const int abc_dropdownitem_text_padding_left = 2131099690; - - // aapt resource value: 0x7F06002B - public const int abc_dropdownitem_text_padding_right = 2131099691; - - // aapt resource value: 0x7F06002C - public const int abc_edit_text_inset_bottom_material = 2131099692; - - // aapt resource value: 0x7F06002D - public const int abc_edit_text_inset_horizontal_material = 2131099693; - - // aapt resource value: 0x7F06002E - public const int abc_edit_text_inset_top_material = 2131099694; - - // aapt resource value: 0x7F06002F - public const int abc_floating_window_z = 2131099695; - - // aapt resource value: 0x7F060030 - public const int abc_list_item_padding_horizontal_material = 2131099696; - - // aapt resource value: 0x7F060031 - public const int abc_panel_menu_list_width = 2131099697; - - // aapt resource value: 0x7F060032 - public const int abc_progress_bar_height_material = 2131099698; - - // aapt resource value: 0x7F060033 - public const int abc_search_view_preferred_height = 2131099699; - - // aapt resource value: 0x7F060034 - public const int abc_search_view_preferred_width = 2131099700; - - // aapt resource value: 0x7F060035 - public const int abc_seekbar_track_background_height_material = 2131099701; - - // aapt resource value: 0x7F060036 - public const int abc_seekbar_track_progress_height_material = 2131099702; - - // aapt resource value: 0x7F060037 - public const int abc_select_dialog_padding_start_material = 2131099703; - - // aapt resource value: 0x7F060038 - public const int abc_switch_padding = 2131099704; - - // aapt resource value: 0x7F060039 - public const int abc_text_size_body_1_material = 2131099705; - - // aapt resource value: 0x7F06003A - public const int abc_text_size_body_2_material = 2131099706; - - // aapt resource value: 0x7F06003B - public const int abc_text_size_button_material = 2131099707; - - // aapt resource value: 0x7F06003C - public const int abc_text_size_caption_material = 2131099708; - - // aapt resource value: 0x7F06003D - public const int abc_text_size_display_1_material = 2131099709; - - // aapt resource value: 0x7F06003E - public const int abc_text_size_display_2_material = 2131099710; - - // aapt resource value: 0x7F06003F - public const int abc_text_size_display_3_material = 2131099711; - - // aapt resource value: 0x7F060040 - public const int abc_text_size_display_4_material = 2131099712; - - // aapt resource value: 0x7F060041 - public const int abc_text_size_headline_material = 2131099713; - - // aapt resource value: 0x7F060042 - public const int abc_text_size_large_material = 2131099714; - - // aapt resource value: 0x7F060043 - public const int abc_text_size_medium_material = 2131099715; - - // aapt resource value: 0x7F060044 - public const int abc_text_size_menu_header_material = 2131099716; - - // aapt resource value: 0x7F060045 - public const int abc_text_size_menu_material = 2131099717; - - // aapt resource value: 0x7F060046 - public const int abc_text_size_small_material = 2131099718; - - // aapt resource value: 0x7F060047 - public const int abc_text_size_subhead_material = 2131099719; - - // aapt resource value: 0x7F060048 - public const int abc_text_size_subtitle_material_toolbar = 2131099720; - - // aapt resource value: 0x7F060049 - public const int abc_text_size_title_material = 2131099721; - - // aapt resource value: 0x7F06004A - public const int abc_text_size_title_material_toolbar = 2131099722; - - // aapt resource value: 0x7F06004B - public const int browser_actions_context_menu_max_width = 2131099723; - - // aapt resource value: 0x7F06004C - public const int browser_actions_context_menu_min_padding = 2131099724; - - // aapt resource value: 0x7F06004D - public const int cardview_compat_inset_shadow = 2131099725; - - // aapt resource value: 0x7F06004E - public const int cardview_default_elevation = 2131099726; - - // aapt resource value: 0x7F06004F - public const int cardview_default_radius = 2131099727; - - // aapt resource value: 0x7F060050 - public const int compat_button_inset_horizontal_material = 2131099728; - - // aapt resource value: 0x7F060051 - public const int compat_button_inset_vertical_material = 2131099729; - - // aapt resource value: 0x7F060052 - public const int compat_button_padding_horizontal_material = 2131099730; - - // aapt resource value: 0x7F060053 - public const int compat_button_padding_vertical_material = 2131099731; - - // aapt resource value: 0x7F060054 - public const int compat_control_corner_material = 2131099732; - - // aapt resource value: 0x7F060055 - public const int compat_notification_large_icon_max_height = 2131099733; - - // aapt resource value: 0x7F060056 - public const int compat_notification_large_icon_max_width = 2131099734; - - // aapt resource value: 0x7F060057 - public const int design_appbar_elevation = 2131099735; - - // aapt resource value: 0x7F060058 - public const int design_bottom_navigation_active_item_max_width = 2131099736; - - // aapt resource value: 0x7F060059 - public const int design_bottom_navigation_active_item_min_width = 2131099737; - - // aapt resource value: 0x7F06005A - public const int design_bottom_navigation_active_text_size = 2131099738; - - // aapt resource value: 0x7F06005B - public const int design_bottom_navigation_elevation = 2131099739; - - // aapt resource value: 0x7F06005C - public const int design_bottom_navigation_height = 2131099740; - - // aapt resource value: 0x7F06005D - public const int design_bottom_navigation_icon_size = 2131099741; - - // aapt resource value: 0x7F06005E - public const int design_bottom_navigation_item_max_width = 2131099742; - - // aapt resource value: 0x7F06005F - public const int design_bottom_navigation_item_min_width = 2131099743; - - // aapt resource value: 0x7F060060 - public const int design_bottom_navigation_margin = 2131099744; - - // aapt resource value: 0x7F060061 - public const int design_bottom_navigation_shadow_height = 2131099745; - - // aapt resource value: 0x7F060062 - public const int design_bottom_navigation_text_size = 2131099746; - - // aapt resource value: 0x7F060063 - public const int design_bottom_sheet_modal_elevation = 2131099747; - - // aapt resource value: 0x7F060064 - public const int design_bottom_sheet_peek_height_min = 2131099748; - - // aapt resource value: 0x7F060065 - public const int design_fab_border_width = 2131099749; - - // aapt resource value: 0x7F060066 - public const int design_fab_elevation = 2131099750; - - // aapt resource value: 0x7F060067 - public const int design_fab_image_size = 2131099751; - - // aapt resource value: 0x7F060068 - public const int design_fab_size_mini = 2131099752; - - // aapt resource value: 0x7F060069 - public const int design_fab_size_normal = 2131099753; - - // aapt resource value: 0x7F06006A - public const int design_fab_translation_z_hovered_focused = 2131099754; - - // aapt resource value: 0x7F06006B - public const int design_fab_translation_z_pressed = 2131099755; - - // aapt resource value: 0x7F06006C - public const int design_navigation_elevation = 2131099756; - - // aapt resource value: 0x7F06006D - public const int design_navigation_icon_padding = 2131099757; - - // aapt resource value: 0x7F06006E - public const int design_navigation_icon_size = 2131099758; - - // aapt resource value: 0x7F06006F - public const int design_navigation_item_horizontal_padding = 2131099759; - - // aapt resource value: 0x7F060070 - public const int design_navigation_item_icon_padding = 2131099760; - - // aapt resource value: 0x7F060071 - public const int design_navigation_max_width = 2131099761; - - // aapt resource value: 0x7F060072 - public const int design_navigation_padding_bottom = 2131099762; - - // aapt resource value: 0x7F060073 - public const int design_navigation_separator_vertical_padding = 2131099763; - - // aapt resource value: 0x7F060074 - public const int design_snackbar_action_inline_max_width = 2131099764; - - // aapt resource value: 0x7F060075 - public const int design_snackbar_background_corner_radius = 2131099765; - - // aapt resource value: 0x7F060076 - public const int design_snackbar_elevation = 2131099766; - - // aapt resource value: 0x7F060077 - public const int design_snackbar_extra_spacing_horizontal = 2131099767; - - // aapt resource value: 0x7F060078 - public const int design_snackbar_max_width = 2131099768; - - // aapt resource value: 0x7F060079 - public const int design_snackbar_min_width = 2131099769; - - // aapt resource value: 0x7F06007A - public const int design_snackbar_padding_horizontal = 2131099770; - - // aapt resource value: 0x7F06007B - public const int design_snackbar_padding_vertical = 2131099771; - - // aapt resource value: 0x7F06007C - public const int design_snackbar_padding_vertical_2lines = 2131099772; - - // aapt resource value: 0x7F06007D - public const int design_snackbar_text_size = 2131099773; - - // aapt resource value: 0x7F06007E - public const int design_tab_max_width = 2131099774; - - // aapt resource value: 0x7F06007F - public const int design_tab_scrollable_min_width = 2131099775; - - // aapt resource value: 0x7F060080 - public const int design_tab_text_size = 2131099776; - - // aapt resource value: 0x7F060081 - public const int design_tab_text_size_2line = 2131099777; - - // aapt resource value: 0x7F060082 - public const int design_textinput_caption_translate_y = 2131099778; - - // aapt resource value: 0x7F060083 - public const int disabled_alpha_material_dark = 2131099779; - - // aapt resource value: 0x7F060084 - public const int disabled_alpha_material_light = 2131099780; - - // aapt resource value: 0x7F060085 - public const int fastscroll_default_thickness = 2131099781; - - // aapt resource value: 0x7F060086 - public const int fastscroll_margin = 2131099782; - - // aapt resource value: 0x7F060087 - public const int fastscroll_minimum_range = 2131099783; - - // aapt resource value: 0x7F060088 - public const int highlight_alpha_material_colored = 2131099784; - - // aapt resource value: 0x7F060089 - public const int highlight_alpha_material_dark = 2131099785; - - // aapt resource value: 0x7F06008A - public const int highlight_alpha_material_light = 2131099786; - - // aapt resource value: 0x7F06008B - public const int hint_alpha_material_dark = 2131099787; - - // aapt resource value: 0x7F06008C - public const int hint_alpha_material_light = 2131099788; - - // aapt resource value: 0x7F06008D - public const int hint_pressed_alpha_material_dark = 2131099789; - - // aapt resource value: 0x7F06008E - public const int hint_pressed_alpha_material_light = 2131099790; - - // aapt resource value: 0x7F06008F - public const int item_touch_helper_max_drag_scroll_per_frame = 2131099791; - - // aapt resource value: 0x7F060090 - public const int item_touch_helper_swipe_escape_max_velocity = 2131099792; - - // aapt resource value: 0x7F060091 - public const int item_touch_helper_swipe_escape_velocity = 2131099793; - - // aapt resource value: 0x7F060092 - public const int mtrl_bottomappbar_fabOffsetEndMode = 2131099794; - - // aapt resource value: 0x7F060093 - public const int mtrl_bottomappbar_fab_cradle_margin = 2131099795; - - // aapt resource value: 0x7F060094 - public const int mtrl_bottomappbar_fab_cradle_rounded_corner_radius = 2131099796; - - // aapt resource value: 0x7F060095 - public const int mtrl_bottomappbar_fab_cradle_vertical_offset = 2131099797; - - // aapt resource value: 0x7F060096 - public const int mtrl_bottomappbar_height = 2131099798; - - // aapt resource value: 0x7F060097 - public const int mtrl_btn_corner_radius = 2131099799; - - // aapt resource value: 0x7F060098 - public const int mtrl_btn_dialog_btn_min_width = 2131099800; - - // aapt resource value: 0x7F060099 - public const int mtrl_btn_disabled_elevation = 2131099801; - - // aapt resource value: 0x7F06009A - public const int mtrl_btn_disabled_z = 2131099802; - - // aapt resource value: 0x7F06009B - public const int mtrl_btn_elevation = 2131099803; - - // aapt resource value: 0x7F06009C - public const int mtrl_btn_focused_z = 2131099804; - - // aapt resource value: 0x7F06009D - public const int mtrl_btn_hovered_z = 2131099805; - - // aapt resource value: 0x7F06009E - public const int mtrl_btn_icon_btn_padding_left = 2131099806; - - // aapt resource value: 0x7F06009F - public const int mtrl_btn_icon_padding = 2131099807; - - // aapt resource value: 0x7F0600A0 - public const int mtrl_btn_inset = 2131099808; - - // aapt resource value: 0x7F0600A1 - public const int mtrl_btn_letter_spacing = 2131099809; - - // aapt resource value: 0x7F0600A2 - public const int mtrl_btn_padding_bottom = 2131099810; - - // aapt resource value: 0x7F0600A3 - public const int mtrl_btn_padding_left = 2131099811; - - // aapt resource value: 0x7F0600A4 - public const int mtrl_btn_padding_right = 2131099812; - - // aapt resource value: 0x7F0600A5 - public const int mtrl_btn_padding_top = 2131099813; - - // aapt resource value: 0x7F0600A6 - public const int mtrl_btn_pressed_z = 2131099814; - - // aapt resource value: 0x7F0600A7 - public const int mtrl_btn_stroke_size = 2131099815; - - // aapt resource value: 0x7F0600A8 - public const int mtrl_btn_text_btn_icon_padding = 2131099816; - - // aapt resource value: 0x7F0600A9 - public const int mtrl_btn_text_btn_padding_left = 2131099817; - - // aapt resource value: 0x7F0600AA - public const int mtrl_btn_text_btn_padding_right = 2131099818; - - // aapt resource value: 0x7F0600AB - public const int mtrl_btn_text_size = 2131099819; - - // aapt resource value: 0x7F0600AC - public const int mtrl_btn_z = 2131099820; - - // aapt resource value: 0x7F0600AD - public const int mtrl_card_elevation = 2131099821; - - // aapt resource value: 0x7F0600AE - public const int mtrl_card_spacing = 2131099822; - - // aapt resource value: 0x7F0600AF - public const int mtrl_chip_pressed_translation_z = 2131099823; - - // aapt resource value: 0x7F0600B0 - public const int mtrl_chip_text_size = 2131099824; - - // aapt resource value: 0x7F0600B1 - public const int mtrl_fab_elevation = 2131099825; - - // aapt resource value: 0x7F0600B2 - public const int mtrl_fab_translation_z_hovered_focused = 2131099826; - - // aapt resource value: 0x7F0600B3 - public const int mtrl_fab_translation_z_pressed = 2131099827; - - // aapt resource value: 0x7F0600B4 - public const int mtrl_navigation_elevation = 2131099828; - - // aapt resource value: 0x7F0600B5 - public const int mtrl_navigation_item_horizontal_padding = 2131099829; - - // aapt resource value: 0x7F0600B6 - public const int mtrl_navigation_item_icon_padding = 2131099830; - - // aapt resource value: 0x7F0600B7 - public const int mtrl_snackbar_background_corner_radius = 2131099831; - - // aapt resource value: 0x7F0600B8 - public const int mtrl_snackbar_margin = 2131099832; - - // aapt resource value: 0x7F0600B9 - public const int mtrl_textinput_box_bottom_offset = 2131099833; - - // aapt resource value: 0x7F0600BA - public const int mtrl_textinput_box_corner_radius_medium = 2131099834; - - // aapt resource value: 0x7F0600BB - public const int mtrl_textinput_box_corner_radius_small = 2131099835; - - // aapt resource value: 0x7F0600BC - public const int mtrl_textinput_box_label_cutout_padding = 2131099836; - - // aapt resource value: 0x7F0600BD - public const int mtrl_textinput_box_padding_end = 2131099837; - - // aapt resource value: 0x7F0600BE - public const int mtrl_textinput_box_stroke_width_default = 2131099838; - - // aapt resource value: 0x7F0600BF - public const int mtrl_textinput_box_stroke_width_focused = 2131099839; - - // aapt resource value: 0x7F0600C0 - public const int mtrl_textinput_outline_box_expanded_padding = 2131099840; - - // aapt resource value: 0x7F0600C1 - public const int mtrl_toolbar_default_height = 2131099841; - - // aapt resource value: 0x7F0600C2 - public const int notification_action_icon_size = 2131099842; - - // aapt resource value: 0x7F0600C3 - public const int notification_action_text_size = 2131099843; - - // aapt resource value: 0x7F0600C4 - public const int notification_big_circle_margin = 2131099844; - - // aapt resource value: 0x7F0600C5 - public const int notification_content_margin_start = 2131099845; - - // aapt resource value: 0x7F0600C6 - public const int notification_large_icon_height = 2131099846; - - // aapt resource value: 0x7F0600C7 - public const int notification_large_icon_width = 2131099847; - - // aapt resource value: 0x7F0600C8 - public const int notification_main_column_padding_top = 2131099848; - - // aapt resource value: 0x7F0600C9 - public const int notification_media_narrow_margin = 2131099849; - - // aapt resource value: 0x7F0600CA - public const int notification_right_icon_size = 2131099850; - - // aapt resource value: 0x7F0600CB - public const int notification_right_side_padding_top = 2131099851; - - // aapt resource value: 0x7F0600CC - public const int notification_small_icon_background_padding = 2131099852; - - // aapt resource value: 0x7F0600CD - public const int notification_small_icon_size_as_large = 2131099853; - - // aapt resource value: 0x7F0600CE - public const int notification_subtext_size = 2131099854; - - // aapt resource value: 0x7F0600CF - public const int notification_top_pad = 2131099855; - - // aapt resource value: 0x7F0600D0 - public const int notification_top_pad_large_text = 2131099856; - - // aapt resource value: 0x7F0600D1 - public const int subtitle_corner_radius = 2131099857; - - // aapt resource value: 0x7F0600D2 - public const int subtitle_outline_width = 2131099858; - - // aapt resource value: 0x7F0600D3 - public const int subtitle_shadow_offset = 2131099859; - - // aapt resource value: 0x7F0600D4 - public const int subtitle_shadow_radius = 2131099860; - - // aapt resource value: 0x7F0600D5 - public const int tooltip_corner_radius = 2131099861; - - // aapt resource value: 0x7F0600D6 - public const int tooltip_horizontal_padding = 2131099862; - - // aapt resource value: 0x7F0600D7 - public const int tooltip_margin = 2131099863; - - // aapt resource value: 0x7F0600D8 - public const int tooltip_precise_anchor_extra_offset = 2131099864; - - // aapt resource value: 0x7F0600D9 - public const int tooltip_precise_anchor_threshold = 2131099865; - - // aapt resource value: 0x7F0600DA - public const int tooltip_vertical_padding = 2131099866; - - // aapt resource value: 0x7F0600DB - public const int tooltip_y_offset_non_touch = 2131099867; - - // aapt resource value: 0x7F0600DC - public const int tooltip_y_offset_touch = 2131099868; - - static Dimension() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Dimension() - { - } - } - - public partial class Drawable - { - - // aapt resource value: 0x7F070006 - public const int abc_ab_share_pack_mtrl_alpha = 2131165190; - - // aapt resource value: 0x7F070007 - public const int abc_action_bar_item_background_material = 2131165191; - - // aapt resource value: 0x7F070008 - public const int abc_btn_borderless_material = 2131165192; - - // aapt resource value: 0x7F070009 - public const int abc_btn_check_material = 2131165193; - - // aapt resource value: 0x7F07000A - public const int abc_btn_check_to_on_mtrl_000 = 2131165194; - - // aapt resource value: 0x7F07000B - public const int abc_btn_check_to_on_mtrl_015 = 2131165195; - - // aapt resource value: 0x7F07000C - public const int abc_btn_colored_material = 2131165196; - - // aapt resource value: 0x7F07000D - public const int abc_btn_default_mtrl_shape = 2131165197; - - // aapt resource value: 0x7F07000E - public const int abc_btn_radio_material = 2131165198; - - // aapt resource value: 0x7F07000F - public const int abc_btn_radio_to_on_mtrl_000 = 2131165199; - - // aapt resource value: 0x7F070010 - public const int abc_btn_radio_to_on_mtrl_015 = 2131165200; - - // aapt resource value: 0x7F070011 - public const int abc_btn_switch_to_on_mtrl_00001 = 2131165201; - - // aapt resource value: 0x7F070012 - public const int abc_btn_switch_to_on_mtrl_00012 = 2131165202; - - // aapt resource value: 0x7F070013 - public const int abc_cab_background_internal_bg = 2131165203; - - // aapt resource value: 0x7F070014 - public const int abc_cab_background_top_material = 2131165204; - - // aapt resource value: 0x7F070015 - public const int abc_cab_background_top_mtrl_alpha = 2131165205; - - // aapt resource value: 0x7F070016 - public const int abc_control_background_material = 2131165206; - - // aapt resource value: 0x7F070017 - public const int abc_dialog_material_background = 2131165207; - - // aapt resource value: 0x7F070018 - public const int abc_edit_text_material = 2131165208; - - // aapt resource value: 0x7F070019 - public const int abc_ic_ab_back_material = 2131165209; - - // aapt resource value: 0x7F07001A - public const int abc_ic_arrow_drop_right_black_24dp = 2131165210; - - // aapt resource value: 0x7F07001B - public const int abc_ic_clear_material = 2131165211; - - // aapt resource value: 0x7F07001C - public const int abc_ic_commit_search_api_mtrl_alpha = 2131165212; - - // aapt resource value: 0x7F07001D - public const int abc_ic_go_search_api_material = 2131165213; - - // aapt resource value: 0x7F07001E - public const int abc_ic_menu_copy_mtrl_am_alpha = 2131165214; - - // aapt resource value: 0x7F07001F - public const int abc_ic_menu_cut_mtrl_alpha = 2131165215; - - // aapt resource value: 0x7F070020 - public const int abc_ic_menu_overflow_material = 2131165216; - - // aapt resource value: 0x7F070021 - public const int abc_ic_menu_paste_mtrl_am_alpha = 2131165217; - - // aapt resource value: 0x7F070022 - public const int abc_ic_menu_selectall_mtrl_alpha = 2131165218; - - // aapt resource value: 0x7F070023 - public const int abc_ic_menu_share_mtrl_alpha = 2131165219; - - // aapt resource value: 0x7F070024 - public const int abc_ic_search_api_material = 2131165220; - - // aapt resource value: 0x7F070025 - public const int abc_ic_star_black_16dp = 2131165221; - - // aapt resource value: 0x7F070026 - public const int abc_ic_star_black_36dp = 2131165222; - - // aapt resource value: 0x7F070027 - public const int abc_ic_star_black_48dp = 2131165223; - - // aapt resource value: 0x7F070028 - public const int abc_ic_star_half_black_16dp = 2131165224; - - // aapt resource value: 0x7F070029 - public const int abc_ic_star_half_black_36dp = 2131165225; - - // aapt resource value: 0x7F07002A - public const int abc_ic_star_half_black_48dp = 2131165226; - - // aapt resource value: 0x7F07002B - public const int abc_ic_voice_search_api_material = 2131165227; - - // aapt resource value: 0x7F07002C - public const int abc_item_background_holo_dark = 2131165228; - - // aapt resource value: 0x7F07002D - public const int abc_item_background_holo_light = 2131165229; - - // aapt resource value: 0x7F07002E - public const int abc_list_divider_material = 2131165230; - - // aapt resource value: 0x7F07002F - public const int abc_list_divider_mtrl_alpha = 2131165231; - - // aapt resource value: 0x7F070030 - public const int abc_list_focused_holo = 2131165232; - - // aapt resource value: 0x7F070031 - public const int abc_list_longpressed_holo = 2131165233; - - // aapt resource value: 0x7F070032 - public const int abc_list_pressed_holo_dark = 2131165234; - - // aapt resource value: 0x7F070033 - public const int abc_list_pressed_holo_light = 2131165235; - - // aapt resource value: 0x7F070034 - public const int abc_list_selector_background_transition_holo_dark = 2131165236; - - // aapt resource value: 0x7F070035 - public const int abc_list_selector_background_transition_holo_light = 2131165237; - - // aapt resource value: 0x7F070036 - public const int abc_list_selector_disabled_holo_dark = 2131165238; - - // aapt resource value: 0x7F070037 - public const int abc_list_selector_disabled_holo_light = 2131165239; - - // aapt resource value: 0x7F070038 - public const int abc_list_selector_holo_dark = 2131165240; - - // aapt resource value: 0x7F070039 - public const int abc_list_selector_holo_light = 2131165241; - - // aapt resource value: 0x7F07003A - public const int abc_menu_hardkey_panel_mtrl_mult = 2131165242; - - // aapt resource value: 0x7F07003B - public const int abc_popup_background_mtrl_mult = 2131165243; - - // aapt resource value: 0x7F07003C - public const int abc_ratingbar_indicator_material = 2131165244; - - // aapt resource value: 0x7F07003D - public const int abc_ratingbar_material = 2131165245; - - // aapt resource value: 0x7F07003E - public const int abc_ratingbar_small_material = 2131165246; - - // aapt resource value: 0x7F07003F - public const int abc_scrubber_control_off_mtrl_alpha = 2131165247; - - // aapt resource value: 0x7F070040 - public const int abc_scrubber_control_to_pressed_mtrl_000 = 2131165248; - - // aapt resource value: 0x7F070041 - public const int abc_scrubber_control_to_pressed_mtrl_005 = 2131165249; - - // aapt resource value: 0x7F070042 - public const int abc_scrubber_primary_mtrl_alpha = 2131165250; - - // aapt resource value: 0x7F070043 - public const int abc_scrubber_track_mtrl_alpha = 2131165251; - - // aapt resource value: 0x7F070044 - public const int abc_seekbar_thumb_material = 2131165252; - - // aapt resource value: 0x7F070045 - public const int abc_seekbar_tick_mark_material = 2131165253; - - // aapt resource value: 0x7F070046 - public const int abc_seekbar_track_material = 2131165254; - - // aapt resource value: 0x7F070047 - public const int abc_spinner_mtrl_am_alpha = 2131165255; - - // aapt resource value: 0x7F070048 - public const int abc_spinner_textfield_background_material = 2131165256; - - // aapt resource value: 0x7F070049 - public const int abc_switch_thumb_material = 2131165257; - - // aapt resource value: 0x7F07004A - public const int abc_switch_track_mtrl_alpha = 2131165258; - - // aapt resource value: 0x7F07004B - public const int abc_tab_indicator_material = 2131165259; - - // aapt resource value: 0x7F07004C - public const int abc_tab_indicator_mtrl_alpha = 2131165260; - - // aapt resource value: 0x7F070054 - public const int abc_textfield_activated_mtrl_alpha = 2131165268; - - // aapt resource value: 0x7F070055 - public const int abc_textfield_default_mtrl_alpha = 2131165269; - - // aapt resource value: 0x7F070056 - public const int abc_textfield_search_activated_mtrl_alpha = 2131165270; - - // aapt resource value: 0x7F070057 - public const int abc_textfield_search_default_mtrl_alpha = 2131165271; - - // aapt resource value: 0x7F070058 - public const int abc_textfield_search_material = 2131165272; - - // aapt resource value: 0x7F07004D - public const int abc_text_cursor_material = 2131165261; - - // aapt resource value: 0x7F07004E - public const int abc_text_select_handle_left_mtrl_dark = 2131165262; - - // aapt resource value: 0x7F07004F - public const int abc_text_select_handle_left_mtrl_light = 2131165263; - - // aapt resource value: 0x7F070050 - public const int abc_text_select_handle_middle_mtrl_dark = 2131165264; - - // aapt resource value: 0x7F070051 - public const int abc_text_select_handle_middle_mtrl_light = 2131165265; - - // aapt resource value: 0x7F070052 - public const int abc_text_select_handle_right_mtrl_dark = 2131165266; - - // aapt resource value: 0x7F070053 - public const int abc_text_select_handle_right_mtrl_light = 2131165267; - - // aapt resource value: 0x7F070059 - public const int abc_vector_test = 2131165273; - - // aapt resource value: 0x7F07005A - public const int avd_hide_password = 2131165274; - - // aapt resource value: 0x7F07005B - public const int avd_show_password = 2131165275; - - // aapt resource value: 0x7F07005C - public const int design_bottom_navigation_item_background = 2131165276; - - // aapt resource value: 0x7F07005D - public const int design_fab_background = 2131165277; - - // aapt resource value: 0x7F07005E - public const int design_ic_visibility = 2131165278; - - // aapt resource value: 0x7F07005F - public const int design_ic_visibility_off = 2131165279; - - // aapt resource value: 0x7F070060 - public const int design_password_eye = 2131165280; - - // aapt resource value: 0x7F070061 - public const int design_snackbar_background = 2131165281; - - // aapt resource value: 0x7F070062 - public const int ic_mtrl_chip_checked_black = 2131165282; - - // aapt resource value: 0x7F070063 - public const int ic_mtrl_chip_checked_circle = 2131165283; - - // aapt resource value: 0x7F070064 - public const int ic_mtrl_chip_close_circle = 2131165284; - - // aapt resource value: 0x7F070065 - public const int mtrl_snackbar_background = 2131165285; - - // aapt resource value: 0x7F070066 - public const int mtrl_tabs_default_indicator = 2131165286; - - // aapt resource value: 0x7F070067 - public const int navigation_empty_icon = 2131165287; - - // aapt resource value: 0x7F070068 - public const int notification_action_background = 2131165288; - - // aapt resource value: 0x7F070069 - public const int notification_bg = 2131165289; - - // aapt resource value: 0x7F07006A - public const int notification_bg_low = 2131165290; - - // aapt resource value: 0x7F07006B - public const int notification_bg_low_normal = 2131165291; - - // aapt resource value: 0x7F07006C - public const int notification_bg_low_pressed = 2131165292; - - // aapt resource value: 0x7F07006D - public const int notification_bg_normal = 2131165293; - - // aapt resource value: 0x7F07006E - public const int notification_bg_normal_pressed = 2131165294; - - // aapt resource value: 0x7F07006F - public const int notification_icon_background = 2131165295; - - // aapt resource value: 0x7F070070 - public const int notification_template_icon_bg = 2131165296; - - // aapt resource value: 0x7F070071 - public const int notification_template_icon_low_bg = 2131165297; - - // aapt resource value: 0x7F070072 - public const int notification_tile_bg = 2131165298; - - // aapt resource value: 0x7F070073 - public const int notify_panel_notification_icon_bg = 2131165299; - - // aapt resource value: 0x7F070074 - public const int tooltip_frame_dark = 2131165300; - - // aapt resource value: 0x7F070075 - public const int tooltip_frame_light = 2131165301; - - static Drawable() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Drawable() - { - } - } - - public partial class Id - { - - // aapt resource value: 0x7F080006 - public const int action0 = 2131230726; - - // aapt resource value: 0x7F080018 - public const int actions = 2131230744; - - // aapt resource value: 0x7F080007 - public const int action_bar = 2131230727; - - // aapt resource value: 0x7F080008 - public const int action_bar_activity_content = 2131230728; - - // aapt resource value: 0x7F080009 - public const int action_bar_container = 2131230729; - - // aapt resource value: 0x7F08000A - public const int action_bar_root = 2131230730; - - // aapt resource value: 0x7F08000B - public const int action_bar_spinner = 2131230731; - - // aapt resource value: 0x7F08000C - public const int action_bar_subtitle = 2131230732; - - // aapt resource value: 0x7F08000D - public const int action_bar_title = 2131230733; - - // aapt resource value: 0x7F08000E - public const int action_container = 2131230734; - - // aapt resource value: 0x7F08000F - public const int action_context_bar = 2131230735; - - // aapt resource value: 0x7F080010 - public const int action_divider = 2131230736; - - // aapt resource value: 0x7F080011 - public const int action_image = 2131230737; - - // aapt resource value: 0x7F080012 - public const int action_menu_divider = 2131230738; - - // aapt resource value: 0x7F080013 - public const int action_menu_presenter = 2131230739; - - // aapt resource value: 0x7F080014 - public const int action_mode_bar = 2131230740; - - // aapt resource value: 0x7F080015 - public const int action_mode_bar_stub = 2131230741; - - // aapt resource value: 0x7F080016 - public const int action_mode_close_button = 2131230742; - - // aapt resource value: 0x7F080017 - public const int action_text = 2131230743; - - // aapt resource value: 0x7F080019 - public const int activity_chooser_view_content = 2131230745; - - // aapt resource value: 0x7F08001A - public const int add = 2131230746; - - // aapt resource value: 0x7F08001B - public const int alertTitle = 2131230747; - - // aapt resource value: 0x7F08001C - public const int all = 2131230748; - - // aapt resource value: 0x7F080000 - public const int ALT = 2131230720; - - // aapt resource value: 0x7F08001D - public const int always = 2131230749; - - // aapt resource value: 0x7F08001E - public const int async = 2131230750; - - // aapt resource value: 0x7F08001F - public const int auto = 2131230751; - - // aapt resource value: 0x7F080020 - public const int beginning = 2131230752; - - // aapt resource value: 0x7F080021 - public const int blocking = 2131230753; - - // aapt resource value: 0x7F080022 - public const int bottom = 2131230754; - - // aapt resource value: 0x7F080023 - public const int bottomtab_navarea = 2131230755; - - // aapt resource value: 0x7F080024 - public const int bottomtab_tabbar = 2131230756; - - // aapt resource value: 0x7F080025 - public const int browser_actions_header_text = 2131230757; - - // aapt resource value: 0x7F080028 - public const int browser_actions_menu_items = 2131230760; - - // aapt resource value: 0x7F080026 - public const int browser_actions_menu_item_icon = 2131230758; - - // aapt resource value: 0x7F080027 - public const int browser_actions_menu_item_text = 2131230759; - - // aapt resource value: 0x7F080029 - public const int browser_actions_menu_view = 2131230761; - - // aapt resource value: 0x7F08002A - public const int buttonPanel = 2131230762; - - // aapt resource value: 0x7F08002B - public const int cancel_action = 2131230763; - - // aapt resource value: 0x7F08002C - public const int center = 2131230764; - - // aapt resource value: 0x7F08002D - public const int center_horizontal = 2131230765; - - // aapt resource value: 0x7F08002E - public const int center_vertical = 2131230766; - - // aapt resource value: 0x7F08002F - public const int checkbox = 2131230767; - - // aapt resource value: 0x7F080030 - public const int chronometer = 2131230768; - - // aapt resource value: 0x7F080031 - public const int clip_horizontal = 2131230769; - - // aapt resource value: 0x7F080032 - public const int clip_vertical = 2131230770; - - // aapt resource value: 0x7F080033 - public const int collapseActionView = 2131230771; - - // aapt resource value: 0x7F080034 - public const int container = 2131230772; - - // aapt resource value: 0x7F080035 - public const int content = 2131230773; - - // aapt resource value: 0x7F080036 - public const int contentPanel = 2131230774; - - // aapt resource value: 0x7F080037 - public const int coordinator = 2131230775; - - // aapt resource value: 0x7F080001 - public const int CTRL = 2131230721; - - // aapt resource value: 0x7F080038 - public const int custom = 2131230776; - - // aapt resource value: 0x7F080039 - public const int customPanel = 2131230777; - - // aapt resource value: 0x7F08003A - public const int decor_content_parent = 2131230778; - - // aapt resource value: 0x7F08003B - public const int default_activity_button = 2131230779; - - // aapt resource value: 0x7F08003C - public const int design_bottom_sheet = 2131230780; - - // aapt resource value: 0x7F08003D - public const int design_menu_item_action_area = 2131230781; - - // aapt resource value: 0x7F08003E - public const int design_menu_item_action_area_stub = 2131230782; - - // aapt resource value: 0x7F08003F - public const int design_menu_item_text = 2131230783; - - // aapt resource value: 0x7F080040 - public const int design_navigation_view = 2131230784; - - // aapt resource value: 0x7F080041 - public const int disableHome = 2131230785; - - // aapt resource value: 0x7F080042 - public const int edit_query = 2131230786; - - // aapt resource value: 0x7F080043 - public const int end = 2131230787; - - // aapt resource value: 0x7F080044 - public const int end_padder = 2131230788; - - // aapt resource value: 0x7F080045 - public const int enterAlways = 2131230789; - - // aapt resource value: 0x7F080046 - public const int enterAlwaysCollapsed = 2131230790; - - // aapt resource value: 0x7F080047 - public const int exitUntilCollapsed = 2131230791; - - // aapt resource value: 0x7F080049 - public const int expanded_menu = 2131230793; - - // aapt resource value: 0x7F080048 - public const int expand_activities_button = 2131230792; - - // aapt resource value: 0x7F08004A - public const int fill = 2131230794; - - // aapt resource value: 0x7F08004D - public const int filled = 2131230797; - - // aapt resource value: 0x7F08004B - public const int fill_horizontal = 2131230795; - - // aapt resource value: 0x7F08004C - public const int fill_vertical = 2131230796; - - // aapt resource value: 0x7F08004E - public const int @fixed = 2131230798; - - // aapt resource value: 0x7F08004F - public const int flyoutcontent_appbar = 2131230799; - - // aapt resource value: 0x7F080050 - public const int flyoutcontent_recycler = 2131230800; - - // aapt resource value: 0x7F080051 - public const int forever = 2131230801; - - // aapt resource value: 0x7F080002 - public const int FUNCTION = 2131230722; - - // aapt resource value: 0x7F080052 - public const int ghost_view = 2131230802; - - // aapt resource value: 0x7F080053 - public const int group_divider = 2131230803; - - // aapt resource value: 0x7F080054 - public const int home = 2131230804; - - // aapt resource value: 0x7F080055 - public const int homeAsUp = 2131230805; - - // aapt resource value: 0x7F080056 - public const int icon = 2131230806; - - // aapt resource value: 0x7F080057 - public const int icon_group = 2131230807; - - // aapt resource value: 0x7F080058 - public const int ifRoom = 2131230808; - - // aapt resource value: 0x7F080059 - public const int image = 2131230809; - - // aapt resource value: 0x7F08005A - public const int info = 2131230810; - - // aapt resource value: 0x7F08005B - public const int italic = 2131230811; - - // aapt resource value: 0x7F08005C - public const int item_touch_helper_previous_elevation = 2131230812; - - // aapt resource value: 0x7F08005D - public const int labeled = 2131230813; - - // aapt resource value: 0x7F08005E - public const int largeLabel = 2131230814; - - // aapt resource value: 0x7F08005F - public const int left = 2131230815; - - // aapt resource value: 0x7F080060 - public const int line1 = 2131230816; - - // aapt resource value: 0x7F080061 - public const int line3 = 2131230817; - - // aapt resource value: 0x7F080062 - public const int listMode = 2131230818; - - // aapt resource value: 0x7F080063 - public const int list_item = 2131230819; - - // aapt resource value: 0x7F080064 - public const int main_appbar = 2131230820; - - // aapt resource value: 0x7F080065 - public const int main_tablayout = 2131230821; - - // aapt resource value: 0x7F080066 - public const int main_toolbar = 2131230822; - - // aapt resource value: 0x7F080067 - public const int main_viewpager = 2131230823; - - // aapt resource value: 0x7F080068 - public const int masked = 2131230824; - - // aapt resource value: 0x7F080069 - public const int media_actions = 2131230825; - - // aapt resource value: 0x7F08006A - public const int message = 2131230826; - - // aapt resource value: 0x7F080003 - public const int META = 2131230723; - - // aapt resource value: 0x7F08006B - public const int middle = 2131230827; - - // aapt resource value: 0x7F08006C - public const int mini = 2131230828; - - // aapt resource value: 0x7F08006D - public const int mtrl_child_content_container = 2131230829; - - // aapt resource value: 0x7F08006E - public const int mtrl_internal_children_alpha_tag = 2131230830; - - // aapt resource value: 0x7F08006F - public const int multiply = 2131230831; - - // aapt resource value: 0x7F080070 - public const int navigation_header_container = 2131230832; - - // aapt resource value: 0x7F080071 - public const int never = 2131230833; - - // aapt resource value: 0x7F080072 - public const int none = 2131230834; - - // aapt resource value: 0x7F080073 - public const int normal = 2131230835; - - // aapt resource value: 0x7F080074 - public const int notification_background = 2131230836; - - // aapt resource value: 0x7F080075 - public const int notification_main_column = 2131230837; - - // aapt resource value: 0x7F080076 - public const int notification_main_column_container = 2131230838; - - // aapt resource value: 0x7F080077 - public const int outline = 2131230839; - - // aapt resource value: 0x7F080078 - public const int parallax = 2131230840; - - // aapt resource value: 0x7F080079 - public const int parentPanel = 2131230841; - - // aapt resource value: 0x7F08007A - public const int parent_matrix = 2131230842; - - // aapt resource value: 0x7F08007B - public const int pin = 2131230843; - - // aapt resource value: 0x7F08007C - public const int progress_circular = 2131230844; - - // aapt resource value: 0x7F08007D - public const int progress_horizontal = 2131230845; - - // aapt resource value: 0x7F08007E - public const int radio = 2131230846; - - // aapt resource value: 0x7F08007F - public const int right = 2131230847; - - // aapt resource value: 0x7F080080 - public const int right_icon = 2131230848; - - // aapt resource value: 0x7F080081 - public const int right_side = 2131230849; - - // aapt resource value: 0x7F080082 - public const int save_image_matrix = 2131230850; - - // aapt resource value: 0x7F080083 - public const int save_non_transition_alpha = 2131230851; - - // aapt resource value: 0x7F080084 - public const int save_scale_type = 2131230852; - - // aapt resource value: 0x7F080085 - public const int screen = 2131230853; - - // aapt resource value: 0x7F080086 - public const int scroll = 2131230854; - - // aapt resource value: 0x7F08008A - public const int scrollable = 2131230858; - - // aapt resource value: 0x7F080087 - public const int scrollIndicatorDown = 2131230855; - - // aapt resource value: 0x7F080088 - public const int scrollIndicatorUp = 2131230856; - - // aapt resource value: 0x7F080089 - public const int scrollView = 2131230857; - - // aapt resource value: 0x7F08008B - public const int search_badge = 2131230859; - - // aapt resource value: 0x7F08008C - public const int search_bar = 2131230860; - - // aapt resource value: 0x7F08008D - public const int search_button = 2131230861; - - // aapt resource value: 0x7F08008E - public const int search_close_btn = 2131230862; - - // aapt resource value: 0x7F08008F - public const int search_edit_frame = 2131230863; - - // aapt resource value: 0x7F080090 - public const int search_go_btn = 2131230864; - - // aapt resource value: 0x7F080091 - public const int search_mag_icon = 2131230865; - - // aapt resource value: 0x7F080092 - public const int search_plate = 2131230866; - - // aapt resource value: 0x7F080093 - public const int search_src_text = 2131230867; - - // aapt resource value: 0x7F080094 - public const int search_voice_btn = 2131230868; - - // aapt resource value: 0x7F080096 - public const int selected = 2131230870; - - // aapt resource value: 0x7F080095 - public const int select_dialog_listview = 2131230869; - - // aapt resource value: 0x7F080097 - public const int shellcontent_appbar = 2131230871; - - // aapt resource value: 0x7F080098 - public const int shellcontent_toolbar = 2131230872; - - // aapt resource value: 0x7F080004 - public const int SHIFT = 2131230724; - - // aapt resource value: 0x7F080099 - public const int shortcut = 2131230873; - - // aapt resource value: 0x7F08009A - public const int showCustom = 2131230874; - - // aapt resource value: 0x7F08009B - public const int showHome = 2131230875; - - // aapt resource value: 0x7F08009C - public const int showTitle = 2131230876; - - // aapt resource value: 0x7F08009D - public const int sliding_tabs = 2131230877; - - // aapt resource value: 0x7F08009E - public const int smallLabel = 2131230878; - - // aapt resource value: 0x7F08009F - public const int snackbar_action = 2131230879; - - // aapt resource value: 0x7F0800A0 - public const int snackbar_text = 2131230880; - - // aapt resource value: 0x7F0800A1 - public const int snap = 2131230881; - - // aapt resource value: 0x7F0800A2 - public const int snapMargins = 2131230882; - - // aapt resource value: 0x7F0800A3 - public const int spacer = 2131230883; - - // aapt resource value: 0x7F0800A4 - public const int split_action_bar = 2131230884; - - // aapt resource value: 0x7F0800A5 - public const int src_atop = 2131230885; - - // aapt resource value: 0x7F0800A6 - public const int src_in = 2131230886; - - // aapt resource value: 0x7F0800A7 - public const int src_over = 2131230887; - - // aapt resource value: 0x7F0800A8 - public const int start = 2131230888; - - // aapt resource value: 0x7F0800A9 - public const int status_bar_latest_event_content = 2131230889; - - // aapt resource value: 0x7F0800AA - public const int stretch = 2131230890; - - // aapt resource value: 0x7F0800AB - public const int submenuarrow = 2131230891; - - // aapt resource value: 0x7F0800AC - public const int submit_area = 2131230892; - - // aapt resource value: 0x7F080005 - public const int SYM = 2131230725; - - // aapt resource value: 0x7F0800AD - public const int tabMode = 2131230893; - - // aapt resource value: 0x7F0800AE - public const int tag_transition_group = 2131230894; - - // aapt resource value: 0x7F0800AF - public const int tag_unhandled_key_event_manager = 2131230895; - - // aapt resource value: 0x7F0800B0 - public const int tag_unhandled_key_listeners = 2131230896; - - // aapt resource value: 0x7F0800B1 - public const int text = 2131230897; - - // aapt resource value: 0x7F0800B2 - public const int text2 = 2131230898; - - // aapt resource value: 0x7F0800B7 - public const int textinput_counter = 2131230903; - - // aapt resource value: 0x7F0800B8 - public const int textinput_error = 2131230904; - - // aapt resource value: 0x7F0800B9 - public const int textinput_helper_text = 2131230905; - - // aapt resource value: 0x7F0800B3 - public const int textSpacerNoButtons = 2131230899; - - // aapt resource value: 0x7F0800B4 - public const int textSpacerNoTitle = 2131230900; - - // aapt resource value: 0x7F0800B5 - public const int textStart = 2131230901; - - // aapt resource value: 0x7F0800B6 - public const int text_input_password_toggle = 2131230902; - - // aapt resource value: 0x7F0800BA - public const int time = 2131230906; - - // aapt resource value: 0x7F0800BB - public const int title = 2131230907; - - // aapt resource value: 0x7F0800BC - public const int titleDividerNoCustom = 2131230908; - - // aapt resource value: 0x7F0800BD - public const int title_template = 2131230909; - - // aapt resource value: 0x7F0800BE - public const int toolbar = 2131230910; - - // aapt resource value: 0x7F0800BF - public const int top = 2131230911; - - // aapt resource value: 0x7F0800C0 - public const int topPanel = 2131230912; - - // aapt resource value: 0x7F0800C1 - public const int touch_outside = 2131230913; - - // aapt resource value: 0x7F0800C2 - public const int transition_current_scene = 2131230914; - - // aapt resource value: 0x7F0800C3 - public const int transition_layout_save = 2131230915; - - // aapt resource value: 0x7F0800C4 - public const int transition_position = 2131230916; - - // aapt resource value: 0x7F0800C5 - public const int transition_scene_layoutid_cache = 2131230917; - - // aapt resource value: 0x7F0800C6 - public const int transition_transform = 2131230918; - - // aapt resource value: 0x7F0800C7 - public const int uniform = 2131230919; - - // aapt resource value: 0x7F0800C8 - public const int unlabeled = 2131230920; - - // aapt resource value: 0x7F0800C9 - public const int up = 2131230921; - - // aapt resource value: 0x7F0800CA - public const int useLogo = 2131230922; - - // aapt resource value: 0x7F0800CB - public const int view_offset_helper = 2131230923; - - // aapt resource value: 0x7F0800CC - public const int visible = 2131230924; - - // aapt resource value: 0x7F0800CD - public const int withText = 2131230925; - - // aapt resource value: 0x7F0800CE - public const int wrap_content = 2131230926; - - static Id() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Id() - { - } - } - - public partial class Integer - { - - // aapt resource value: 0x7F090000 - public const int abc_config_activityDefaultDur = 2131296256; - - // aapt resource value: 0x7F090001 - public const int abc_config_activityShortDur = 2131296257; - - // aapt resource value: 0x7F090002 - public const int app_bar_elevation_anim_duration = 2131296258; - - // aapt resource value: 0x7F090003 - public const int bottom_sheet_slide_duration = 2131296259; - - // aapt resource value: 0x7F090004 - public const int cancel_button_image_alpha = 2131296260; - - // aapt resource value: 0x7F090005 - public const int config_tooltipAnimTime = 2131296261; - - // aapt resource value: 0x7F090006 - public const int design_snackbar_text_max_lines = 2131296262; - - // aapt resource value: 0x7F090007 - public const int design_tab_indicator_anim_duration_ms = 2131296263; - - // aapt resource value: 0x7F090008 - public const int hide_password_duration = 2131296264; - - // aapt resource value: 0x7F090009 - public const int mtrl_btn_anim_delay_ms = 2131296265; - - // aapt resource value: 0x7F09000A - public const int mtrl_btn_anim_duration_ms = 2131296266; - - // aapt resource value: 0x7F09000B - public const int mtrl_chip_anim_duration = 2131296267; - - // aapt resource value: 0x7F09000C - public const int mtrl_tab_indicator_anim_duration_ms = 2131296268; - - // aapt resource value: 0x7F09000D - public const int show_password_duration = 2131296269; - - // aapt resource value: 0x7F09000E - public const int status_bar_notification_info_maxnum = 2131296270; - - static Integer() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Integer() - { - } - } - - public partial class Interpolator - { - - // aapt resource value: 0x7F0A0000 - public const int mtrl_fast_out_linear_in = 2131361792; - - // aapt resource value: 0x7F0A0001 - public const int mtrl_fast_out_slow_in = 2131361793; - - // aapt resource value: 0x7F0A0002 - public const int mtrl_linear = 2131361794; - - // aapt resource value: 0x7F0A0003 - public const int mtrl_linear_out_slow_in = 2131361795; - - static Interpolator() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Interpolator() - { - } - } - - public partial class Layout - { - - // aapt resource value: 0x7F0B0000 - public const int abc_action_bar_title_item = 2131427328; - - // aapt resource value: 0x7F0B0001 - public const int abc_action_bar_up_container = 2131427329; - - // aapt resource value: 0x7F0B0002 - public const int abc_action_menu_item_layout = 2131427330; - - // aapt resource value: 0x7F0B0003 - public const int abc_action_menu_layout = 2131427331; - - // aapt resource value: 0x7F0B0004 - public const int abc_action_mode_bar = 2131427332; - - // aapt resource value: 0x7F0B0005 - public const int abc_action_mode_close_item_material = 2131427333; - - // aapt resource value: 0x7F0B0006 - public const int abc_activity_chooser_view = 2131427334; - - // aapt resource value: 0x7F0B0007 - public const int abc_activity_chooser_view_list_item = 2131427335; - - // aapt resource value: 0x7F0B0008 - public const int abc_alert_dialog_button_bar_material = 2131427336; - - // aapt resource value: 0x7F0B0009 - public const int abc_alert_dialog_material = 2131427337; - - // aapt resource value: 0x7F0B000A - public const int abc_alert_dialog_title_material = 2131427338; - - // aapt resource value: 0x7F0B000B - public const int abc_cascading_menu_item_layout = 2131427339; - - // aapt resource value: 0x7F0B000C - public const int abc_dialog_title_material = 2131427340; - - // aapt resource value: 0x7F0B000D - public const int abc_expanded_menu_layout = 2131427341; - - // aapt resource value: 0x7F0B000E - public const int abc_list_menu_item_checkbox = 2131427342; - - // aapt resource value: 0x7F0B000F - public const int abc_list_menu_item_icon = 2131427343; - - // aapt resource value: 0x7F0B0010 - public const int abc_list_menu_item_layout = 2131427344; - - // aapt resource value: 0x7F0B0011 - public const int abc_list_menu_item_radio = 2131427345; - - // aapt resource value: 0x7F0B0012 - public const int abc_popup_menu_header_item_layout = 2131427346; - - // aapt resource value: 0x7F0B0013 - public const int abc_popup_menu_item_layout = 2131427347; - - // aapt resource value: 0x7F0B0014 - public const int abc_screen_content_include = 2131427348; - - // aapt resource value: 0x7F0B0015 - public const int abc_screen_simple = 2131427349; - - // aapt resource value: 0x7F0B0016 - public const int abc_screen_simple_overlay_action_mode = 2131427350; - - // aapt resource value: 0x7F0B0017 - public const int abc_screen_toolbar = 2131427351; - - // aapt resource value: 0x7F0B0018 - public const int abc_search_dropdown_item_icons_2line = 2131427352; - - // aapt resource value: 0x7F0B0019 - public const int abc_search_view = 2131427353; - - // aapt resource value: 0x7F0B001A - public const int abc_select_dialog_material = 2131427354; - - // aapt resource value: 0x7F0B001B - public const int abc_tooltip = 2131427355; - - // aapt resource value: 0x7F0B001C - public const int BottomTabLayout = 2131427356; - - // aapt resource value: 0x7F0B001D - public const int browser_actions_context_menu_page = 2131427357; - - // aapt resource value: 0x7F0B001E - public const int browser_actions_context_menu_row = 2131427358; - - // aapt resource value: 0x7F0B001F - public const int design_bottom_navigation_item = 2131427359; - - // aapt resource value: 0x7F0B0020 - public const int design_bottom_sheet_dialog = 2131427360; - - // aapt resource value: 0x7F0B0021 - public const int design_layout_snackbar = 2131427361; - - // aapt resource value: 0x7F0B0022 - public const int design_layout_snackbar_include = 2131427362; - - // aapt resource value: 0x7F0B0023 - public const int design_layout_tab_icon = 2131427363; - - // aapt resource value: 0x7F0B0024 - public const int design_layout_tab_text = 2131427364; - - // aapt resource value: 0x7F0B0025 - public const int design_menu_item_action_area = 2131427365; - - // aapt resource value: 0x7F0B0026 - public const int design_navigation_item = 2131427366; - - // aapt resource value: 0x7F0B0027 - public const int design_navigation_item_header = 2131427367; - - // aapt resource value: 0x7F0B0028 - public const int design_navigation_item_separator = 2131427368; - - // aapt resource value: 0x7F0B0029 - public const int design_navigation_item_subheader = 2131427369; - - // aapt resource value: 0x7F0B002A - public const int design_navigation_menu = 2131427370; - - // aapt resource value: 0x7F0B002B - public const int design_navigation_menu_item = 2131427371; - - // aapt resource value: 0x7F0B002C - public const int design_text_input_password_icon = 2131427372; - - // aapt resource value: 0x7F0B002D - public const int FlyoutContent = 2131427373; - - // aapt resource value: 0x7F0B002E - public const int mtrl_layout_snackbar = 2131427374; - - // aapt resource value: 0x7F0B002F - public const int mtrl_layout_snackbar_include = 2131427375; - - // aapt resource value: 0x7F0B0030 - public const int notification_action = 2131427376; - - // aapt resource value: 0x7F0B0031 - public const int notification_action_tombstone = 2131427377; - - // aapt resource value: 0x7F0B0032 - public const int notification_media_action = 2131427378; - - // aapt resource value: 0x7F0B0033 - public const int notification_media_cancel_action = 2131427379; - - // aapt resource value: 0x7F0B0034 - public const int notification_template_big_media = 2131427380; - - // aapt resource value: 0x7F0B0035 - public const int notification_template_big_media_custom = 2131427381; - - // aapt resource value: 0x7F0B0036 - public const int notification_template_big_media_narrow = 2131427382; - - // aapt resource value: 0x7F0B0037 - public const int notification_template_big_media_narrow_custom = 2131427383; - - // aapt resource value: 0x7F0B0038 - public const int notification_template_custom_big = 2131427384; - - // aapt resource value: 0x7F0B0039 - public const int notification_template_icon_group = 2131427385; - - // aapt resource value: 0x7F0B003A - public const int notification_template_lines_media = 2131427386; - - // aapt resource value: 0x7F0B003B - public const int notification_template_media = 2131427387; - - // aapt resource value: 0x7F0B003C - public const int notification_template_media_custom = 2131427388; - - // aapt resource value: 0x7F0B003D - public const int notification_template_part_chronometer = 2131427389; - - // aapt resource value: 0x7F0B003E - public const int notification_template_part_time = 2131427390; - - // aapt resource value: 0x7F0B003F - public const int RootLayout = 2131427391; - - // aapt resource value: 0x7F0B0040 - public const int select_dialog_item_material = 2131427392; - - // aapt resource value: 0x7F0B0041 - public const int select_dialog_multichoice_material = 2131427393; - - // aapt resource value: 0x7F0B0042 - public const int select_dialog_singlechoice_material = 2131427394; - - // aapt resource value: 0x7F0B0043 - public const int ShellContent = 2131427395; - - // aapt resource value: 0x7F0B0044 - public const int support_simple_spinner_dropdown_item = 2131427396; - - // aapt resource value: 0x7F0B0045 - public const int Tabbar = 2131427397; - - // aapt resource value: 0x7F0B0046 - public const int Toolbar = 2131427398; - - static Layout() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Layout() - { - } - } - - public partial class Mipmap - { - - // aapt resource value: 0x7F0C0000 - public const int icon = 2131492864; - - // aapt resource value: 0x7F0C0001 - public const int icon_round = 2131492865; - - // aapt resource value: 0x7F0C0002 - public const int launcher_foreground = 2131492866; - - static Mipmap() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Mipmap() - { - } - } - - public partial class String - { - - // aapt resource value: 0x7F0D0000 - public const int abc_action_bar_home_description = 2131558400; - - // aapt resource value: 0x7F0D0001 - public const int abc_action_bar_up_description = 2131558401; - - // aapt resource value: 0x7F0D0002 - public const int abc_action_menu_overflow_description = 2131558402; - - // aapt resource value: 0x7F0D0003 - public const int abc_action_mode_done = 2131558403; - - // aapt resource value: 0x7F0D0005 - public const int abc_activitychooserview_choose_application = 2131558405; - - // aapt resource value: 0x7F0D0004 - public const int abc_activity_chooser_view_see_all = 2131558404; - - // aapt resource value: 0x7F0D0006 - public const int abc_capital_off = 2131558406; - - // aapt resource value: 0x7F0D0007 - public const int abc_capital_on = 2131558407; - - // aapt resource value: 0x7F0D0008 - public const int abc_font_family_body_1_material = 2131558408; - - // aapt resource value: 0x7F0D0009 - public const int abc_font_family_body_2_material = 2131558409; - - // aapt resource value: 0x7F0D000A - public const int abc_font_family_button_material = 2131558410; - - // aapt resource value: 0x7F0D000B - public const int abc_font_family_caption_material = 2131558411; - - // aapt resource value: 0x7F0D000C - public const int abc_font_family_display_1_material = 2131558412; - - // aapt resource value: 0x7F0D000D - public const int abc_font_family_display_2_material = 2131558413; - - // aapt resource value: 0x7F0D000E - public const int abc_font_family_display_3_material = 2131558414; - - // aapt resource value: 0x7F0D000F - public const int abc_font_family_display_4_material = 2131558415; - - // aapt resource value: 0x7F0D0010 - public const int abc_font_family_headline_material = 2131558416; - - // aapt resource value: 0x7F0D0011 - public const int abc_font_family_menu_material = 2131558417; - - // aapt resource value: 0x7F0D0012 - public const int abc_font_family_subhead_material = 2131558418; - - // aapt resource value: 0x7F0D0013 - public const int abc_font_family_title_material = 2131558419; - - // aapt resource value: 0x7F0D0014 - public const int abc_menu_alt_shortcut_label = 2131558420; - - // aapt resource value: 0x7F0D0015 - public const int abc_menu_ctrl_shortcut_label = 2131558421; - - // aapt resource value: 0x7F0D0016 - public const int abc_menu_delete_shortcut_label = 2131558422; - - // aapt resource value: 0x7F0D0017 - public const int abc_menu_enter_shortcut_label = 2131558423; - - // aapt resource value: 0x7F0D0018 - public const int abc_menu_function_shortcut_label = 2131558424; - - // aapt resource value: 0x7F0D0019 - public const int abc_menu_meta_shortcut_label = 2131558425; - - // aapt resource value: 0x7F0D001A - public const int abc_menu_shift_shortcut_label = 2131558426; - - // aapt resource value: 0x7F0D001B - public const int abc_menu_space_shortcut_label = 2131558427; - - // aapt resource value: 0x7F0D001C - public const int abc_menu_sym_shortcut_label = 2131558428; - - // aapt resource value: 0x7F0D001D - public const int abc_prepend_shortcut_label = 2131558429; - - // aapt resource value: 0x7F0D001F - public const int abc_searchview_description_clear = 2131558431; - - // aapt resource value: 0x7F0D0020 - public const int abc_searchview_description_query = 2131558432; - - // aapt resource value: 0x7F0D0021 - public const int abc_searchview_description_search = 2131558433; - - // aapt resource value: 0x7F0D0022 - public const int abc_searchview_description_submit = 2131558434; - - // aapt resource value: 0x7F0D0023 - public const int abc_searchview_description_voice = 2131558435; - - // aapt resource value: 0x7F0D001E - public const int abc_search_hint = 2131558430; - - // aapt resource value: 0x7F0D0024 - public const int abc_shareactionprovider_share_with = 2131558436; - - // aapt resource value: 0x7F0D0025 - public const int abc_shareactionprovider_share_with_application = 2131558437; - - // aapt resource value: 0x7F0D0026 - public const int abc_toolbar_collapse_description = 2131558438; - - // aapt resource value: 0x7F0D0027 - public const int appbar_scrolling_view_behavior = 2131558439; - - // aapt resource value: 0x7F0D0028 - public const int bottom_sheet_behavior = 2131558440; - - // aapt resource value: 0x7F0D0029 - public const int character_counter_content_description = 2131558441; - - // aapt resource value: 0x7F0D002A - public const int character_counter_pattern = 2131558442; - - // aapt resource value: 0x7F0D002B - public const int fab_transformation_scrim_behavior = 2131558443; - - // aapt resource value: 0x7F0D002C - public const int fab_transformation_sheet_behavior = 2131558444; - - // aapt resource value: 0x7F0D002D - public const int hide_bottom_view_on_scroll_behavior = 2131558445; - - // aapt resource value: 0x7F0D002E - public const int mtrl_chip_close_icon_content_description = 2131558446; - - // aapt resource value: 0x7F0D002F - public const int overflow_tab_title = 2131558447; - - // aapt resource value: 0x7F0D0030 - public const int password_toggle_content_description = 2131558448; - - // aapt resource value: 0x7F0D0031 - public const int path_password_eye = 2131558449; - - // aapt resource value: 0x7F0D0032 - public const int path_password_eye_mask_strike_through = 2131558450; - - // aapt resource value: 0x7F0D0033 - public const int path_password_eye_mask_visible = 2131558451; - - // aapt resource value: 0x7F0D0034 - public const int path_password_strike_through = 2131558452; - - // aapt resource value: 0x7F0D0035 - public const int search_menu_title = 2131558453; - - // aapt resource value: 0x7F0D0036 - public const int status_bar_notification_info_overflow = 2131558454; - - static String() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private String() - { - } - } - - public partial class Style - { - - // aapt resource value: 0x7F0E0000 - public const int AlertDialog_AppCompat = 2131623936; - - // aapt resource value: 0x7F0E0001 - public const int AlertDialog_AppCompat_Light = 2131623937; - - // aapt resource value: 0x7F0E0002 - public const int Animation_AppCompat_Dialog = 2131623938; - - // aapt resource value: 0x7F0E0003 - public const int Animation_AppCompat_DropDownUp = 2131623939; - - // aapt resource value: 0x7F0E0004 - public const int Animation_AppCompat_Tooltip = 2131623940; - - // aapt resource value: 0x7F0E0005 - public const int Animation_Design_BottomSheetDialog = 2131623941; - - // aapt resource value: 0x7F0E0006 - public const int AppCompatDialogStyle = 2131623942; - - // aapt resource value: 0x7F0E0007 - public const int Base_AlertDialog_AppCompat = 2131623943; - - // aapt resource value: 0x7F0E0008 - public const int Base_AlertDialog_AppCompat_Light = 2131623944; - - // aapt resource value: 0x7F0E0009 - public const int Base_Animation_AppCompat_Dialog = 2131623945; - - // aapt resource value: 0x7F0E000A - public const int Base_Animation_AppCompat_DropDownUp = 2131623946; - - // aapt resource value: 0x7F0E000B - public const int Base_Animation_AppCompat_Tooltip = 2131623947; - - // aapt resource value: 0x7F0E000C - public const int Base_CardView = 2131623948; - - // aapt resource value: 0x7F0E000E - public const int Base_DialogWindowTitleBackground_AppCompat = 2131623950; - - // aapt resource value: 0x7F0E000D - public const int Base_DialogWindowTitle_AppCompat = 2131623949; - - // aapt resource value: 0x7F0E000F - public const int Base_TextAppearance_AppCompat = 2131623951; - - // aapt resource value: 0x7F0E0010 - public const int Base_TextAppearance_AppCompat_Body1 = 2131623952; - - // aapt resource value: 0x7F0E0011 - public const int Base_TextAppearance_AppCompat_Body2 = 2131623953; - - // aapt resource value: 0x7F0E0012 - public const int Base_TextAppearance_AppCompat_Button = 2131623954; - - // aapt resource value: 0x7F0E0013 - public const int Base_TextAppearance_AppCompat_Caption = 2131623955; - - // aapt resource value: 0x7F0E0014 - public const int Base_TextAppearance_AppCompat_Display1 = 2131623956; - - // aapt resource value: 0x7F0E0015 - public const int Base_TextAppearance_AppCompat_Display2 = 2131623957; - - // aapt resource value: 0x7F0E0016 - public const int Base_TextAppearance_AppCompat_Display3 = 2131623958; - - // aapt resource value: 0x7F0E0017 - public const int Base_TextAppearance_AppCompat_Display4 = 2131623959; - - // aapt resource value: 0x7F0E0018 - public const int Base_TextAppearance_AppCompat_Headline = 2131623960; - - // aapt resource value: 0x7F0E0019 - public const int Base_TextAppearance_AppCompat_Inverse = 2131623961; - - // aapt resource value: 0x7F0E001A - public const int Base_TextAppearance_AppCompat_Large = 2131623962; - - // aapt resource value: 0x7F0E001B - public const int Base_TextAppearance_AppCompat_Large_Inverse = 2131623963; - - // aapt resource value: 0x7F0E001C - public const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131623964; - - // aapt resource value: 0x7F0E001D - public const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131623965; - - // aapt resource value: 0x7F0E001E - public const int Base_TextAppearance_AppCompat_Medium = 2131623966; - - // aapt resource value: 0x7F0E001F - public const int Base_TextAppearance_AppCompat_Medium_Inverse = 2131623967; - - // aapt resource value: 0x7F0E0020 - public const int Base_TextAppearance_AppCompat_Menu = 2131623968; - - // aapt resource value: 0x7F0E0021 - public const int Base_TextAppearance_AppCompat_SearchResult = 2131623969; - - // aapt resource value: 0x7F0E0022 - public const int Base_TextAppearance_AppCompat_SearchResult_Subtitle = 2131623970; - - // aapt resource value: 0x7F0E0023 - public const int Base_TextAppearance_AppCompat_SearchResult_Title = 2131623971; - - // aapt resource value: 0x7F0E0024 - public const int Base_TextAppearance_AppCompat_Small = 2131623972; - - // aapt resource value: 0x7F0E0025 - public const int Base_TextAppearance_AppCompat_Small_Inverse = 2131623973; - - // aapt resource value: 0x7F0E0026 - public const int Base_TextAppearance_AppCompat_Subhead = 2131623974; - - // aapt resource value: 0x7F0E0027 - public const int Base_TextAppearance_AppCompat_Subhead_Inverse = 2131623975; - - // aapt resource value: 0x7F0E0028 - public const int Base_TextAppearance_AppCompat_Title = 2131623976; - - // aapt resource value: 0x7F0E0029 - public const int Base_TextAppearance_AppCompat_Title_Inverse = 2131623977; - - // aapt resource value: 0x7F0E002A - public const int Base_TextAppearance_AppCompat_Tooltip = 2131623978; - - // aapt resource value: 0x7F0E002B - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131623979; - - // aapt resource value: 0x7F0E002C - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131623980; - - // aapt resource value: 0x7F0E002D - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131623981; - - // aapt resource value: 0x7F0E002E - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title = 2131623982; - - // aapt resource value: 0x7F0E002F - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131623983; - - // aapt resource value: 0x7F0E0030 - public const int Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131623984; - - // aapt resource value: 0x7F0E0031 - public const int Base_TextAppearance_AppCompat_Widget_ActionMode_Title = 2131623985; - - // aapt resource value: 0x7F0E0032 - public const int Base_TextAppearance_AppCompat_Widget_Button = 2131623986; - - // aapt resource value: 0x7F0E0033 - public const int Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131623987; - - // aapt resource value: 0x7F0E0034 - public const int Base_TextAppearance_AppCompat_Widget_Button_Colored = 2131623988; - - // aapt resource value: 0x7F0E0035 - public const int Base_TextAppearance_AppCompat_Widget_Button_Inverse = 2131623989; - - // aapt resource value: 0x7F0E0036 - public const int Base_TextAppearance_AppCompat_Widget_DropDownItem = 2131623990; - - // aapt resource value: 0x7F0E0037 - public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131623991; - - // aapt resource value: 0x7F0E0038 - public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131623992; - - // aapt resource value: 0x7F0E0039 - public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131623993; - - // aapt resource value: 0x7F0E003A - public const int Base_TextAppearance_AppCompat_Widget_Switch = 2131623994; - - // aapt resource value: 0x7F0E003B - public const int Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131623995; - - // aapt resource value: 0x7F0E003C - public const int Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131623996; - - // aapt resource value: 0x7F0E003D - public const int Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131623997; - - // aapt resource value: 0x7F0E003E - public const int Base_TextAppearance_Widget_AppCompat_Toolbar_Title = 2131623998; - - // aapt resource value: 0x7F0E005E - public const int Base_ThemeOverlay_AppCompat = 2131624030; - - // aapt resource value: 0x7F0E005F - public const int Base_ThemeOverlay_AppCompat_ActionBar = 2131624031; - - // aapt resource value: 0x7F0E0060 - public const int Base_ThemeOverlay_AppCompat_Dark = 2131624032; - - // aapt resource value: 0x7F0E0061 - public const int Base_ThemeOverlay_AppCompat_Dark_ActionBar = 2131624033; - - // aapt resource value: 0x7F0E0062 - public const int Base_ThemeOverlay_AppCompat_Dialog = 2131624034; - - // aapt resource value: 0x7F0E0063 - public const int Base_ThemeOverlay_AppCompat_Dialog_Alert = 2131624035; - - // aapt resource value: 0x7F0E0064 - public const int Base_ThemeOverlay_AppCompat_Light = 2131624036; - - // aapt resource value: 0x7F0E0065 - public const int Base_ThemeOverlay_MaterialComponents_Dialog = 2131624037; - - // aapt resource value: 0x7F0E0066 - public const int Base_ThemeOverlay_MaterialComponents_Dialog_Alert = 2131624038; - - // aapt resource value: 0x7F0E003F - public const int Base_Theme_AppCompat = 2131623999; - - // aapt resource value: 0x7F0E0040 - public const int Base_Theme_AppCompat_CompactMenu = 2131624000; - - // aapt resource value: 0x7F0E0041 - public const int Base_Theme_AppCompat_Dialog = 2131624001; - - // aapt resource value: 0x7F0E0045 - public const int Base_Theme_AppCompat_DialogWhenLarge = 2131624005; - - // aapt resource value: 0x7F0E0042 - public const int Base_Theme_AppCompat_Dialog_Alert = 2131624002; - - // aapt resource value: 0x7F0E0043 - public const int Base_Theme_AppCompat_Dialog_FixedSize = 2131624003; - - // aapt resource value: 0x7F0E0044 - public const int Base_Theme_AppCompat_Dialog_MinWidth = 2131624004; - - // aapt resource value: 0x7F0E0046 - public const int Base_Theme_AppCompat_Light = 2131624006; - - // aapt resource value: 0x7F0E0047 - public const int Base_Theme_AppCompat_Light_DarkActionBar = 2131624007; - - // aapt resource value: 0x7F0E0048 - public const int Base_Theme_AppCompat_Light_Dialog = 2131624008; - - // aapt resource value: 0x7F0E004C - public const int Base_Theme_AppCompat_Light_DialogWhenLarge = 2131624012; - - // aapt resource value: 0x7F0E0049 - public const int Base_Theme_AppCompat_Light_Dialog_Alert = 2131624009; - - // aapt resource value: 0x7F0E004A - public const int Base_Theme_AppCompat_Light_Dialog_FixedSize = 2131624010; - - // aapt resource value: 0x7F0E004B - public const int Base_Theme_AppCompat_Light_Dialog_MinWidth = 2131624011; - - // aapt resource value: 0x7F0E004D - public const int Base_Theme_MaterialComponents = 2131624013; - - // aapt resource value: 0x7F0E004E - public const int Base_Theme_MaterialComponents_Bridge = 2131624014; - - // aapt resource value: 0x7F0E004F - public const int Base_Theme_MaterialComponents_CompactMenu = 2131624015; - - // aapt resource value: 0x7F0E0050 - public const int Base_Theme_MaterialComponents_Dialog = 2131624016; - - // aapt resource value: 0x7F0E0054 - public const int Base_Theme_MaterialComponents_DialogWhenLarge = 2131624020; - - // aapt resource value: 0x7F0E0051 - public const int Base_Theme_MaterialComponents_Dialog_Alert = 2131624017; - - // aapt resource value: 0x7F0E0052 - public const int Base_Theme_MaterialComponents_Dialog_FixedSize = 2131624018; - - // aapt resource value: 0x7F0E0053 - public const int Base_Theme_MaterialComponents_Dialog_MinWidth = 2131624019; - - // aapt resource value: 0x7F0E0055 - public const int Base_Theme_MaterialComponents_Light = 2131624021; - - // aapt resource value: 0x7F0E0056 - public const int Base_Theme_MaterialComponents_Light_Bridge = 2131624022; - - // aapt resource value: 0x7F0E0057 - public const int Base_Theme_MaterialComponents_Light_DarkActionBar = 2131624023; - - // aapt resource value: 0x7F0E0058 - public const int Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge = 2131624024; - - // aapt resource value: 0x7F0E0059 - public const int Base_Theme_MaterialComponents_Light_Dialog = 2131624025; - - // aapt resource value: 0x7F0E005D - public const int Base_Theme_MaterialComponents_Light_DialogWhenLarge = 2131624029; - - // aapt resource value: 0x7F0E005A - public const int Base_Theme_MaterialComponents_Light_Dialog_Alert = 2131624026; - - // aapt resource value: 0x7F0E005B - public const int Base_Theme_MaterialComponents_Light_Dialog_FixedSize = 2131624027; - - // aapt resource value: 0x7F0E005C - public const int Base_Theme_MaterialComponents_Light_Dialog_MinWidth = 2131624028; - - // aapt resource value: 0x7F0E006E - public const int Base_V14_ThemeOverlay_MaterialComponents_Dialog = 2131624046; - - // aapt resource value: 0x7F0E006F - public const int Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert = 2131624047; - - // aapt resource value: 0x7F0E0067 - public const int Base_V14_Theme_MaterialComponents = 2131624039; - - // aapt resource value: 0x7F0E0068 - public const int Base_V14_Theme_MaterialComponents_Bridge = 2131624040; - - // aapt resource value: 0x7F0E0069 - public const int Base_V14_Theme_MaterialComponents_Dialog = 2131624041; - - // aapt resource value: 0x7F0E006A - public const int Base_V14_Theme_MaterialComponents_Light = 2131624042; - - // aapt resource value: 0x7F0E006B - public const int Base_V14_Theme_MaterialComponents_Light_Bridge = 2131624043; - - // aapt resource value: 0x7F0E006C - public const int Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge = 2131624044; - - // aapt resource value: 0x7F0E006D - public const int Base_V14_Theme_MaterialComponents_Light_Dialog = 2131624045; - - // aapt resource value: 0x7F0E0074 - public const int Base_V21_ThemeOverlay_AppCompat_Dialog = 2131624052; - - // aapt resource value: 0x7F0E0070 - public const int Base_V21_Theme_AppCompat = 2131624048; - - // aapt resource value: 0x7F0E0071 - public const int Base_V21_Theme_AppCompat_Dialog = 2131624049; - - // aapt resource value: 0x7F0E0072 - public const int Base_V21_Theme_AppCompat_Light = 2131624050; - - // aapt resource value: 0x7F0E0073 - public const int Base_V21_Theme_AppCompat_Light_Dialog = 2131624051; - - // aapt resource value: 0x7F0E0075 - public const int Base_V22_Theme_AppCompat = 2131624053; - - // aapt resource value: 0x7F0E0076 - public const int Base_V22_Theme_AppCompat_Light = 2131624054; - - // aapt resource value: 0x7F0E0077 - public const int Base_V23_Theme_AppCompat = 2131624055; - - // aapt resource value: 0x7F0E0078 - public const int Base_V23_Theme_AppCompat_Light = 2131624056; - - // aapt resource value: 0x7F0E0079 - public const int Base_V26_Theme_AppCompat = 2131624057; - - // aapt resource value: 0x7F0E007A - public const int Base_V26_Theme_AppCompat_Light = 2131624058; - - // aapt resource value: 0x7F0E007B - public const int Base_V26_Widget_AppCompat_Toolbar = 2131624059; - - // aapt resource value: 0x7F0E007C - public const int Base_V28_Theme_AppCompat = 2131624060; - - // aapt resource value: 0x7F0E007D - public const int Base_V28_Theme_AppCompat_Light = 2131624061; - - // aapt resource value: 0x7F0E0082 - public const int Base_V7_ThemeOverlay_AppCompat_Dialog = 2131624066; - - // aapt resource value: 0x7F0E007E - public const int Base_V7_Theme_AppCompat = 2131624062; - - // aapt resource value: 0x7F0E007F - public const int Base_V7_Theme_AppCompat_Dialog = 2131624063; - - // aapt resource value: 0x7F0E0080 - public const int Base_V7_Theme_AppCompat_Light = 2131624064; - - // aapt resource value: 0x7F0E0081 - public const int Base_V7_Theme_AppCompat_Light_Dialog = 2131624065; - - // aapt resource value: 0x7F0E0083 - public const int Base_V7_Widget_AppCompat_AutoCompleteTextView = 2131624067; - - // aapt resource value: 0x7F0E0084 - public const int Base_V7_Widget_AppCompat_EditText = 2131624068; - - // aapt resource value: 0x7F0E0085 - public const int Base_V7_Widget_AppCompat_Toolbar = 2131624069; - - // aapt resource value: 0x7F0E0086 - public const int Base_Widget_AppCompat_ActionBar = 2131624070; - - // aapt resource value: 0x7F0E0087 - public const int Base_Widget_AppCompat_ActionBar_Solid = 2131624071; - - // aapt resource value: 0x7F0E0088 - public const int Base_Widget_AppCompat_ActionBar_TabBar = 2131624072; - - // aapt resource value: 0x7F0E0089 - public const int Base_Widget_AppCompat_ActionBar_TabText = 2131624073; - - // aapt resource value: 0x7F0E008A - public const int Base_Widget_AppCompat_ActionBar_TabView = 2131624074; - - // aapt resource value: 0x7F0E008B - public const int Base_Widget_AppCompat_ActionButton = 2131624075; - - // aapt resource value: 0x7F0E008C - public const int Base_Widget_AppCompat_ActionButton_CloseMode = 2131624076; - - // aapt resource value: 0x7F0E008D - public const int Base_Widget_AppCompat_ActionButton_Overflow = 2131624077; - - // aapt resource value: 0x7F0E008E - public const int Base_Widget_AppCompat_ActionMode = 2131624078; - - // aapt resource value: 0x7F0E008F - public const int Base_Widget_AppCompat_ActivityChooserView = 2131624079; - - // aapt resource value: 0x7F0E0090 - public const int Base_Widget_AppCompat_AutoCompleteTextView = 2131624080; - - // aapt resource value: 0x7F0E0091 - public const int Base_Widget_AppCompat_Button = 2131624081; - - // aapt resource value: 0x7F0E0097 - public const int Base_Widget_AppCompat_ButtonBar = 2131624087; - - // aapt resource value: 0x7F0E0098 - public const int Base_Widget_AppCompat_ButtonBar_AlertDialog = 2131624088; - - // aapt resource value: 0x7F0E0092 - public const int Base_Widget_AppCompat_Button_Borderless = 2131624082; - - // aapt resource value: 0x7F0E0093 - public const int Base_Widget_AppCompat_Button_Borderless_Colored = 2131624083; - - // aapt resource value: 0x7F0E0094 - public const int Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131624084; - - // aapt resource value: 0x7F0E0095 - public const int Base_Widget_AppCompat_Button_Colored = 2131624085; - - // aapt resource value: 0x7F0E0096 - public const int Base_Widget_AppCompat_Button_Small = 2131624086; - - // aapt resource value: 0x7F0E0099 - public const int Base_Widget_AppCompat_CompoundButton_CheckBox = 2131624089; - - // aapt resource value: 0x7F0E009A - public const int Base_Widget_AppCompat_CompoundButton_RadioButton = 2131624090; - - // aapt resource value: 0x7F0E009B - public const int Base_Widget_AppCompat_CompoundButton_Switch = 2131624091; - - // aapt resource value: 0x7F0E009C - public const int Base_Widget_AppCompat_DrawerArrowToggle = 2131624092; - - // aapt resource value: 0x7F0E009D - public const int Base_Widget_AppCompat_DrawerArrowToggle_Common = 2131624093; - - // aapt resource value: 0x7F0E009E - public const int Base_Widget_AppCompat_DropDownItem_Spinner = 2131624094; - - // aapt resource value: 0x7F0E009F - public const int Base_Widget_AppCompat_EditText = 2131624095; - - // aapt resource value: 0x7F0E00A0 - public const int Base_Widget_AppCompat_ImageButton = 2131624096; - - // aapt resource value: 0x7F0E00A1 - public const int Base_Widget_AppCompat_Light_ActionBar = 2131624097; - - // aapt resource value: 0x7F0E00A2 - public const int Base_Widget_AppCompat_Light_ActionBar_Solid = 2131624098; - - // aapt resource value: 0x7F0E00A3 - public const int Base_Widget_AppCompat_Light_ActionBar_TabBar = 2131624099; - - // aapt resource value: 0x7F0E00A4 - public const int Base_Widget_AppCompat_Light_ActionBar_TabText = 2131624100; - - // aapt resource value: 0x7F0E00A5 - public const int Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131624101; - - // aapt resource value: 0x7F0E00A6 - public const int Base_Widget_AppCompat_Light_ActionBar_TabView = 2131624102; - - // aapt resource value: 0x7F0E00A7 - public const int Base_Widget_AppCompat_Light_PopupMenu = 2131624103; - - // aapt resource value: 0x7F0E00A8 - public const int Base_Widget_AppCompat_Light_PopupMenu_Overflow = 2131624104; - - // aapt resource value: 0x7F0E00A9 - public const int Base_Widget_AppCompat_ListMenuView = 2131624105; - - // aapt resource value: 0x7F0E00AA - public const int Base_Widget_AppCompat_ListPopupWindow = 2131624106; - - // aapt resource value: 0x7F0E00AB - public const int Base_Widget_AppCompat_ListView = 2131624107; - - // aapt resource value: 0x7F0E00AC - public const int Base_Widget_AppCompat_ListView_DropDown = 2131624108; - - // aapt resource value: 0x7F0E00AD - public const int Base_Widget_AppCompat_ListView_Menu = 2131624109; - - // aapt resource value: 0x7F0E00AE - public const int Base_Widget_AppCompat_PopupMenu = 2131624110; - - // aapt resource value: 0x7F0E00AF - public const int Base_Widget_AppCompat_PopupMenu_Overflow = 2131624111; - - // aapt resource value: 0x7F0E00B0 - public const int Base_Widget_AppCompat_PopupWindow = 2131624112; - - // aapt resource value: 0x7F0E00B1 - public const int Base_Widget_AppCompat_ProgressBar = 2131624113; - - // aapt resource value: 0x7F0E00B2 - public const int Base_Widget_AppCompat_ProgressBar_Horizontal = 2131624114; - - // aapt resource value: 0x7F0E00B3 - public const int Base_Widget_AppCompat_RatingBar = 2131624115; - - // aapt resource value: 0x7F0E00B4 - public const int Base_Widget_AppCompat_RatingBar_Indicator = 2131624116; - - // aapt resource value: 0x7F0E00B5 - public const int Base_Widget_AppCompat_RatingBar_Small = 2131624117; - - // aapt resource value: 0x7F0E00B6 - public const int Base_Widget_AppCompat_SearchView = 2131624118; - - // aapt resource value: 0x7F0E00B7 - public const int Base_Widget_AppCompat_SearchView_ActionBar = 2131624119; - - // aapt resource value: 0x7F0E00B8 - public const int Base_Widget_AppCompat_SeekBar = 2131624120; - - // aapt resource value: 0x7F0E00B9 - public const int Base_Widget_AppCompat_SeekBar_Discrete = 2131624121; - - // aapt resource value: 0x7F0E00BA - public const int Base_Widget_AppCompat_Spinner = 2131624122; - - // aapt resource value: 0x7F0E00BB - public const int Base_Widget_AppCompat_Spinner_Underlined = 2131624123; - - // aapt resource value: 0x7F0E00BC - public const int Base_Widget_AppCompat_TextView_SpinnerItem = 2131624124; - - // aapt resource value: 0x7F0E00BD - public const int Base_Widget_AppCompat_Toolbar = 2131624125; - - // aapt resource value: 0x7F0E00BE - public const int Base_Widget_AppCompat_Toolbar_Button_Navigation = 2131624126; - - // aapt resource value: 0x7F0E00BF - public const int Base_Widget_Design_TabLayout = 2131624127; - - // aapt resource value: 0x7F0E00C0 - public const int Base_Widget_MaterialComponents_Chip = 2131624128; - - // aapt resource value: 0x7F0E00C1 - public const int Base_Widget_MaterialComponents_TextInputEditText = 2131624129; - - // aapt resource value: 0x7F0E00C2 - public const int Base_Widget_MaterialComponents_TextInputLayout = 2131624130; - - // aapt resource value: 0x7F0E00C3 - public const int CardView = 2131624131; - - // aapt resource value: 0x7F0E00C4 - public const int CardView_Dark = 2131624132; - - // aapt resource value: 0x7F0E00C5 - public const int CardView_Light = 2131624133; - - // aapt resource value: 0x7F0E01F7 - public const int collectionViewTheme = 2131624439; - - // aapt resource value: 0x7F0E00C6 - public const int MainTheme = 2131624134; - - // aapt resource value: 0x7F0E00C7 - public const int MainTheme_Base = 2131624135; - - // aapt resource value: 0x7F0E00C8 - public const int Platform_AppCompat = 2131624136; - - // aapt resource value: 0x7F0E00C9 - public const int Platform_AppCompat_Light = 2131624137; - - // aapt resource value: 0x7F0E00CA - public const int Platform_MaterialComponents = 2131624138; - - // aapt resource value: 0x7F0E00CB - public const int Platform_MaterialComponents_Dialog = 2131624139; - - // aapt resource value: 0x7F0E00CC - public const int Platform_MaterialComponents_Light = 2131624140; - - // aapt resource value: 0x7F0E00CD - public const int Platform_MaterialComponents_Light_Dialog = 2131624141; - - // aapt resource value: 0x7F0E00CE - public const int Platform_ThemeOverlay_AppCompat = 2131624142; - - // aapt resource value: 0x7F0E00CF - public const int Platform_ThemeOverlay_AppCompat_Dark = 2131624143; - - // aapt resource value: 0x7F0E00D0 - public const int Platform_ThemeOverlay_AppCompat_Light = 2131624144; - - // aapt resource value: 0x7F0E00D1 - public const int Platform_V21_AppCompat = 2131624145; - - // aapt resource value: 0x7F0E00D2 - public const int Platform_V21_AppCompat_Light = 2131624146; - - // aapt resource value: 0x7F0E00D3 - public const int Platform_V25_AppCompat = 2131624147; - - // aapt resource value: 0x7F0E00D4 - public const int Platform_V25_AppCompat_Light = 2131624148; - - // aapt resource value: 0x7F0E00D5 - public const int Platform_Widget_AppCompat_Spinner = 2131624149; - - // aapt resource value: 0x7F0E00D6 - public const int RtlOverlay_DialogWindowTitle_AppCompat = 2131624150; - - // aapt resource value: 0x7F0E00D7 - public const int RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = 2131624151; - - // aapt resource value: 0x7F0E00D8 - public const int RtlOverlay_Widget_AppCompat_DialogTitle_Icon = 2131624152; - - // aapt resource value: 0x7F0E00D9 - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem = 2131624153; - - // aapt resource value: 0x7F0E00DA - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = 2131624154; - - // aapt resource value: 0x7F0E00DB - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut = 2131624155; - - // aapt resource value: 0x7F0E00DC - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow = 2131624156; - - // aapt resource value: 0x7F0E00DD - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = 2131624157; - - // aapt resource value: 0x7F0E00DE - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Title = 2131624158; - - // aapt resource value: 0x7F0E00E4 - public const int RtlOverlay_Widget_AppCompat_SearchView_MagIcon = 2131624164; - - // aapt resource value: 0x7F0E00DF - public const int RtlOverlay_Widget_AppCompat_Search_DropDown = 2131624159; - - // aapt resource value: 0x7F0E00E0 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = 2131624160; - - // aapt resource value: 0x7F0E00E1 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = 2131624161; - - // aapt resource value: 0x7F0E00E2 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Query = 2131624162; - - // aapt resource value: 0x7F0E00E3 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Text = 2131624163; - - // aapt resource value: 0x7F0E00E5 - public const int RtlUnderlay_Widget_AppCompat_ActionButton = 2131624165; - - // aapt resource value: 0x7F0E00E6 - public const int RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = 2131624166; - - // aapt resource value: 0x7F0E01F8 - public const int scrollViewScrollBars = 2131624440; - - // aapt resource value: 0x7F0E01F9 - public const int scrollViewTheme = 2131624441; - - // aapt resource value: 0x7F0E00E7 - public const int TextAppearance_AppCompat = 2131624167; - - // aapt resource value: 0x7F0E00E8 - public const int TextAppearance_AppCompat_Body1 = 2131624168; - - // aapt resource value: 0x7F0E00E9 - public const int TextAppearance_AppCompat_Body2 = 2131624169; - - // aapt resource value: 0x7F0E00EA - public const int TextAppearance_AppCompat_Button = 2131624170; - - // aapt resource value: 0x7F0E00EB - public const int TextAppearance_AppCompat_Caption = 2131624171; - - // aapt resource value: 0x7F0E00EC - public const int TextAppearance_AppCompat_Display1 = 2131624172; - - // aapt resource value: 0x7F0E00ED - public const int TextAppearance_AppCompat_Display2 = 2131624173; - - // aapt resource value: 0x7F0E00EE - public const int TextAppearance_AppCompat_Display3 = 2131624174; - - // aapt resource value: 0x7F0E00EF - public const int TextAppearance_AppCompat_Display4 = 2131624175; - - // aapt resource value: 0x7F0E00F0 - public const int TextAppearance_AppCompat_Headline = 2131624176; - - // aapt resource value: 0x7F0E00F1 - public const int TextAppearance_AppCompat_Inverse = 2131624177; - - // aapt resource value: 0x7F0E00F2 - public const int TextAppearance_AppCompat_Large = 2131624178; - - // aapt resource value: 0x7F0E00F3 - public const int TextAppearance_AppCompat_Large_Inverse = 2131624179; - - // aapt resource value: 0x7F0E00F4 - public const int TextAppearance_AppCompat_Light_SearchResult_Subtitle = 2131624180; - - // aapt resource value: 0x7F0E00F5 - public const int TextAppearance_AppCompat_Light_SearchResult_Title = 2131624181; - - // aapt resource value: 0x7F0E00F6 - public const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131624182; - - // aapt resource value: 0x7F0E00F7 - public const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131624183; - - // aapt resource value: 0x7F0E00F8 - public const int TextAppearance_AppCompat_Medium = 2131624184; - - // aapt resource value: 0x7F0E00F9 - public const int TextAppearance_AppCompat_Medium_Inverse = 2131624185; - - // aapt resource value: 0x7F0E00FA - public const int TextAppearance_AppCompat_Menu = 2131624186; - - // aapt resource value: 0x7F0E00FB - public const int TextAppearance_AppCompat_SearchResult_Subtitle = 2131624187; - - // aapt resource value: 0x7F0E00FC - public const int TextAppearance_AppCompat_SearchResult_Title = 2131624188; - - // aapt resource value: 0x7F0E00FD - public const int TextAppearance_AppCompat_Small = 2131624189; - - // aapt resource value: 0x7F0E00FE - public const int TextAppearance_AppCompat_Small_Inverse = 2131624190; - - // aapt resource value: 0x7F0E00FF - public const int TextAppearance_AppCompat_Subhead = 2131624191; - - // aapt resource value: 0x7F0E0100 - public const int TextAppearance_AppCompat_Subhead_Inverse = 2131624192; - - // aapt resource value: 0x7F0E0101 - public const int TextAppearance_AppCompat_Title = 2131624193; - - // aapt resource value: 0x7F0E0102 - public const int TextAppearance_AppCompat_Title_Inverse = 2131624194; - - // aapt resource value: 0x7F0E0103 - public const int TextAppearance_AppCompat_Tooltip = 2131624195; - - // aapt resource value: 0x7F0E0104 - public const int TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131624196; - - // aapt resource value: 0x7F0E0105 - public const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131624197; - - // aapt resource value: 0x7F0E0106 - public const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131624198; - - // aapt resource value: 0x7F0E0107 - public const int TextAppearance_AppCompat_Widget_ActionBar_Title = 2131624199; - - // aapt resource value: 0x7F0E0108 - public const int TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131624200; - - // aapt resource value: 0x7F0E0109 - public const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131624201; - - // aapt resource value: 0x7F0E010A - public const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = 2131624202; - - // aapt resource value: 0x7F0E010B - public const int TextAppearance_AppCompat_Widget_ActionMode_Title = 2131624203; - - // aapt resource value: 0x7F0E010C - public const int TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = 2131624204; - - // aapt resource value: 0x7F0E010D - public const int TextAppearance_AppCompat_Widget_Button = 2131624205; - - // aapt resource value: 0x7F0E010E - public const int TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131624206; - - // aapt resource value: 0x7F0E010F - public const int TextAppearance_AppCompat_Widget_Button_Colored = 2131624207; - - // aapt resource value: 0x7F0E0110 - public const int TextAppearance_AppCompat_Widget_Button_Inverse = 2131624208; - - // aapt resource value: 0x7F0E0111 - public const int TextAppearance_AppCompat_Widget_DropDownItem = 2131624209; - - // aapt resource value: 0x7F0E0112 - public const int TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131624210; - - // aapt resource value: 0x7F0E0113 - public const int TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131624211; - - // aapt resource value: 0x7F0E0114 - public const int TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131624212; - - // aapt resource value: 0x7F0E0115 - public const int TextAppearance_AppCompat_Widget_Switch = 2131624213; - - // aapt resource value: 0x7F0E0116 - public const int TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131624214; - - // aapt resource value: 0x7F0E0117 - public const int TextAppearance_Compat_Notification = 2131624215; - - // aapt resource value: 0x7F0E0118 - public const int TextAppearance_Compat_Notification_Info = 2131624216; - - // aapt resource value: 0x7F0E0119 - public const int TextAppearance_Compat_Notification_Info_Media = 2131624217; - - // aapt resource value: 0x7F0E011A - public const int TextAppearance_Compat_Notification_Line2 = 2131624218; - - // aapt resource value: 0x7F0E011B - public const int TextAppearance_Compat_Notification_Line2_Media = 2131624219; - - // aapt resource value: 0x7F0E011C - public const int TextAppearance_Compat_Notification_Media = 2131624220; - - // aapt resource value: 0x7F0E011D - public const int TextAppearance_Compat_Notification_Time = 2131624221; - - // aapt resource value: 0x7F0E011E - public const int TextAppearance_Compat_Notification_Time_Media = 2131624222; - - // aapt resource value: 0x7F0E011F - public const int TextAppearance_Compat_Notification_Title = 2131624223; - - // aapt resource value: 0x7F0E0120 - public const int TextAppearance_Compat_Notification_Title_Media = 2131624224; - - // aapt resource value: 0x7F0E0121 - public const int TextAppearance_Design_CollapsingToolbar_Expanded = 2131624225; - - // aapt resource value: 0x7F0E0122 - public const int TextAppearance_Design_Counter = 2131624226; - - // aapt resource value: 0x7F0E0123 - public const int TextAppearance_Design_Counter_Overflow = 2131624227; - - // aapt resource value: 0x7F0E0124 - public const int TextAppearance_Design_Error = 2131624228; - - // aapt resource value: 0x7F0E0125 - public const int TextAppearance_Design_HelperText = 2131624229; - - // aapt resource value: 0x7F0E0126 - public const int TextAppearance_Design_Hint = 2131624230; - - // aapt resource value: 0x7F0E0127 - public const int TextAppearance_Design_Snackbar_Message = 2131624231; - - // aapt resource value: 0x7F0E0128 - public const int TextAppearance_Design_Tab = 2131624232; - - // aapt resource value: 0x7F0E0129 - public const int TextAppearance_MaterialComponents_Body1 = 2131624233; - - // aapt resource value: 0x7F0E012A - public const int TextAppearance_MaterialComponents_Body2 = 2131624234; - - // aapt resource value: 0x7F0E012B - public const int TextAppearance_MaterialComponents_Button = 2131624235; - - // aapt resource value: 0x7F0E012C - public const int TextAppearance_MaterialComponents_Caption = 2131624236; - - // aapt resource value: 0x7F0E012D - public const int TextAppearance_MaterialComponents_Chip = 2131624237; - - // aapt resource value: 0x7F0E012E - public const int TextAppearance_MaterialComponents_Headline1 = 2131624238; - - // aapt resource value: 0x7F0E012F - public const int TextAppearance_MaterialComponents_Headline2 = 2131624239; - - // aapt resource value: 0x7F0E0130 - public const int TextAppearance_MaterialComponents_Headline3 = 2131624240; - - // aapt resource value: 0x7F0E0131 - public const int TextAppearance_MaterialComponents_Headline4 = 2131624241; - - // aapt resource value: 0x7F0E0132 - public const int TextAppearance_MaterialComponents_Headline5 = 2131624242; - - // aapt resource value: 0x7F0E0133 - public const int TextAppearance_MaterialComponents_Headline6 = 2131624243; - - // aapt resource value: 0x7F0E0134 - public const int TextAppearance_MaterialComponents_Overline = 2131624244; - - // aapt resource value: 0x7F0E0135 - public const int TextAppearance_MaterialComponents_Subtitle1 = 2131624245; - - // aapt resource value: 0x7F0E0136 - public const int TextAppearance_MaterialComponents_Subtitle2 = 2131624246; - - // aapt resource value: 0x7F0E0137 - public const int TextAppearance_MaterialComponents_Tab = 2131624247; - - // aapt resource value: 0x7F0E0138 - public const int TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131624248; - - // aapt resource value: 0x7F0E0139 - public const int TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131624249; - - // aapt resource value: 0x7F0E013A - public const int TextAppearance_Widget_AppCompat_Toolbar_Title = 2131624250; - - // aapt resource value: 0x7F0E016B - public const int ThemeOverlay_AppCompat = 2131624299; - - // aapt resource value: 0x7F0E016C - public const int ThemeOverlay_AppCompat_ActionBar = 2131624300; - - // aapt resource value: 0x7F0E016D - public const int ThemeOverlay_AppCompat_Dark = 2131624301; - - // aapt resource value: 0x7F0E016E - public const int ThemeOverlay_AppCompat_Dark_ActionBar = 2131624302; - - // aapt resource value: 0x7F0E016F - public const int ThemeOverlay_AppCompat_Dialog = 2131624303; - - // aapt resource value: 0x7F0E0170 - public const int ThemeOverlay_AppCompat_Dialog_Alert = 2131624304; - - // aapt resource value: 0x7F0E0171 - public const int ThemeOverlay_AppCompat_Light = 2131624305; - - // aapt resource value: 0x7F0E0172 - public const int ThemeOverlay_MaterialComponents = 2131624306; - - // aapt resource value: 0x7F0E0173 - public const int ThemeOverlay_MaterialComponents_ActionBar = 2131624307; - - // aapt resource value: 0x7F0E0174 - public const int ThemeOverlay_MaterialComponents_Dark = 2131624308; - - // aapt resource value: 0x7F0E0175 - public const int ThemeOverlay_MaterialComponents_Dark_ActionBar = 2131624309; - - // aapt resource value: 0x7F0E0176 - public const int ThemeOverlay_MaterialComponents_Dialog = 2131624310; - - // aapt resource value: 0x7F0E0177 - public const int ThemeOverlay_MaterialComponents_Dialog_Alert = 2131624311; - - // aapt resource value: 0x7F0E0178 - public const int ThemeOverlay_MaterialComponents_Light = 2131624312; - - // aapt resource value: 0x7F0E0179 - public const int ThemeOverlay_MaterialComponents_TextInputEditText = 2131624313; - - // aapt resource value: 0x7F0E017A - public const int ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox = 2131624314; - - // aapt resource value: 0x7F0E017B - public const int ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense = 2131624315; - - // aapt resource value: 0x7F0E017C - public const int ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox = 2131624316; - - // aapt resource value: 0x7F0E017D - public const int ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense = 2131624317; - - // aapt resource value: 0x7F0E013B - public const int Theme_AppCompat = 2131624251; - - // aapt resource value: 0x7F0E013C - public const int Theme_AppCompat_CompactMenu = 2131624252; - - // aapt resource value: 0x7F0E013D - public const int Theme_AppCompat_DayNight = 2131624253; - - // aapt resource value: 0x7F0E013E - public const int Theme_AppCompat_DayNight_DarkActionBar = 2131624254; - - // aapt resource value: 0x7F0E013F - public const int Theme_AppCompat_DayNight_Dialog = 2131624255; - - // aapt resource value: 0x7F0E0142 - public const int Theme_AppCompat_DayNight_DialogWhenLarge = 2131624258; - - // aapt resource value: 0x7F0E0140 - public const int Theme_AppCompat_DayNight_Dialog_Alert = 2131624256; - - // aapt resource value: 0x7F0E0141 - public const int Theme_AppCompat_DayNight_Dialog_MinWidth = 2131624257; - - // aapt resource value: 0x7F0E0143 - public const int Theme_AppCompat_DayNight_NoActionBar = 2131624259; - - // aapt resource value: 0x7F0E0144 - public const int Theme_AppCompat_Dialog = 2131624260; - - // aapt resource value: 0x7F0E0147 - public const int Theme_AppCompat_DialogWhenLarge = 2131624263; - - // aapt resource value: 0x7F0E0145 - public const int Theme_AppCompat_Dialog_Alert = 2131624261; - - // aapt resource value: 0x7F0E0146 - public const int Theme_AppCompat_Dialog_MinWidth = 2131624262; - - // aapt resource value: 0x7F0E0148 - public const int Theme_AppCompat_Light = 2131624264; - - // aapt resource value: 0x7F0E0149 - public const int Theme_AppCompat_Light_DarkActionBar = 2131624265; - - // aapt resource value: 0x7F0E014A - public const int Theme_AppCompat_Light_Dialog = 2131624266; - - // aapt resource value: 0x7F0E014D - public const int Theme_AppCompat_Light_DialogWhenLarge = 2131624269; - - // aapt resource value: 0x7F0E014B - public const int Theme_AppCompat_Light_Dialog_Alert = 2131624267; - - // aapt resource value: 0x7F0E014C - public const int Theme_AppCompat_Light_Dialog_MinWidth = 2131624268; - - // aapt resource value: 0x7F0E014E - public const int Theme_AppCompat_Light_NoActionBar = 2131624270; - - // aapt resource value: 0x7F0E014F - public const int Theme_AppCompat_NoActionBar = 2131624271; - - // aapt resource value: 0x7F0E0150 - public const int Theme_Design = 2131624272; - - // aapt resource value: 0x7F0E0151 - public const int Theme_Design_BottomSheetDialog = 2131624273; - - // aapt resource value: 0x7F0E0152 - public const int Theme_Design_Light = 2131624274; - - // aapt resource value: 0x7F0E0153 - public const int Theme_Design_Light_BottomSheetDialog = 2131624275; - - // aapt resource value: 0x7F0E0154 - public const int Theme_Design_Light_NoActionBar = 2131624276; - - // aapt resource value: 0x7F0E0155 - public const int Theme_Design_NoActionBar = 2131624277; - - // aapt resource value: 0x7F0E0156 - public const int Theme_MaterialComponents = 2131624278; - - // aapt resource value: 0x7F0E0157 - public const int Theme_MaterialComponents_BottomSheetDialog = 2131624279; - - // aapt resource value: 0x7F0E0158 - public const int Theme_MaterialComponents_Bridge = 2131624280; - - // aapt resource value: 0x7F0E0159 - public const int Theme_MaterialComponents_CompactMenu = 2131624281; - - // aapt resource value: 0x7F0E015A - public const int Theme_MaterialComponents_Dialog = 2131624282; - - // aapt resource value: 0x7F0E015D - public const int Theme_MaterialComponents_DialogWhenLarge = 2131624285; - - // aapt resource value: 0x7F0E015B - public const int Theme_MaterialComponents_Dialog_Alert = 2131624283; - - // aapt resource value: 0x7F0E015C - public const int Theme_MaterialComponents_Dialog_MinWidth = 2131624284; - - // aapt resource value: 0x7F0E015E - public const int Theme_MaterialComponents_Light = 2131624286; - - // aapt resource value: 0x7F0E015F - public const int Theme_MaterialComponents_Light_BottomSheetDialog = 2131624287; - - // aapt resource value: 0x7F0E0160 - public const int Theme_MaterialComponents_Light_Bridge = 2131624288; - - // aapt resource value: 0x7F0E0161 - public const int Theme_MaterialComponents_Light_DarkActionBar = 2131624289; - - // aapt resource value: 0x7F0E0162 - public const int Theme_MaterialComponents_Light_DarkActionBar_Bridge = 2131624290; - - // aapt resource value: 0x7F0E0163 - public const int Theme_MaterialComponents_Light_Dialog = 2131624291; - - // aapt resource value: 0x7F0E0166 - public const int Theme_MaterialComponents_Light_DialogWhenLarge = 2131624294; - - // aapt resource value: 0x7F0E0164 - public const int Theme_MaterialComponents_Light_Dialog_Alert = 2131624292; - - // aapt resource value: 0x7F0E0165 - public const int Theme_MaterialComponents_Light_Dialog_MinWidth = 2131624293; - - // aapt resource value: 0x7F0E0167 - public const int Theme_MaterialComponents_Light_NoActionBar = 2131624295; - - // aapt resource value: 0x7F0E0168 - public const int Theme_MaterialComponents_Light_NoActionBar_Bridge = 2131624296; - - // aapt resource value: 0x7F0E0169 - public const int Theme_MaterialComponents_NoActionBar = 2131624297; - - // aapt resource value: 0x7F0E016A - public const int Theme_MaterialComponents_NoActionBar_Bridge = 2131624298; - - // aapt resource value: 0x7F0E017E - public const int Widget_AppCompat_ActionBar = 2131624318; - - // aapt resource value: 0x7F0E017F - public const int Widget_AppCompat_ActionBar_Solid = 2131624319; - - // aapt resource value: 0x7F0E0180 - public const int Widget_AppCompat_ActionBar_TabBar = 2131624320; - - // aapt resource value: 0x7F0E0181 - public const int Widget_AppCompat_ActionBar_TabText = 2131624321; - - // aapt resource value: 0x7F0E0182 - public const int Widget_AppCompat_ActionBar_TabView = 2131624322; - - // aapt resource value: 0x7F0E0183 - public const int Widget_AppCompat_ActionButton = 2131624323; - - // aapt resource value: 0x7F0E0184 - public const int Widget_AppCompat_ActionButton_CloseMode = 2131624324; - - // aapt resource value: 0x7F0E0185 - public const int Widget_AppCompat_ActionButton_Overflow = 2131624325; - - // aapt resource value: 0x7F0E0186 - public const int Widget_AppCompat_ActionMode = 2131624326; - - // aapt resource value: 0x7F0E0187 - public const int Widget_AppCompat_ActivityChooserView = 2131624327; - - // aapt resource value: 0x7F0E0188 - public const int Widget_AppCompat_AutoCompleteTextView = 2131624328; - - // aapt resource value: 0x7F0E0189 - public const int Widget_AppCompat_Button = 2131624329; - - // aapt resource value: 0x7F0E018F - public const int Widget_AppCompat_ButtonBar = 2131624335; - - // aapt resource value: 0x7F0E0190 - public const int Widget_AppCompat_ButtonBar_AlertDialog = 2131624336; - - // aapt resource value: 0x7F0E018A - public const int Widget_AppCompat_Button_Borderless = 2131624330; - - // aapt resource value: 0x7F0E018B - public const int Widget_AppCompat_Button_Borderless_Colored = 2131624331; - - // aapt resource value: 0x7F0E018C - public const int Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131624332; - - // aapt resource value: 0x7F0E018D - public const int Widget_AppCompat_Button_Colored = 2131624333; - - // aapt resource value: 0x7F0E018E - public const int Widget_AppCompat_Button_Small = 2131624334; - - // aapt resource value: 0x7F0E0191 - public const int Widget_AppCompat_CompoundButton_CheckBox = 2131624337; - - // aapt resource value: 0x7F0E0192 - public const int Widget_AppCompat_CompoundButton_RadioButton = 2131624338; - - // aapt resource value: 0x7F0E0193 - public const int Widget_AppCompat_CompoundButton_Switch = 2131624339; - - // aapt resource value: 0x7F0E0194 - public const int Widget_AppCompat_DrawerArrowToggle = 2131624340; - - // aapt resource value: 0x7F0E0195 - public const int Widget_AppCompat_DropDownItem_Spinner = 2131624341; - - // aapt resource value: 0x7F0E0196 - public const int Widget_AppCompat_EditText = 2131624342; - - // aapt resource value: 0x7F0E0197 - public const int Widget_AppCompat_ImageButton = 2131624343; - - // aapt resource value: 0x7F0E0198 - public const int Widget_AppCompat_Light_ActionBar = 2131624344; - - // aapt resource value: 0x7F0E0199 - public const int Widget_AppCompat_Light_ActionBar_Solid = 2131624345; - - // aapt resource value: 0x7F0E019A - public const int Widget_AppCompat_Light_ActionBar_Solid_Inverse = 2131624346; - - // aapt resource value: 0x7F0E019B - public const int Widget_AppCompat_Light_ActionBar_TabBar = 2131624347; - - // aapt resource value: 0x7F0E019C - public const int Widget_AppCompat_Light_ActionBar_TabBar_Inverse = 2131624348; - - // aapt resource value: 0x7F0E019D - public const int Widget_AppCompat_Light_ActionBar_TabText = 2131624349; - - // aapt resource value: 0x7F0E019E - public const int Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131624350; - - // aapt resource value: 0x7F0E019F - public const int Widget_AppCompat_Light_ActionBar_TabView = 2131624351; - - // aapt resource value: 0x7F0E01A0 - public const int Widget_AppCompat_Light_ActionBar_TabView_Inverse = 2131624352; - - // aapt resource value: 0x7F0E01A1 - public const int Widget_AppCompat_Light_ActionButton = 2131624353; - - // aapt resource value: 0x7F0E01A2 - public const int Widget_AppCompat_Light_ActionButton_CloseMode = 2131624354; - - // aapt resource value: 0x7F0E01A3 - public const int Widget_AppCompat_Light_ActionButton_Overflow = 2131624355; - - // aapt resource value: 0x7F0E01A4 - public const int Widget_AppCompat_Light_ActionMode_Inverse = 2131624356; - - // aapt resource value: 0x7F0E01A5 - public const int Widget_AppCompat_Light_ActivityChooserView = 2131624357; - - // aapt resource value: 0x7F0E01A6 - public const int Widget_AppCompat_Light_AutoCompleteTextView = 2131624358; - - // aapt resource value: 0x7F0E01A7 - public const int Widget_AppCompat_Light_DropDownItem_Spinner = 2131624359; - - // aapt resource value: 0x7F0E01A8 - public const int Widget_AppCompat_Light_ListPopupWindow = 2131624360; - - // aapt resource value: 0x7F0E01A9 - public const int Widget_AppCompat_Light_ListView_DropDown = 2131624361; - - // aapt resource value: 0x7F0E01AA - public const int Widget_AppCompat_Light_PopupMenu = 2131624362; - - // aapt resource value: 0x7F0E01AB - public const int Widget_AppCompat_Light_PopupMenu_Overflow = 2131624363; - - // aapt resource value: 0x7F0E01AC - public const int Widget_AppCompat_Light_SearchView = 2131624364; - - // aapt resource value: 0x7F0E01AD - public const int Widget_AppCompat_Light_Spinner_DropDown_ActionBar = 2131624365; - - // aapt resource value: 0x7F0E01AE - public const int Widget_AppCompat_ListMenuView = 2131624366; - - // aapt resource value: 0x7F0E01AF - public const int Widget_AppCompat_ListPopupWindow = 2131624367; - - // aapt resource value: 0x7F0E01B0 - public const int Widget_AppCompat_ListView = 2131624368; - - // aapt resource value: 0x7F0E01B1 - public const int Widget_AppCompat_ListView_DropDown = 2131624369; - - // aapt resource value: 0x7F0E01B2 - public const int Widget_AppCompat_ListView_Menu = 2131624370; - - // aapt resource value: 0x7F0E01B3 - public const int Widget_AppCompat_PopupMenu = 2131624371; - - // aapt resource value: 0x7F0E01B4 - public const int Widget_AppCompat_PopupMenu_Overflow = 2131624372; - - // aapt resource value: 0x7F0E01B5 - public const int Widget_AppCompat_PopupWindow = 2131624373; - - // aapt resource value: 0x7F0E01B6 - public const int Widget_AppCompat_ProgressBar = 2131624374; - - // aapt resource value: 0x7F0E01B7 - public const int Widget_AppCompat_ProgressBar_Horizontal = 2131624375; - - // aapt resource value: 0x7F0E01B8 - public const int Widget_AppCompat_RatingBar = 2131624376; - - // aapt resource value: 0x7F0E01B9 - public const int Widget_AppCompat_RatingBar_Indicator = 2131624377; - - // aapt resource value: 0x7F0E01BA - public const int Widget_AppCompat_RatingBar_Small = 2131624378; - - // aapt resource value: 0x7F0E01BB - public const int Widget_AppCompat_SearchView = 2131624379; - - // aapt resource value: 0x7F0E01BC - public const int Widget_AppCompat_SearchView_ActionBar = 2131624380; - - // aapt resource value: 0x7F0E01BD - public const int Widget_AppCompat_SeekBar = 2131624381; - - // aapt resource value: 0x7F0E01BE - public const int Widget_AppCompat_SeekBar_Discrete = 2131624382; - - // aapt resource value: 0x7F0E01BF - public const int Widget_AppCompat_Spinner = 2131624383; - - // aapt resource value: 0x7F0E01C0 - public const int Widget_AppCompat_Spinner_DropDown = 2131624384; - - // aapt resource value: 0x7F0E01C1 - public const int Widget_AppCompat_Spinner_DropDown_ActionBar = 2131624385; - - // aapt resource value: 0x7F0E01C2 - public const int Widget_AppCompat_Spinner_Underlined = 2131624386; - - // aapt resource value: 0x7F0E01C3 - public const int Widget_AppCompat_TextView_SpinnerItem = 2131624387; - - // aapt resource value: 0x7F0E01C4 - public const int Widget_AppCompat_Toolbar = 2131624388; - - // aapt resource value: 0x7F0E01C5 - public const int Widget_AppCompat_Toolbar_Button_Navigation = 2131624389; - - // aapt resource value: 0x7F0E01C6 - public const int Widget_Compat_NotificationActionContainer = 2131624390; - - // aapt resource value: 0x7F0E01C7 - public const int Widget_Compat_NotificationActionText = 2131624391; - - // aapt resource value: 0x7F0E01C8 - public const int Widget_Design_AppBarLayout = 2131624392; - - // aapt resource value: 0x7F0E01C9 - public const int Widget_Design_BottomNavigationView = 2131624393; - - // aapt resource value: 0x7F0E01CA - public const int Widget_Design_BottomSheet_Modal = 2131624394; - - // aapt resource value: 0x7F0E01CB - public const int Widget_Design_CollapsingToolbar = 2131624395; - - // aapt resource value: 0x7F0E01CC - public const int Widget_Design_FloatingActionButton = 2131624396; - - // aapt resource value: 0x7F0E01CD - public const int Widget_Design_NavigationView = 2131624397; - - // aapt resource value: 0x7F0E01CE - public const int Widget_Design_ScrimInsetsFrameLayout = 2131624398; - - // aapt resource value: 0x7F0E01CF - public const int Widget_Design_Snackbar = 2131624399; - - // aapt resource value: 0x7F0E01D0 - public const int Widget_Design_TabLayout = 2131624400; - - // aapt resource value: 0x7F0E01D1 - public const int Widget_Design_TextInputLayout = 2131624401; - - // aapt resource value: 0x7F0E01D2 - public const int Widget_MaterialComponents_BottomAppBar = 2131624402; - - // aapt resource value: 0x7F0E01D3 - public const int Widget_MaterialComponents_BottomAppBar_Colored = 2131624403; - - // aapt resource value: 0x7F0E01D4 - public const int Widget_MaterialComponents_BottomNavigationView = 2131624404; - - // aapt resource value: 0x7F0E01D5 - public const int Widget_MaterialComponents_BottomNavigationView_Colored = 2131624405; - - // aapt resource value: 0x7F0E01D6 - public const int Widget_MaterialComponents_BottomSheet_Modal = 2131624406; - - // aapt resource value: 0x7F0E01D7 - public const int Widget_MaterialComponents_Button = 2131624407; - - // aapt resource value: 0x7F0E01D8 - public const int Widget_MaterialComponents_Button_Icon = 2131624408; - - // aapt resource value: 0x7F0E01D9 - public const int Widget_MaterialComponents_Button_OutlinedButton = 2131624409; - - // aapt resource value: 0x7F0E01DA - public const int Widget_MaterialComponents_Button_OutlinedButton_Icon = 2131624410; - - // aapt resource value: 0x7F0E01DB - public const int Widget_MaterialComponents_Button_TextButton = 2131624411; - - // aapt resource value: 0x7F0E01DC - public const int Widget_MaterialComponents_Button_TextButton_Dialog = 2131624412; - - // aapt resource value: 0x7F0E01DD - public const int Widget_MaterialComponents_Button_TextButton_Dialog_Icon = 2131624413; - - // aapt resource value: 0x7F0E01DE - public const int Widget_MaterialComponents_Button_TextButton_Icon = 2131624414; - - // aapt resource value: 0x7F0E01DF - public const int Widget_MaterialComponents_Button_UnelevatedButton = 2131624415; - - // aapt resource value: 0x7F0E01E0 - public const int Widget_MaterialComponents_Button_UnelevatedButton_Icon = 2131624416; - - // aapt resource value: 0x7F0E01E1 - public const int Widget_MaterialComponents_CardView = 2131624417; - - // aapt resource value: 0x7F0E01E6 - public const int Widget_MaterialComponents_ChipGroup = 2131624422; - - // aapt resource value: 0x7F0E01E2 - public const int Widget_MaterialComponents_Chip_Action = 2131624418; - - // aapt resource value: 0x7F0E01E3 - public const int Widget_MaterialComponents_Chip_Choice = 2131624419; - - // aapt resource value: 0x7F0E01E4 - public const int Widget_MaterialComponents_Chip_Entry = 2131624420; - - // aapt resource value: 0x7F0E01E5 - public const int Widget_MaterialComponents_Chip_Filter = 2131624421; - - // aapt resource value: 0x7F0E01E7 - public const int Widget_MaterialComponents_FloatingActionButton = 2131624423; - - // aapt resource value: 0x7F0E01E8 - public const int Widget_MaterialComponents_NavigationView = 2131624424; - - // aapt resource value: 0x7F0E01E9 - public const int Widget_MaterialComponents_Snackbar = 2131624425; - - // aapt resource value: 0x7F0E01EA - public const int Widget_MaterialComponents_Snackbar_FullWidth = 2131624426; - - // aapt resource value: 0x7F0E01EB - public const int Widget_MaterialComponents_TabLayout = 2131624427; - - // aapt resource value: 0x7F0E01EC - public const int Widget_MaterialComponents_TabLayout_Colored = 2131624428; - - // aapt resource value: 0x7F0E01ED - public const int Widget_MaterialComponents_TextInputEditText_FilledBox = 2131624429; - - // aapt resource value: 0x7F0E01EE - public const int Widget_MaterialComponents_TextInputEditText_FilledBox_Dense = 2131624430; - - // aapt resource value: 0x7F0E01EF - public const int Widget_MaterialComponents_TextInputEditText_OutlinedBox = 2131624431; - - // aapt resource value: 0x7F0E01F0 - public const int Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense = 2131624432; - - // aapt resource value: 0x7F0E01F1 - public const int Widget_MaterialComponents_TextInputLayout_FilledBox = 2131624433; - - // aapt resource value: 0x7F0E01F2 - public const int Widget_MaterialComponents_TextInputLayout_FilledBox_Dense = 2131624434; - - // aapt resource value: 0x7F0E01F3 - public const int Widget_MaterialComponents_TextInputLayout_OutlinedBox = 2131624435; - - // aapt resource value: 0x7F0E01F4 - public const int Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense = 2131624436; - - // aapt resource value: 0x7F0E01F5 - public const int Widget_MaterialComponents_Toolbar = 2131624437; - - // aapt resource value: 0x7F0E01F6 - public const int Widget_Support_CoordinatorLayout = 2131624438; - - static Style() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Style() - { - } - } - - public partial class Styleable - { - - // aapt resource value: { 0x7F030031,0x7F030032,0x7F030033,0x7F030092,0x7F030093,0x7F030094,0x7F030095,0x7F030096,0x7F030097,0x7F0300A5,0x7F0300AA,0x7F0300AB,0x7F0300B6,0x7F0300E0,0x7F0300E5,0x7F0300EA,0x7F0300EB,0x7F0300ED,0x7F0300F7,0x7F030101,0x7F030124,0x7F030130,0x7F030141,0x7F030145,0x7F030146,0x7F030175,0x7F030178,0x7F0301BD,0x7F0301C7 } - public static int[] ActionBar = new int[] { - 2130903089, - 2130903090, - 2130903091, - 2130903186, - 2130903187, - 2130903188, - 2130903189, - 2130903190, - 2130903191, - 2130903205, - 2130903210, - 2130903211, - 2130903222, - 2130903264, - 2130903269, - 2130903274, - 2130903275, - 2130903277, - 2130903287, - 2130903297, - 2130903332, - 2130903344, - 2130903361, - 2130903365, - 2130903366, - 2130903413, - 2130903416, - 2130903485, - 2130903495}; - - // aapt resource value: { 0x10100B3 } - public static int[] ActionBarLayout = new int[] { - 16842931}; - - // aapt resource value: 0 - public const int ActionBarLayout_android_layout_gravity = 0; - - // aapt resource value: 0 - public const int ActionBar_background = 0; - - // aapt resource value: 1 - public const int ActionBar_backgroundSplit = 1; - - // aapt resource value: 2 - public const int ActionBar_backgroundStacked = 2; - - // aapt resource value: 3 - public const int ActionBar_contentInsetEnd = 3; - - // aapt resource value: 4 - public const int ActionBar_contentInsetEndWithActions = 4; - - // aapt resource value: 5 - public const int ActionBar_contentInsetLeft = 5; - - // aapt resource value: 6 - public const int ActionBar_contentInsetRight = 6; - - // aapt resource value: 7 - public const int ActionBar_contentInsetStart = 7; - - // aapt resource value: 8 - public const int ActionBar_contentInsetStartWithNavigation = 8; - - // aapt resource value: 9 - public const int ActionBar_customNavigationLayout = 9; - - // aapt resource value: 10 - public const int ActionBar_displayOptions = 10; - - // aapt resource value: 11 - public const int ActionBar_divider = 11; - - // aapt resource value: 12 - public const int ActionBar_elevation = 12; - - // aapt resource value: 13 - public const int ActionBar_height = 13; - - // aapt resource value: 14 - public const int ActionBar_hideOnContentScroll = 14; - - // aapt resource value: 15 - public const int ActionBar_homeAsUpIndicator = 15; - - // aapt resource value: 16 - public const int ActionBar_homeLayout = 16; - - // aapt resource value: 17 - public const int ActionBar_icon = 17; - - // aapt resource value: 18 - public const int ActionBar_indeterminateProgressStyle = 18; - - // aapt resource value: 19 - public const int ActionBar_itemPadding = 19; - - // aapt resource value: 20 - public const int ActionBar_logo = 20; - - // aapt resource value: 21 - public const int ActionBar_navigationMode = 21; - - // aapt resource value: 22 - public const int ActionBar_popupTheme = 22; - - // aapt resource value: 23 - public const int ActionBar_progressBarPadding = 23; - - // aapt resource value: 24 - public const int ActionBar_progressBarStyle = 24; - - // aapt resource value: 25 - public const int ActionBar_subtitle = 25; - - // aapt resource value: 26 - public const int ActionBar_subtitleTextStyle = 26; - - // aapt resource value: 27 - public const int ActionBar_title = 27; - - // aapt resource value: 28 - public const int ActionBar_titleTextStyle = 28; - - // aapt resource value: { 0x101013F } - public static int[] ActionMenuItemView = new int[] { - 16843071}; - - // aapt resource value: 0 - public const int ActionMenuItemView_android_minWidth = 0; - - // aapt resource value: { 0xFFFFFFFF } - public static int[] ActionMenuView = new int[] { - -1}; - - // aapt resource value: { 0x7F030031,0x7F030032,0x7F03007E,0x7F0300E0,0x7F030178,0x7F0301C7 } - public static int[] ActionMode = new int[] { - 2130903089, - 2130903090, - 2130903166, - 2130903264, - 2130903416, - 2130903495}; - - // aapt resource value: 0 - public const int ActionMode_background = 0; - - // aapt resource value: 1 - public const int ActionMode_backgroundSplit = 1; - - // aapt resource value: 2 - public const int ActionMode_closeItemLayout = 2; - - // aapt resource value: 3 - public const int ActionMode_height = 3; - - // aapt resource value: 4 - public const int ActionMode_subtitleTextStyle = 4; - - // aapt resource value: 5 - public const int ActionMode_titleTextStyle = 5; - - // aapt resource value: { 0x7F0300BB,0x7F0300F8 } - public static int[] ActivityChooserView = new int[] { - 2130903227, - 2130903288}; - - // aapt resource value: 0 - public const int ActivityChooserView_expandActivityOverflowButtonDrawable = 0; - - // aapt resource value: 1 - public const int ActivityChooserView_initialActivityCount = 1; - - // aapt resource value: { 0x10100F2,0x7F030052,0x7F030053,0x7F03011B,0x7F03011C,0x7F03012D,0x7F03015D,0x7F03015E } - public static int[] AlertDialog = new int[] { - 16842994, - 2130903122, - 2130903123, - 2130903323, - 2130903324, - 2130903341, - 2130903389, - 2130903390}; - - // aapt resource value: 0 - public const int AlertDialog_android_layout = 0; - - // aapt resource value: 1 - public const int AlertDialog_buttonIconDimen = 1; - - // aapt resource value: 2 - public const int AlertDialog_buttonPanelSideLayout = 2; - - // aapt resource value: 3 - public const int AlertDialog_listItemLayout = 3; - - // aapt resource value: 4 - public const int AlertDialog_listLayout = 4; - - // aapt resource value: 5 - public const int AlertDialog_multiChoiceItemLayout = 5; - - // aapt resource value: 6 - public const int AlertDialog_showTitle = 6; - - // aapt resource value: 7 - public const int AlertDialog_singleChoiceItemLayout = 7; - - // aapt resource value: { 0x101011C,0x1010194,0x1010195,0x1010196,0x101030C,0x101030D } - public static int[] AnimatedStateListDrawableCompat = new int[] { - 16843036, - 16843156, - 16843157, - 16843158, - 16843532, - 16843533}; - - // aapt resource value: 3 - public const int AnimatedStateListDrawableCompat_android_constantSize = 3; - - // aapt resource value: 0 - public const int AnimatedStateListDrawableCompat_android_dither = 0; - - // aapt resource value: 4 - public const int AnimatedStateListDrawableCompat_android_enterFadeDuration = 4; - - // aapt resource value: 5 - public const int AnimatedStateListDrawableCompat_android_exitFadeDuration = 5; - - // aapt resource value: 2 - public const int AnimatedStateListDrawableCompat_android_variablePadding = 2; - - // aapt resource value: 1 - public const int AnimatedStateListDrawableCompat_android_visible = 1; - - // aapt resource value: { 0x10100D0,0x1010199 } - public static int[] AnimatedStateListDrawableItem = new int[] { - 16842960, - 16843161}; - - // aapt resource value: 1 - public const int AnimatedStateListDrawableItem_android_drawable = 1; - - // aapt resource value: 0 - public const int AnimatedStateListDrawableItem_android_id = 0; - - // aapt resource value: { 0x1010199,0x1010449,0x101044A,0x101044B } - public static int[] AnimatedStateListDrawableTransition = new int[] { - 16843161, - 16843849, - 16843850, - 16843851}; - - // aapt resource value: 0 - public const int AnimatedStateListDrawableTransition_android_drawable = 0; - - // aapt resource value: 2 - public const int AnimatedStateListDrawableTransition_android_fromId = 2; - - // aapt resource value: 3 - public const int AnimatedStateListDrawableTransition_android_reversible = 3; - - // aapt resource value: 1 - public const int AnimatedStateListDrawableTransition_android_toId = 1; - - // aapt resource value: { 0x10100D4,0x101048F,0x1010540,0x7F0300B6,0x7F0300BC,0x7F030116 } - public static int[] AppBarLayout = new int[] { - 16842964, - 16843919, - 16844096, - 2130903222, - 2130903228, - 2130903318}; - - // aapt resource value: { 0x7F03016B,0x7F03016C,0x7F03016D,0x7F03016E } - public static int[] AppBarLayoutStates = new int[] { - 2130903403, - 2130903404, - 2130903405, - 2130903406}; - - // aapt resource value: 0 - public const int AppBarLayoutStates_state_collapsed = 0; - - // aapt resource value: 1 - public const int AppBarLayoutStates_state_collapsible = 1; - - // aapt resource value: 2 - public const int AppBarLayoutStates_state_liftable = 2; - - // aapt resource value: 3 - public const int AppBarLayoutStates_state_lifted = 3; - - // aapt resource value: 0 - public const int AppBarLayout_android_background = 0; - - // aapt resource value: 2 - public const int AppBarLayout_android_keyboardNavigationCluster = 2; - - // aapt resource value: 1 - public const int AppBarLayout_android_touchscreenBlocksFocus = 1; - - // aapt resource value: 3 - public const int AppBarLayout_elevation = 3; - - // aapt resource value: 4 - public const int AppBarLayout_expanded = 4; - - // aapt resource value: { 0x7F030114,0x7F030115 } - public static int[] AppBarLayout_Layout = new int[] { - 2130903316, - 2130903317}; - - // aapt resource value: 0 - public const int AppBarLayout_Layout_layout_scrollFlags = 0; - - // aapt resource value: 1 - public const int AppBarLayout_Layout_layout_scrollInterpolator = 1; - - // aapt resource value: 5 - public const int AppBarLayout_liftOnScroll = 5; - - // aapt resource value: { 0x1010119,0x7F030168,0x7F0301BB,0x7F0301BC } - public static int[] AppCompatImageView = new int[] { - 16843033, - 2130903400, - 2130903483, - 2130903484}; - - // aapt resource value: 0 - public const int AppCompatImageView_android_src = 0; - - // aapt resource value: 1 - public const int AppCompatImageView_srcCompat = 1; - - // aapt resource value: 2 - public const int AppCompatImageView_tint = 2; - - // aapt resource value: 3 - public const int AppCompatImageView_tintMode = 3; - - // aapt resource value: { 0x1010142,0x7F0301B8,0x7F0301B9,0x7F0301BA } - public static int[] AppCompatSeekBar = new int[] { - 16843074, - 2130903480, - 2130903481, - 2130903482}; - - // aapt resource value: 0 - public const int AppCompatSeekBar_android_thumb = 0; - - // aapt resource value: 1 - public const int AppCompatSeekBar_tickMark = 1; - - // aapt resource value: 2 - public const int AppCompatSeekBar_tickMarkTint = 2; - - // aapt resource value: 3 - public const int AppCompatSeekBar_tickMarkTintMode = 3; - - // aapt resource value: { 0x1010034,0x101016D,0x101016E,0x101016F,0x1010170,0x1010392,0x1010393 } - public static int[] AppCompatTextHelper = new int[] { - 16842804, - 16843117, - 16843118, - 16843119, - 16843120, - 16843666, - 16843667}; - - // aapt resource value: 2 - public const int AppCompatTextHelper_android_drawableBottom = 2; - - // aapt resource value: 6 - public const int AppCompatTextHelper_android_drawableEnd = 6; - - // aapt resource value: 3 - public const int AppCompatTextHelper_android_drawableLeft = 3; - - // aapt resource value: 4 - public const int AppCompatTextHelper_android_drawableRight = 4; - - // aapt resource value: 5 - public const int AppCompatTextHelper_android_drawableStart = 5; - - // aapt resource value: 1 - public const int AppCompatTextHelper_android_drawableTop = 1; - - // aapt resource value: 0 - public const int AppCompatTextHelper_android_textAppearance = 0; - - // aapt resource value: { 0x1010034,0x7F03002C,0x7F03002D,0x7F03002E,0x7F03002F,0x7F030030,0x7F0300CF,0x7F0300D2,0x7F030109,0x7F030117,0x7F030198 } - public static int[] AppCompatTextView = new int[] { - 16842804, - 2130903084, - 2130903085, - 2130903086, - 2130903087, - 2130903088, - 2130903247, - 2130903250, - 2130903305, - 2130903319, - 2130903448}; - - // aapt resource value: 0 - public const int AppCompatTextView_android_textAppearance = 0; - - // aapt resource value: 1 - public const int AppCompatTextView_autoSizeMaxTextSize = 1; - - // aapt resource value: 2 - public const int AppCompatTextView_autoSizeMinTextSize = 2; - - // aapt resource value: 3 - public const int AppCompatTextView_autoSizePresetSizes = 3; - - // aapt resource value: 4 - public const int AppCompatTextView_autoSizeStepGranularity = 4; - - // aapt resource value: 5 - public const int AppCompatTextView_autoSizeTextType = 5; - - // aapt resource value: 6 - public const int AppCompatTextView_firstBaselineToTopHeight = 6; - - // aapt resource value: 7 - public const int AppCompatTextView_fontFamily = 7; - - // aapt resource value: 8 - public const int AppCompatTextView_lastBaselineToBottomHeight = 8; - - // aapt resource value: 9 - public const int AppCompatTextView_lineHeight = 9; - - // aapt resource value: 10 - public const int AppCompatTextView_textAllCaps = 10; - - // aapt resource value: { 0x1010057,0x10100AE,0x7F030000,0x7F030001,0x7F030002,0x7F030003,0x7F030004,0x7F030005,0x7F030006,0x7F030007,0x7F030008,0x7F030009,0x7F03000A,0x7F03000B,0x7F03000C,0x7F03000E,0x7F03000F,0x7F030010,0x7F030011,0x7F030012,0x7F030013,0x7F030014,0x7F030015,0x7F030016,0x7F030017,0x7F030018,0x7F030019,0x7F03001A,0x7F03001B,0x7F03001C,0x7F03001D,0x7F03001E,0x7F030021,0x7F030022,0x7F030023,0x7F030024,0x7F030025,0x7F03002B,0x7F03003E,0x7F03004C,0x7F03004D,0x7F03004E,0x7F03004F,0x7F030050,0x7F030054,0x7F030055,0x7F03005F,0x7F030064,0x7F030085,0x7F030086,0x7F030087,0x7F030088,0x7F030089,0x7F03008A,0x7F03008B,0x7F03008C,0x7F03008D,0x7F03008F,0x7F03009E,0x7F0300A7,0x7F0300A8,0x7F0300A9,0x7F0300AC,0x7F0300AE,0x7F0300B1,0x7F0300B2,0x7F0300B3,0x7F0300B4,0x7F0300B5,0x7F0300EA,0x7F0300F6,0x7F030119,0x7F03011A,0x7F03011D,0x7F03011E,0x7F03011F,0x7F030120,0x7F030121,0x7F030122,0x7F030123,0x7F030138,0x7F030139,0x7F03013A,0x7F030140,0x7F030142,0x7F030149,0x7F03014A,0x7F03014B,0x7F03014C,0x7F030155,0x7F030156,0x7F030157,0x7F030158,0x7F030165,0x7F030166,0x7F03017C,0x7F0301A3,0x7F0301A4,0x7F0301A5,0x7F0301A6,0x7F0301A8,0x7F0301A9,0x7F0301AA,0x7F0301AB,0x7F0301AE,0x7F0301AF,0x7F0301C9,0x7F0301CA,0x7F0301CB,0x7F0301CC,0x7F0301D3,0x7F0301D5,0x7F0301D6,0x7F0301D7,0x7F0301D8,0x7F0301D9,0x7F0301DA,0x7F0301DB,0x7F0301DC,0x7F0301DD,0x7F0301DE } - public static int[] AppCompatTheme = new int[] { - 16842839, - 16842926, - 2130903040, - 2130903041, - 2130903042, - 2130903043, - 2130903044, - 2130903045, - 2130903046, - 2130903047, - 2130903048, - 2130903049, - 2130903050, - 2130903051, - 2130903052, - 2130903054, - 2130903055, - 2130903056, - 2130903057, - 2130903058, - 2130903059, - 2130903060, - 2130903061, - 2130903062, - 2130903063, - 2130903064, - 2130903065, - 2130903066, - 2130903067, - 2130903068, - 2130903069, - 2130903070, - 2130903073, - 2130903074, - 2130903075, - 2130903076, - 2130903077, - 2130903083, - 2130903102, - 2130903116, - 2130903117, - 2130903118, - 2130903119, - 2130903120, - 2130903124, - 2130903125, - 2130903135, - 2130903140, - 2130903173, - 2130903174, - 2130903175, - 2130903176, - 2130903177, - 2130903178, - 2130903179, - 2130903180, - 2130903181, - 2130903183, - 2130903198, - 2130903207, - 2130903208, - 2130903209, - 2130903212, - 2130903214, - 2130903217, - 2130903218, - 2130903219, - 2130903220, - 2130903221, - 2130903274, - 2130903286, - 2130903321, - 2130903322, - 2130903325, - 2130903326, - 2130903327, - 2130903328, - 2130903329, - 2130903330, - 2130903331, - 2130903352, - 2130903353, - 2130903354, - 2130903360, - 2130903362, - 2130903369, - 2130903370, - 2130903371, - 2130903372, - 2130903381, - 2130903382, - 2130903383, - 2130903384, - 2130903397, - 2130903398, - 2130903420, - 2130903459, - 2130903460, - 2130903461, - 2130903462, - 2130903464, - 2130903465, - 2130903466, - 2130903467, - 2130903470, - 2130903471, - 2130903497, - 2130903498, - 2130903499, - 2130903500, - 2130903507, - 2130903509, - 2130903510, - 2130903511, - 2130903512, - 2130903513, - 2130903514, - 2130903515, - 2130903516, - 2130903517, - 2130903518}; - - // aapt resource value: 2 - public const int AppCompatTheme_actionBarDivider = 2; - - // aapt resource value: 3 - public const int AppCompatTheme_actionBarItemBackground = 3; - - // aapt resource value: 4 - public const int AppCompatTheme_actionBarPopupTheme = 4; - - // aapt resource value: 5 - public const int AppCompatTheme_actionBarSize = 5; - - // aapt resource value: 6 - public const int AppCompatTheme_actionBarSplitStyle = 6; - - // aapt resource value: 7 - public const int AppCompatTheme_actionBarStyle = 7; - - // aapt resource value: 8 - public const int AppCompatTheme_actionBarTabBarStyle = 8; - - // aapt resource value: 9 - public const int AppCompatTheme_actionBarTabStyle = 9; - - // aapt resource value: 10 - public const int AppCompatTheme_actionBarTabTextStyle = 10; - - // aapt resource value: 11 - public const int AppCompatTheme_actionBarTheme = 11; - - // aapt resource value: 12 - public const int AppCompatTheme_actionBarWidgetTheme = 12; - - // aapt resource value: 13 - public const int AppCompatTheme_actionButtonStyle = 13; - - // aapt resource value: 14 - public const int AppCompatTheme_actionDropDownStyle = 14; - - // aapt resource value: 15 - public const int AppCompatTheme_actionMenuTextAppearance = 15; - - // aapt resource value: 16 - public const int AppCompatTheme_actionMenuTextColor = 16; - - // aapt resource value: 17 - public const int AppCompatTheme_actionModeBackground = 17; - - // aapt resource value: 18 - public const int AppCompatTheme_actionModeCloseButtonStyle = 18; - - // aapt resource value: 19 - public const int AppCompatTheme_actionModeCloseDrawable = 19; - - // aapt resource value: 20 - public const int AppCompatTheme_actionModeCopyDrawable = 20; - - // aapt resource value: 21 - public const int AppCompatTheme_actionModeCutDrawable = 21; - - // aapt resource value: 22 - public const int AppCompatTheme_actionModeFindDrawable = 22; - - // aapt resource value: 23 - public const int AppCompatTheme_actionModePasteDrawable = 23; - - // aapt resource value: 24 - public const int AppCompatTheme_actionModePopupWindowStyle = 24; - - // aapt resource value: 25 - public const int AppCompatTheme_actionModeSelectAllDrawable = 25; - - // aapt resource value: 26 - public const int AppCompatTheme_actionModeShareDrawable = 26; - - // aapt resource value: 27 - public const int AppCompatTheme_actionModeSplitBackground = 27; - - // aapt resource value: 28 - public const int AppCompatTheme_actionModeStyle = 28; - - // aapt resource value: 29 - public const int AppCompatTheme_actionModeWebSearchDrawable = 29; - - // aapt resource value: 30 - public const int AppCompatTheme_actionOverflowButtonStyle = 30; - - // aapt resource value: 31 - public const int AppCompatTheme_actionOverflowMenuStyle = 31; - - // aapt resource value: 32 - public const int AppCompatTheme_activityChooserViewStyle = 32; - - // aapt resource value: 33 - public const int AppCompatTheme_alertDialogButtonGroupStyle = 33; - - // aapt resource value: 34 - public const int AppCompatTheme_alertDialogCenterButtons = 34; - - // aapt resource value: 35 - public const int AppCompatTheme_alertDialogStyle = 35; - - // aapt resource value: 36 - public const int AppCompatTheme_alertDialogTheme = 36; - - // aapt resource value: 1 - public const int AppCompatTheme_android_windowAnimationStyle = 1; - - // aapt resource value: 0 - public const int AppCompatTheme_android_windowIsFloating = 0; - - // aapt resource value: 37 - public const int AppCompatTheme_autoCompleteTextViewStyle = 37; - - // aapt resource value: 38 - public const int AppCompatTheme_borderlessButtonStyle = 38; - - // aapt resource value: 39 - public const int AppCompatTheme_buttonBarButtonStyle = 39; - - // aapt resource value: 40 - public const int AppCompatTheme_buttonBarNegativeButtonStyle = 40; - - // aapt resource value: 41 - public const int AppCompatTheme_buttonBarNeutralButtonStyle = 41; - - // aapt resource value: 42 - public const int AppCompatTheme_buttonBarPositiveButtonStyle = 42; - - // aapt resource value: 43 - public const int AppCompatTheme_buttonBarStyle = 43; - - // aapt resource value: 44 - public const int AppCompatTheme_buttonStyle = 44; - - // aapt resource value: 45 - public const int AppCompatTheme_buttonStyleSmall = 45; - - // aapt resource value: 46 - public const int AppCompatTheme_checkboxStyle = 46; - - // aapt resource value: 47 - public const int AppCompatTheme_checkedTextViewStyle = 47; - - // aapt resource value: 48 - public const int AppCompatTheme_colorAccent = 48; - - // aapt resource value: 49 - public const int AppCompatTheme_colorBackgroundFloating = 49; - - // aapt resource value: 50 - public const int AppCompatTheme_colorButtonNormal = 50; - - // aapt resource value: 51 - public const int AppCompatTheme_colorControlActivated = 51; - - // aapt resource value: 52 - public const int AppCompatTheme_colorControlHighlight = 52; - - // aapt resource value: 53 - public const int AppCompatTheme_colorControlNormal = 53; - - // aapt resource value: 54 - public const int AppCompatTheme_colorError = 54; - - // aapt resource value: 55 - public const int AppCompatTheme_colorPrimary = 55; - - // aapt resource value: 56 - public const int AppCompatTheme_colorPrimaryDark = 56; - - // aapt resource value: 57 - public const int AppCompatTheme_colorSwitchThumbNormal = 57; - - // aapt resource value: 58 - public const int AppCompatTheme_controlBackground = 58; - - // aapt resource value: 59 - public const int AppCompatTheme_dialogCornerRadius = 59; - - // aapt resource value: 60 - public const int AppCompatTheme_dialogPreferredPadding = 60; - - // aapt resource value: 61 - public const int AppCompatTheme_dialogTheme = 61; - - // aapt resource value: 62 - public const int AppCompatTheme_dividerHorizontal = 62; - - // aapt resource value: 63 - public const int AppCompatTheme_dividerVertical = 63; - - // aapt resource value: 65 - public const int AppCompatTheme_dropdownListPreferredItemHeight = 65; - - // aapt resource value: 64 - public const int AppCompatTheme_dropDownListViewStyle = 64; - - // aapt resource value: 66 - public const int AppCompatTheme_editTextBackground = 66; - - // aapt resource value: 67 - public const int AppCompatTheme_editTextColor = 67; - - // aapt resource value: 68 - public const int AppCompatTheme_editTextStyle = 68; - - // aapt resource value: 69 - public const int AppCompatTheme_homeAsUpIndicator = 69; - - // aapt resource value: 70 - public const int AppCompatTheme_imageButtonStyle = 70; - - // aapt resource value: 71 - public const int AppCompatTheme_listChoiceBackgroundIndicator = 71; - - // aapt resource value: 72 - public const int AppCompatTheme_listDividerAlertDialog = 72; - - // aapt resource value: 73 - public const int AppCompatTheme_listMenuViewStyle = 73; - - // aapt resource value: 74 - public const int AppCompatTheme_listPopupWindowStyle = 74; - - // aapt resource value: 75 - public const int AppCompatTheme_listPreferredItemHeight = 75; - - // aapt resource value: 76 - public const int AppCompatTheme_listPreferredItemHeightLarge = 76; - - // aapt resource value: 77 - public const int AppCompatTheme_listPreferredItemHeightSmall = 77; - - // aapt resource value: 78 - public const int AppCompatTheme_listPreferredItemPaddingLeft = 78; - - // aapt resource value: 79 - public const int AppCompatTheme_listPreferredItemPaddingRight = 79; - - // aapt resource value: 80 - public const int AppCompatTheme_panelBackground = 80; - - // aapt resource value: 81 - public const int AppCompatTheme_panelMenuListTheme = 81; - - // aapt resource value: 82 - public const int AppCompatTheme_panelMenuListWidth = 82; - - // aapt resource value: 83 - public const int AppCompatTheme_popupMenuStyle = 83; - - // aapt resource value: 84 - public const int AppCompatTheme_popupWindowStyle = 84; - - // aapt resource value: 85 - public const int AppCompatTheme_radioButtonStyle = 85; - - // aapt resource value: 86 - public const int AppCompatTheme_ratingBarStyle = 86; - - // aapt resource value: 87 - public const int AppCompatTheme_ratingBarStyleIndicator = 87; - - // aapt resource value: 88 - public const int AppCompatTheme_ratingBarStyleSmall = 88; - - // aapt resource value: 89 - public const int AppCompatTheme_searchViewStyle = 89; - - // aapt resource value: 90 - public const int AppCompatTheme_seekBarStyle = 90; - - // aapt resource value: 91 - public const int AppCompatTheme_selectableItemBackground = 91; - - // aapt resource value: 92 - public const int AppCompatTheme_selectableItemBackgroundBorderless = 92; - - // aapt resource value: 93 - public const int AppCompatTheme_spinnerDropDownItemStyle = 93; - - // aapt resource value: 94 - public const int AppCompatTheme_spinnerStyle = 94; - - // aapt resource value: 95 - public const int AppCompatTheme_switchStyle = 95; - - // aapt resource value: 96 - public const int AppCompatTheme_textAppearanceLargePopupMenu = 96; - - // aapt resource value: 97 - public const int AppCompatTheme_textAppearanceListItem = 97; - - // aapt resource value: 98 - public const int AppCompatTheme_textAppearanceListItemSecondary = 98; - - // aapt resource value: 99 - public const int AppCompatTheme_textAppearanceListItemSmall = 99; - - // aapt resource value: 100 - public const int AppCompatTheme_textAppearancePopupMenuHeader = 100; - - // aapt resource value: 101 - public const int AppCompatTheme_textAppearanceSearchResultSubtitle = 101; - - // aapt resource value: 102 - public const int AppCompatTheme_textAppearanceSearchResultTitle = 102; - - // aapt resource value: 103 - public const int AppCompatTheme_textAppearanceSmallPopupMenu = 103; - - // aapt resource value: 104 - public const int AppCompatTheme_textColorAlertDialogListItem = 104; - - // aapt resource value: 105 - public const int AppCompatTheme_textColorSearchUrl = 105; - - // aapt resource value: 106 - public const int AppCompatTheme_toolbarNavigationButtonStyle = 106; - - // aapt resource value: 107 - public const int AppCompatTheme_toolbarStyle = 107; - - // aapt resource value: 108 - public const int AppCompatTheme_tooltipForegroundColor = 108; - - // aapt resource value: 109 - public const int AppCompatTheme_tooltipFrameBackground = 109; - - // aapt resource value: 110 - public const int AppCompatTheme_viewInflaterClass = 110; - - // aapt resource value: 111 - public const int AppCompatTheme_windowActionBar = 111; - - // aapt resource value: 112 - public const int AppCompatTheme_windowActionBarOverlay = 112; - - // aapt resource value: 113 - public const int AppCompatTheme_windowActionModeOverlay = 113; - - // aapt resource value: 114 - public const int AppCompatTheme_windowFixedHeightMajor = 114; - - // aapt resource value: 115 - public const int AppCompatTheme_windowFixedHeightMinor = 115; - - // aapt resource value: 116 - public const int AppCompatTheme_windowFixedWidthMajor = 116; - - // aapt resource value: 117 - public const int AppCompatTheme_windowFixedWidthMinor = 117; - - // aapt resource value: 118 - public const int AppCompatTheme_windowMinWidthMajor = 118; - - // aapt resource value: 119 - public const int AppCompatTheme_windowMinWidthMinor = 119; - - // aapt resource value: 120 - public const int AppCompatTheme_windowNoTitle = 120; - - // aapt resource value: { 0x7F030034,0x7F0300C4,0x7F0300C5,0x7F0300C6,0x7F0300C7,0x7F0300E6 } - public static int[] BottomAppBar = new int[] { - 2130903092, - 2130903236, - 2130903237, - 2130903238, - 2130903239, - 2130903270}; - - // aapt resource value: 0 - public const int BottomAppBar_backgroundTint = 0; - - // aapt resource value: 1 - public const int BottomAppBar_fabAlignmentMode = 1; - - // aapt resource value: 2 - public const int BottomAppBar_fabCradleMargin = 2; - - // aapt resource value: 3 - public const int BottomAppBar_fabCradleRoundedCornerRadius = 3; - - // aapt resource value: 4 - public const int BottomAppBar_fabCradleVerticalOffset = 4; - - // aapt resource value: 5 - public const int BottomAppBar_hideOnScroll = 5; - - // aapt resource value: { 0x7F0300B6,0x7F0300FB,0x7F0300FD,0x7F0300FF,0x7F030100,0x7F030104,0x7F030105,0x7F030106,0x7F030108,0x7F03012C } - public static int[] BottomNavigationView = new int[] { - 2130903222, - 2130903291, - 2130903293, - 2130903295, - 2130903296, - 2130903300, - 2130903301, - 2130903302, - 2130903304, - 2130903340}; - - // aapt resource value: 0 - public const int BottomNavigationView_elevation = 0; - - // aapt resource value: 1 - public const int BottomNavigationView_itemBackground = 1; - - // aapt resource value: 2 - public const int BottomNavigationView_itemHorizontalTranslationEnabled = 2; - - // aapt resource value: 3 - public const int BottomNavigationView_itemIconSize = 3; - - // aapt resource value: 4 - public const int BottomNavigationView_itemIconTint = 4; - - // aapt resource value: 5 - public const int BottomNavigationView_itemTextAppearanceActive = 5; - - // aapt resource value: 6 - public const int BottomNavigationView_itemTextAppearanceInactive = 6; - - // aapt resource value: 7 - public const int BottomNavigationView_itemTextColor = 7; - - // aapt resource value: 8 - public const int BottomNavigationView_labelVisibilityMode = 8; - - // aapt resource value: 9 - public const int BottomNavigationView_menu = 9; - - // aapt resource value: { 0x7F030038,0x7F030039,0x7F03003B,0x7F03003C } - public static int[] BottomSheetBehavior_Layout = new int[] { - 2130903096, - 2130903097, - 2130903099, - 2130903100}; - - // aapt resource value: 0 - public const int BottomSheetBehavior_Layout_behavior_fitToContents = 0; - - // aapt resource value: 1 - public const int BottomSheetBehavior_Layout_behavior_hideable = 1; - - // aapt resource value: 2 - public const int BottomSheetBehavior_Layout_behavior_peekHeight = 2; - - // aapt resource value: 3 - public const int BottomSheetBehavior_Layout_behavior_skipCollapsed = 3; - - // aapt resource value: { 0x7F030026 } - public static int[] ButtonBarLayout = new int[] { - 2130903078}; - - // aapt resource value: 0 - public const int ButtonBarLayout_allowStacking = 0; - - // aapt resource value: { 0x101013F,0x1010140,0x7F030058,0x7F030059,0x7F03005A,0x7F03005B,0x7F03005C,0x7F03005D,0x7F030098,0x7F030099,0x7F03009A,0x7F03009B,0x7F03009C } - public static int[] CardView = new int[] { - 16843071, - 16843072, - 2130903128, - 2130903129, - 2130903130, - 2130903131, - 2130903132, - 2130903133, - 2130903192, - 2130903193, - 2130903194, - 2130903195, - 2130903196}; - - // aapt resource value: 1 - public const int CardView_android_minHeight = 1; - - // aapt resource value: 0 - public const int CardView_android_minWidth = 0; - - // aapt resource value: 2 - public const int CardView_cardBackgroundColor = 2; - - // aapt resource value: 3 - public const int CardView_cardCornerRadius = 3; - - // aapt resource value: 4 - public const int CardView_cardElevation = 4; - - // aapt resource value: 5 - public const int CardView_cardMaxElevation = 5; - - // aapt resource value: 6 - public const int CardView_cardPreventCornerOverlap = 6; - - // aapt resource value: 7 - public const int CardView_cardUseCompatPadding = 7; - - // aapt resource value: 8 - public const int CardView_contentPadding = 8; - - // aapt resource value: 9 - public const int CardView_contentPaddingBottom = 9; - - // aapt resource value: 10 - public const int CardView_contentPaddingLeft = 10; - - // aapt resource value: 11 - public const int CardView_contentPaddingRight = 11; - - // aapt resource value: 12 - public const int CardView_contentPaddingTop = 12; - - // aapt resource value: { 0x1010034,0x10100AB,0x101011F,0x101014F,0x10101E5,0x7F030061,0x7F030062,0x7F030063,0x7F030065,0x7F030066,0x7F030067,0x7F030069,0x7F03006A,0x7F03006B,0x7F03006C,0x7F03006D,0x7F03006E,0x7F030073,0x7F030074,0x7F030075,0x7F030077,0x7F030078,0x7F030079,0x7F03007A,0x7F03007B,0x7F03007C,0x7F03007D,0x7F0300E4,0x7F0300EE,0x7F0300F2,0x7F03014E,0x7F03015B,0x7F0301B0,0x7F0301B2 } - public static int[] Chip = new int[] { - 16842804, - 16842923, - 16843039, - 16843087, - 16843237, - 2130903137, - 2130903138, - 2130903139, - 2130903141, - 2130903142, - 2130903143, - 2130903145, - 2130903146, - 2130903147, - 2130903148, - 2130903149, - 2130903150, - 2130903155, - 2130903156, - 2130903157, - 2130903159, - 2130903160, - 2130903161, - 2130903162, - 2130903163, - 2130903164, - 2130903165, - 2130903268, - 2130903278, - 2130903282, - 2130903374, - 2130903387, - 2130903472, - 2130903474}; - - // aapt resource value: { 0x7F030060,0x7F03006F,0x7F030070,0x7F030071,0x7F03015F,0x7F030160 } - public static int[] ChipGroup = new int[] { - 2130903136, - 2130903151, - 2130903152, - 2130903153, - 2130903391, - 2130903392}; - - // aapt resource value: 0 - public const int ChipGroup_checkedChip = 0; - - // aapt resource value: 1 - public const int ChipGroup_chipSpacing = 1; - - // aapt resource value: 2 - public const int ChipGroup_chipSpacingHorizontal = 2; - - // aapt resource value: 3 - public const int ChipGroup_chipSpacingVertical = 3; - - // aapt resource value: 4 - public const int ChipGroup_singleLine = 4; - - // aapt resource value: 5 - public const int ChipGroup_singleSelection = 5; - - // aapt resource value: 4 - public const int Chip_android_checkable = 4; - - // aapt resource value: 1 - public const int Chip_android_ellipsize = 1; - - // aapt resource value: 2 - public const int Chip_android_maxWidth = 2; - - // aapt resource value: 3 - public const int Chip_android_text = 3; - - // aapt resource value: 0 - public const int Chip_android_textAppearance = 0; - - // aapt resource value: 5 - public const int Chip_checkedIcon = 5; - - // aapt resource value: 6 - public const int Chip_checkedIconEnabled = 6; - - // aapt resource value: 7 - public const int Chip_checkedIconVisible = 7; - - // aapt resource value: 8 - public const int Chip_chipBackgroundColor = 8; - - // aapt resource value: 9 - public const int Chip_chipCornerRadius = 9; - - // aapt resource value: 10 - public const int Chip_chipEndPadding = 10; - - // aapt resource value: 11 - public const int Chip_chipIcon = 11; - - // aapt resource value: 12 - public const int Chip_chipIconEnabled = 12; - - // aapt resource value: 13 - public const int Chip_chipIconSize = 13; - - // aapt resource value: 14 - public const int Chip_chipIconTint = 14; - - // aapt resource value: 15 - public const int Chip_chipIconVisible = 15; - - // aapt resource value: 16 - public const int Chip_chipMinHeight = 16; - - // aapt resource value: 17 - public const int Chip_chipStartPadding = 17; - - // aapt resource value: 18 - public const int Chip_chipStrokeColor = 18; - - // aapt resource value: 19 - public const int Chip_chipStrokeWidth = 19; - - // aapt resource value: 20 - public const int Chip_closeIcon = 20; - - // aapt resource value: 21 - public const int Chip_closeIconEnabled = 21; - - // aapt resource value: 22 - public const int Chip_closeIconEndPadding = 22; - - // aapt resource value: 23 - public const int Chip_closeIconSize = 23; - - // aapt resource value: 24 - public const int Chip_closeIconStartPadding = 24; - - // aapt resource value: 25 - public const int Chip_closeIconTint = 25; - - // aapt resource value: 26 - public const int Chip_closeIconVisible = 26; - - // aapt resource value: 27 - public const int Chip_hideMotionSpec = 27; - - // aapt resource value: 28 - public const int Chip_iconEndPadding = 28; - - // aapt resource value: 29 - public const int Chip_iconStartPadding = 29; - - // aapt resource value: 30 - public const int Chip_rippleColor = 30; - - // aapt resource value: 31 - public const int Chip_showMotionSpec = 31; - - // aapt resource value: 32 - public const int Chip_textEndPadding = 32; - - // aapt resource value: 33 - public const int Chip_textStartPadding = 33; - - // aapt resource value: { 0x7F030081,0x7F030082,0x7F03009D,0x7F0300BD,0x7F0300BE,0x7F0300BF,0x7F0300C0,0x7F0300C1,0x7F0300C2,0x7F0300C3,0x7F03014F,0x7F030151,0x7F030170,0x7F0301BD,0x7F0301BE,0x7F0301C8 } - public static int[] CollapsingToolbarLayout = new int[] { - 2130903169, - 2130903170, - 2130903197, - 2130903229, - 2130903230, - 2130903231, - 2130903232, - 2130903233, - 2130903234, - 2130903235, - 2130903375, - 2130903377, - 2130903408, - 2130903485, - 2130903486, - 2130903496}; - - // aapt resource value: 0 - public const int CollapsingToolbarLayout_collapsedTitleGravity = 0; - - // aapt resource value: 1 - public const int CollapsingToolbarLayout_collapsedTitleTextAppearance = 1; - - // aapt resource value: 2 - public const int CollapsingToolbarLayout_contentScrim = 2; - - // aapt resource value: 3 - public const int CollapsingToolbarLayout_expandedTitleGravity = 3; - - // aapt resource value: 4 - public const int CollapsingToolbarLayout_expandedTitleMargin = 4; - - // aapt resource value: 5 - public const int CollapsingToolbarLayout_expandedTitleMarginBottom = 5; - - // aapt resource value: 6 - public const int CollapsingToolbarLayout_expandedTitleMarginEnd = 6; - - // aapt resource value: 7 - public const int CollapsingToolbarLayout_expandedTitleMarginStart = 7; - - // aapt resource value: 8 - public const int CollapsingToolbarLayout_expandedTitleMarginTop = 8; - - // aapt resource value: 9 - public const int CollapsingToolbarLayout_expandedTitleTextAppearance = 9; - - // aapt resource value: { 0x7F03010F,0x7F030110 } - public static int[] CollapsingToolbarLayout_Layout = new int[] { - 2130903311, - 2130903312}; - - // aapt resource value: 0 - public const int CollapsingToolbarLayout_Layout_layout_collapseMode = 0; - - // aapt resource value: 1 - public const int CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = 1; - - // aapt resource value: 10 - public const int CollapsingToolbarLayout_scrimAnimationDuration = 10; - - // aapt resource value: 11 - public const int CollapsingToolbarLayout_scrimVisibleHeightTrigger = 11; - - // aapt resource value: 12 - public const int CollapsingToolbarLayout_statusBarScrim = 12; - - // aapt resource value: 13 - public const int CollapsingToolbarLayout_title = 13; - - // aapt resource value: 14 - public const int CollapsingToolbarLayout_titleEnabled = 14; - - // aapt resource value: 15 - public const int CollapsingToolbarLayout_toolbarId = 15; - - // aapt resource value: { 0x10101A5,0x101031F,0x7F030027 } - public static int[] ColorStateListItem = new int[] { - 16843173, - 16843551, - 2130903079}; - - // aapt resource value: 2 - public const int ColorStateListItem_alpha = 2; - - // aapt resource value: 1 - public const int ColorStateListItem_android_alpha = 1; - - // aapt resource value: 0 - public const int ColorStateListItem_android_color = 0; - - // aapt resource value: { 0x1010107,0x7F030056,0x7F030057 } - public static int[] CompoundButton = new int[] { - 16843015, - 2130903126, - 2130903127}; - - // aapt resource value: 0 - public const int CompoundButton_android_button = 0; - - // aapt resource value: 1 - public const int CompoundButton_buttonTint = 1; - - // aapt resource value: 2 - public const int CompoundButton_buttonTintMode = 2; - - // aapt resource value: { 0x7F030107,0x7F03016F } - public static int[] CoordinatorLayout = new int[] { - 2130903303, - 2130903407}; - - // aapt resource value: 0 - public const int CoordinatorLayout_keylines = 0; - - // aapt resource value: { 0x10100B3,0x7F03010C,0x7F03010D,0x7F03010E,0x7F030111,0x7F030112,0x7F030113 } - public static int[] CoordinatorLayout_Layout = new int[] { - 16842931, - 2130903308, - 2130903309, - 2130903310, - 2130903313, - 2130903314, - 2130903315}; - - // aapt resource value: 0 - public const int CoordinatorLayout_Layout_android_layout_gravity = 0; - - // aapt resource value: 1 - public const int CoordinatorLayout_Layout_layout_anchor = 1; - - // aapt resource value: 2 - public const int CoordinatorLayout_Layout_layout_anchorGravity = 2; - - // aapt resource value: 3 - public const int CoordinatorLayout_Layout_layout_behavior = 3; - - // aapt resource value: 4 - public const int CoordinatorLayout_Layout_layout_dodgeInsetEdges = 4; - - // aapt resource value: 5 - public const int CoordinatorLayout_Layout_layout_insetEdge = 5; - - // aapt resource value: 6 - public const int CoordinatorLayout_Layout_layout_keyline = 6; - - // aapt resource value: 1 - public const int CoordinatorLayout_statusBarBackground = 1; - - // aapt resource value: { 0x7F030041,0x7F030042 } - public static int[] DesignTheme = new int[] { - 2130903105, - 2130903106}; - - // aapt resource value: 0 - public const int DesignTheme_bottomSheetDialogTheme = 0; - - // aapt resource value: 1 - public const int DesignTheme_bottomSheetStyle = 1; - - // aapt resource value: { 0x7F030029,0x7F03002A,0x7F030036,0x7F030084,0x7F0300AF,0x7F0300DD,0x7F030164,0x7F0301B4 } - public static int[] DrawerArrowToggle = new int[] { - 2130903081, - 2130903082, - 2130903094, - 2130903172, - 2130903215, - 2130903261, - 2130903396, - 2130903476}; - - // aapt resource value: 0 - public const int DrawerArrowToggle_arrowHeadLength = 0; - - // aapt resource value: 1 - public const int DrawerArrowToggle_arrowShaftLength = 1; - - // aapt resource value: 2 - public const int DrawerArrowToggle_barLength = 2; - - // aapt resource value: 3 - public const int DrawerArrowToggle_color = 3; - - // aapt resource value: 4 - public const int DrawerArrowToggle_drawableSize = 4; - - // aapt resource value: 5 - public const int DrawerArrowToggle_gapBetweenBars = 5; - - // aapt resource value: 6 - public const int DrawerArrowToggle_spinBars = 6; - - // aapt resource value: 7 - public const int DrawerArrowToggle_thickness = 7; - - // aapt resource value: { 0x7F030034,0x7F030035,0x7F03003D,0x7F0300B6,0x7F0300C8,0x7F0300C9,0x7F0300E4,0x7F0300EC,0x7F03012A,0x7F030144,0x7F03014E,0x7F03015B,0x7F0301D2 } - public static int[] FloatingActionButton = new int[] { - 2130903092, - 2130903093, - 2130903101, - 2130903222, - 2130903240, - 2130903241, - 2130903268, - 2130903276, - 2130903338, - 2130903364, - 2130903374, - 2130903387, - 2130903506}; - - // aapt resource value: 0 - public const int FloatingActionButton_backgroundTint = 0; - - // aapt resource value: 1 - public const int FloatingActionButton_backgroundTintMode = 1; - - // aapt resource value: { 0x7F030037 } - public static int[] FloatingActionButton_Behavior_Layout = new int[] { - 2130903095}; - - // aapt resource value: 0 - public const int FloatingActionButton_Behavior_Layout_behavior_autoHide = 0; - - // aapt resource value: 2 - public const int FloatingActionButton_borderWidth = 2; - - // aapt resource value: 3 - public const int FloatingActionButton_elevation = 3; - - // aapt resource value: 4 - public const int FloatingActionButton_fabCustomSize = 4; - - // aapt resource value: 5 - public const int FloatingActionButton_fabSize = 5; - - // aapt resource value: 6 - public const int FloatingActionButton_hideMotionSpec = 6; - - // aapt resource value: 7 - public const int FloatingActionButton_hoveredFocusedTranslationZ = 7; - - // aapt resource value: 8 - public const int FloatingActionButton_maxImageSize = 8; - - // aapt resource value: 9 - public const int FloatingActionButton_pressedTranslationZ = 9; - - // aapt resource value: 10 - public const int FloatingActionButton_rippleColor = 10; - - // aapt resource value: 11 - public const int FloatingActionButton_showMotionSpec = 11; - - // aapt resource value: 12 - public const int FloatingActionButton_useCompatPadding = 12; - - // aapt resource value: { 0x7F030102,0x7F030118 } - public static int[] FlowLayout = new int[] { - 2130903298, - 2130903320}; - - // aapt resource value: 0 - public const int FlowLayout_itemSpacing = 0; - - // aapt resource value: 1 - public const int FlowLayout_lineSpacing = 1; - - // aapt resource value: { 0x7F0300D3,0x7F0300D4,0x7F0300D5,0x7F0300D6,0x7F0300D7,0x7F0300D8 } - public static int[] FontFamily = new int[] { - 2130903251, - 2130903252, - 2130903253, - 2130903254, - 2130903255, - 2130903256}; - - // aapt resource value: { 0x1010532,0x1010533,0x101053F,0x101056F,0x1010570,0x7F0300D1,0x7F0300D9,0x7F0300DA,0x7F0300DB,0x7F0301D1 } - public static int[] FontFamilyFont = new int[] { - 16844082, - 16844083, - 16844095, - 16844143, - 16844144, - 2130903249, - 2130903257, - 2130903258, - 2130903259, - 2130903505}; - - // aapt resource value: 0 - public const int FontFamilyFont_android_font = 0; - - // aapt resource value: 2 - public const int FontFamilyFont_android_fontStyle = 2; - - // aapt resource value: 4 - public const int FontFamilyFont_android_fontVariationSettings = 4; - - // aapt resource value: 1 - public const int FontFamilyFont_android_fontWeight = 1; - - // aapt resource value: 3 - public const int FontFamilyFont_android_ttcIndex = 3; - - // aapt resource value: 5 - public const int FontFamilyFont_font = 5; - - // aapt resource value: 6 - public const int FontFamilyFont_fontStyle = 6; - - // aapt resource value: 7 - public const int FontFamilyFont_fontVariationSettings = 7; - - // aapt resource value: 8 - public const int FontFamilyFont_fontWeight = 8; - - // aapt resource value: 9 - public const int FontFamilyFont_ttcIndex = 9; - - // aapt resource value: 0 - public const int FontFamily_fontProviderAuthority = 0; - - // aapt resource value: 1 - public const int FontFamily_fontProviderCerts = 1; - - // aapt resource value: 2 - public const int FontFamily_fontProviderFetchStrategy = 2; - - // aapt resource value: 3 - public const int FontFamily_fontProviderFetchTimeout = 3; - - // aapt resource value: 4 - public const int FontFamily_fontProviderPackage = 4; - - // aapt resource value: 5 - public const int FontFamily_fontProviderQuery = 5; - - // aapt resource value: { 0x1010109,0x1010200,0x7F0300DC } - public static int[] ForegroundLinearLayout = new int[] { - 16843017, - 16843264, - 2130903260}; - - // aapt resource value: 0 - public const int ForegroundLinearLayout_android_foreground = 0; - - // aapt resource value: 1 - public const int ForegroundLinearLayout_android_foregroundGravity = 1; - - // aapt resource value: 2 - public const int ForegroundLinearLayout_foregroundInsidePadding = 2; - - // aapt resource value: { 0x101019D,0x101019E,0x10101A1,0x10101A2,0x10101A3,0x10101A4,0x1010201,0x101020B,0x1010510,0x1010511,0x1010512,0x1010513 } - public static int[] GradientColor = new int[] { - 16843165, - 16843166, - 16843169, - 16843170, - 16843171, - 16843172, - 16843265, - 16843275, - 16844048, - 16844049, - 16844050, - 16844051}; - - // aapt resource value: { 0x10101A5,0x1010514 } - public static int[] GradientColorItem = new int[] { - 16843173, - 16844052}; - - // aapt resource value: 0 - public const int GradientColorItem_android_color = 0; - - // aapt resource value: 1 - public const int GradientColorItem_android_offset = 1; - - // aapt resource value: 7 - public const int GradientColor_android_centerColor = 7; - - // aapt resource value: 3 - public const int GradientColor_android_centerX = 3; - - // aapt resource value: 4 - public const int GradientColor_android_centerY = 4; - - // aapt resource value: 1 - public const int GradientColor_android_endColor = 1; - - // aapt resource value: 10 - public const int GradientColor_android_endX = 10; - - // aapt resource value: 11 - public const int GradientColor_android_endY = 11; - - // aapt resource value: 5 - public const int GradientColor_android_gradientRadius = 5; - - // aapt resource value: 0 - public const int GradientColor_android_startColor = 0; - - // aapt resource value: 8 - public const int GradientColor_android_startX = 8; - - // aapt resource value: 9 - public const int GradientColor_android_startY = 9; - - // aapt resource value: 6 - public const int GradientColor_android_tileMode = 6; - - // aapt resource value: 2 - public const int GradientColor_android_type = 2; - - // aapt resource value: { 0x7F030083 } - public static int[] ItemsViewRendererTheme = new int[] { - 2130903171}; - - // aapt resource value: 0 - public const int ItemsViewRendererTheme_collectionViewStyle = 0; - - // aapt resource value: { 0x10100AF,0x10100C4,0x1010126,0x1010127,0x1010128,0x7F0300AB,0x7F0300AD,0x7F03012B,0x7F03015A } - public static int[] LinearLayoutCompat = new int[] { - 16842927, - 16842948, - 16843046, - 16843047, - 16843048, - 2130903211, - 2130903213, - 2130903339, - 2130903386}; - - // aapt resource value: 2 - public const int LinearLayoutCompat_android_baselineAligned = 2; - - // aapt resource value: 3 - public const int LinearLayoutCompat_android_baselineAlignedChildIndex = 3; - - // aapt resource value: 0 - public const int LinearLayoutCompat_android_gravity = 0; - - // aapt resource value: 1 - public const int LinearLayoutCompat_android_orientation = 1; - - // aapt resource value: 4 - public const int LinearLayoutCompat_android_weightSum = 4; - - // aapt resource value: 5 - public const int LinearLayoutCompat_divider = 5; - - // aapt resource value: 6 - public const int LinearLayoutCompat_dividerPadding = 6; - - // aapt resource value: { 0x10100B3,0x10100F4,0x10100F5,0x1010181 } - public static int[] LinearLayoutCompat_Layout = new int[] { - 16842931, - 16842996, - 16842997, - 16843137}; - - // aapt resource value: 0 - public const int LinearLayoutCompat_Layout_android_layout_gravity = 0; - - // aapt resource value: 2 - public const int LinearLayoutCompat_Layout_android_layout_height = 2; - - // aapt resource value: 3 - public const int LinearLayoutCompat_Layout_android_layout_weight = 3; - - // aapt resource value: 1 - public const int LinearLayoutCompat_Layout_android_layout_width = 1; - - // aapt resource value: 7 - public const int LinearLayoutCompat_measureWithLargestChild = 7; - - // aapt resource value: 8 - public const int LinearLayoutCompat_showDividers = 8; - - // aapt resource value: { 0x10102AC,0x10102AD } - public static int[] ListPopupWindow = new int[] { - 16843436, - 16843437}; - - // aapt resource value: 0 - public const int ListPopupWindow_android_dropDownHorizontalOffset = 0; - - // aapt resource value: 1 - public const int ListPopupWindow_android_dropDownVerticalOffset = 1; - - // aapt resource value: { 0x10101B7,0x10101B8,0x10101B9,0x10101BA,0x7F030034,0x7F030035,0x7F0300A0,0x7F0300ED,0x7F0300EF,0x7F0300F0,0x7F0300F1,0x7F0300F3,0x7F0300F4,0x7F03014E,0x7F030171,0x7F030172 } - public static int[] MaterialButton = new int[] { - 16843191, - 16843192, - 16843193, - 16843194, - 2130903092, - 2130903093, - 2130903200, - 2130903277, - 2130903279, - 2130903280, - 2130903281, - 2130903283, - 2130903284, - 2130903374, - 2130903409, - 2130903410}; - - // aapt resource value: 3 - public const int MaterialButton_android_insetBottom = 3; - - // aapt resource value: 0 - public const int MaterialButton_android_insetLeft = 0; - - // aapt resource value: 1 - public const int MaterialButton_android_insetRight = 1; - - // aapt resource value: 2 - public const int MaterialButton_android_insetTop = 2; - - // aapt resource value: 4 - public const int MaterialButton_backgroundTint = 4; - - // aapt resource value: 5 - public const int MaterialButton_backgroundTintMode = 5; - - // aapt resource value: 6 - public const int MaterialButton_cornerRadius = 6; - - // aapt resource value: 7 - public const int MaterialButton_icon = 7; - - // aapt resource value: 8 - public const int MaterialButton_iconGravity = 8; - - // aapt resource value: 9 - public const int MaterialButton_iconPadding = 9; - - // aapt resource value: 10 - public const int MaterialButton_iconSize = 10; - - // aapt resource value: 11 - public const int MaterialButton_iconTint = 11; - - // aapt resource value: 12 - public const int MaterialButton_iconTintMode = 12; - - // aapt resource value: 13 - public const int MaterialButton_rippleColor = 13; - - // aapt resource value: 14 - public const int MaterialButton_strokeColor = 14; - - // aapt resource value: 15 - public const int MaterialButton_strokeWidth = 15; - - // aapt resource value: { 0x7F030171,0x7F030172 } - public static int[] MaterialCardView = new int[] { - 2130903409, - 2130903410}; - - // aapt resource value: 0 - public const int MaterialCardView_strokeColor = 0; - - // aapt resource value: 1 - public const int MaterialCardView_strokeWidth = 1; - - // aapt resource value: { 0x7F030041,0x7F030042,0x7F030068,0x7F030072,0x7F030076,0x7F030085,0x7F030086,0x7F03008C,0x7F03008D,0x7F03008E,0x7F0300B5,0x7F0300D0,0x7F030126,0x7F030127,0x7F030131,0x7F030150,0x7F030161,0x7F030194,0x7F030199,0x7F03019A,0x7F03019B,0x7F03019C,0x7F03019D,0x7F03019E,0x7F03019F,0x7F0301A0,0x7F0301A1,0x7F0301A2,0x7F0301A7,0x7F0301AC,0x7F0301AD,0x7F0301B1 } - public static int[] MaterialComponentsTheme = new int[] { - 2130903105, - 2130903106, - 2130903144, - 2130903154, - 2130903158, - 2130903173, - 2130903174, - 2130903180, - 2130903181, - 2130903182, - 2130903221, - 2130903248, - 2130903334, - 2130903335, - 2130903345, - 2130903376, - 2130903393, - 2130903444, - 2130903449, - 2130903450, - 2130903451, - 2130903452, - 2130903453, - 2130903454, - 2130903455, - 2130903456, - 2130903457, - 2130903458, - 2130903463, - 2130903468, - 2130903469, - 2130903473}; - - // aapt resource value: 0 - public const int MaterialComponentsTheme_bottomSheetDialogTheme = 0; - - // aapt resource value: 1 - public const int MaterialComponentsTheme_bottomSheetStyle = 1; - - // aapt resource value: 2 - public const int MaterialComponentsTheme_chipGroupStyle = 2; - - // aapt resource value: 3 - public const int MaterialComponentsTheme_chipStandaloneStyle = 3; - - // aapt resource value: 4 - public const int MaterialComponentsTheme_chipStyle = 4; - - // aapt resource value: 5 - public const int MaterialComponentsTheme_colorAccent = 5; - - // aapt resource value: 6 - public const int MaterialComponentsTheme_colorBackgroundFloating = 6; - - // aapt resource value: 7 - public const int MaterialComponentsTheme_colorPrimary = 7; - - // aapt resource value: 8 - public const int MaterialComponentsTheme_colorPrimaryDark = 8; - - // aapt resource value: 9 - public const int MaterialComponentsTheme_colorSecondary = 9; - - // aapt resource value: 10 - public const int MaterialComponentsTheme_editTextStyle = 10; - - // aapt resource value: 11 - public const int MaterialComponentsTheme_floatingActionButtonStyle = 11; - - // aapt resource value: 12 - public const int MaterialComponentsTheme_materialButtonStyle = 12; - - // aapt resource value: 13 - public const int MaterialComponentsTheme_materialCardViewStyle = 13; - - // aapt resource value: 14 - public const int MaterialComponentsTheme_navigationViewStyle = 14; - - // aapt resource value: 15 - public const int MaterialComponentsTheme_scrimBackground = 15; - - // aapt resource value: 16 - public const int MaterialComponentsTheme_snackbarButtonStyle = 16; - - // aapt resource value: 17 - public const int MaterialComponentsTheme_tabStyle = 17; - - // aapt resource value: 18 - public const int MaterialComponentsTheme_textAppearanceBody1 = 18; - - // aapt resource value: 19 - public const int MaterialComponentsTheme_textAppearanceBody2 = 19; - - // aapt resource value: 20 - public const int MaterialComponentsTheme_textAppearanceButton = 20; - - // aapt resource value: 21 - public const int MaterialComponentsTheme_textAppearanceCaption = 21; - - // aapt resource value: 22 - public const int MaterialComponentsTheme_textAppearanceHeadline1 = 22; - - // aapt resource value: 23 - public const int MaterialComponentsTheme_textAppearanceHeadline2 = 23; - - // aapt resource value: 24 - public const int MaterialComponentsTheme_textAppearanceHeadline3 = 24; - - // aapt resource value: 25 - public const int MaterialComponentsTheme_textAppearanceHeadline4 = 25; - - // aapt resource value: 26 - public const int MaterialComponentsTheme_textAppearanceHeadline5 = 26; - - // aapt resource value: 27 - public const int MaterialComponentsTheme_textAppearanceHeadline6 = 27; - - // aapt resource value: 28 - public const int MaterialComponentsTheme_textAppearanceOverline = 28; - - // aapt resource value: 29 - public const int MaterialComponentsTheme_textAppearanceSubtitle1 = 29; - - // aapt resource value: 30 - public const int MaterialComponentsTheme_textAppearanceSubtitle2 = 30; - - // aapt resource value: 31 - public const int MaterialComponentsTheme_textInputStyle = 31; - - // aapt resource value: { 0x101000E,0x10100D0,0x1010194,0x10101DE,0x10101DF,0x10101E0 } - public static int[] MenuGroup = new int[] { - 16842766, - 16842960, - 16843156, - 16843230, - 16843231, - 16843232}; - - // aapt resource value: 5 - public const int MenuGroup_android_checkableBehavior = 5; - - // aapt resource value: 0 - public const int MenuGroup_android_enabled = 0; - - // aapt resource value: 1 - public const int MenuGroup_android_id = 1; - - // aapt resource value: 3 - public const int MenuGroup_android_menuCategory = 3; - - // aapt resource value: 4 - public const int MenuGroup_android_orderInCategory = 4; - - // aapt resource value: 2 - public const int MenuGroup_android_visible = 2; - - // aapt resource value: { 0x1010002,0x101000E,0x10100D0,0x1010106,0x1010194,0x10101DE,0x10101DF,0x10101E1,0x10101E2,0x10101E3,0x10101E4,0x10101E5,0x101026F,0x7F03000D,0x7F03001F,0x7F030020,0x7F030028,0x7F030091,0x7F0300F3,0x7F0300F4,0x7F030132,0x7F030159,0x7F0301CD } - public static int[] MenuItem = new int[] { - 16842754, - 16842766, - 16842960, - 16843014, - 16843156, - 16843230, - 16843231, - 16843233, - 16843234, - 16843235, - 16843236, - 16843237, - 16843375, - 2130903053, - 2130903071, - 2130903072, - 2130903080, - 2130903185, - 2130903283, - 2130903284, - 2130903346, - 2130903385, - 2130903501}; - - // aapt resource value: 13 - public const int MenuItem_actionLayout = 13; - - // aapt resource value: 14 - public const int MenuItem_actionProviderClass = 14; - - // aapt resource value: 15 - public const int MenuItem_actionViewClass = 15; - - // aapt resource value: 16 - public const int MenuItem_alphabeticModifiers = 16; - - // aapt resource value: 9 - public const int MenuItem_android_alphabeticShortcut = 9; - - // aapt resource value: 11 - public const int MenuItem_android_checkable = 11; - - // aapt resource value: 3 - public const int MenuItem_android_checked = 3; - - // aapt resource value: 1 - public const int MenuItem_android_enabled = 1; - - // aapt resource value: 0 - public const int MenuItem_android_icon = 0; - - // aapt resource value: 2 - public const int MenuItem_android_id = 2; - - // aapt resource value: 5 - public const int MenuItem_android_menuCategory = 5; - - // aapt resource value: 10 - public const int MenuItem_android_numericShortcut = 10; - - // aapt resource value: 12 - public const int MenuItem_android_onClick = 12; - - // aapt resource value: 6 - public const int MenuItem_android_orderInCategory = 6; - - // aapt resource value: 7 - public const int MenuItem_android_title = 7; - - // aapt resource value: 8 - public const int MenuItem_android_titleCondensed = 8; - - // aapt resource value: 4 - public const int MenuItem_android_visible = 4; - - // aapt resource value: 17 - public const int MenuItem_contentDescription = 17; - - // aapt resource value: 18 - public const int MenuItem_iconTint = 18; - - // aapt resource value: 19 - public const int MenuItem_iconTintMode = 19; - - // aapt resource value: 20 - public const int MenuItem_numericModifiers = 20; - - // aapt resource value: 21 - public const int MenuItem_showAsAction = 21; - - // aapt resource value: 22 - public const int MenuItem_tooltipText = 22; - - // aapt resource value: { 0x10100AE,0x101012C,0x101012D,0x101012E,0x101012F,0x1010130,0x1010131,0x7F030143,0x7F030173 } - public static int[] MenuView = new int[] { - 16842926, - 16843052, - 16843053, - 16843054, - 16843055, - 16843056, - 16843057, - 2130903363, - 2130903411}; - - // aapt resource value: 4 - public const int MenuView_android_headerBackground = 4; - - // aapt resource value: 2 - public const int MenuView_android_horizontalDivider = 2; - - // aapt resource value: 5 - public const int MenuView_android_itemBackground = 5; - - // aapt resource value: 6 - public const int MenuView_android_itemIconDisabledAlpha = 6; - - // aapt resource value: 1 - public const int MenuView_android_itemTextAppearance = 1; - - // aapt resource value: 3 - public const int MenuView_android_verticalDivider = 3; - - // aapt resource value: 0 - public const int MenuView_android_windowAnimationStyle = 0; - - // aapt resource value: 7 - public const int MenuView_preserveIconSpacing = 7; - - // aapt resource value: 8 - public const int MenuView_subMenuArrow = 8; - - // aapt resource value: { 0x10100D4,0x10100DD,0x101011F,0x7F0300B6,0x7F0300DF,0x7F0300FB,0x7F0300FC,0x7F0300FE,0x7F030100,0x7F030103,0x7F030106,0x7F03012C } - public static int[] NavigationView = new int[] { - 16842964, - 16842973, - 16843039, - 2130903222, - 2130903263, - 2130903291, - 2130903292, - 2130903294, - 2130903296, - 2130903299, - 2130903302, - 2130903340}; - - // aapt resource value: 0 - public const int NavigationView_android_background = 0; - - // aapt resource value: 1 - public const int NavigationView_android_fitsSystemWindows = 1; - - // aapt resource value: 2 - public const int NavigationView_android_maxWidth = 2; - - // aapt resource value: 3 - public const int NavigationView_elevation = 3; - - // aapt resource value: 4 - public const int NavigationView_headerLayout = 4; - - // aapt resource value: 5 - public const int NavigationView_itemBackground = 5; - - // aapt resource value: 6 - public const int NavigationView_itemHorizontalPadding = 6; - - // aapt resource value: 7 - public const int NavigationView_itemIconPadding = 7; - - // aapt resource value: 8 - public const int NavigationView_itemIconTint = 8; - - // aapt resource value: 9 - public const int NavigationView_itemTextAppearance = 9; - - // aapt resource value: 10 - public const int NavigationView_itemTextColor = 10; - - // aapt resource value: 11 - public const int NavigationView_menu = 11; - - // aapt resource value: { 0x1010176,0x10102C9,0x7F030133 } - public static int[] PopupWindow = new int[] { - 16843126, - 16843465, - 2130903347}; - - // aapt resource value: { 0x7F03016A } - public static int[] PopupWindowBackgroundState = new int[] { - 2130903402}; - - // aapt resource value: 0 - public const int PopupWindowBackgroundState_state_above_anchor = 0; - - // aapt resource value: 1 - public const int PopupWindow_android_popupAnimationStyle = 1; - - // aapt resource value: 0 - public const int PopupWindow_android_popupBackground = 0; - - // aapt resource value: 2 - public const int PopupWindow_overlapAnchor = 2; - - // aapt resource value: { 0x7F030134,0x7F030137 } - public static int[] RecycleListView = new int[] { - 2130903348, - 2130903351}; - - // aapt resource value: 0 - public const int RecycleListView_paddingBottomNoButtons = 0; - - // aapt resource value: 1 - public const int RecycleListView_paddingTopNoTitle = 1; - - // aapt resource value: { 0x10100C4,0x10100F1,0x7F0300CA,0x7F0300CB,0x7F0300CC,0x7F0300CD,0x7F0300CE,0x7F03010B,0x7F03014D,0x7F030163,0x7F030169 } - public static int[] RecyclerView = new int[] { - 16842948, - 16842993, - 2130903242, - 2130903243, - 2130903244, - 2130903245, - 2130903246, - 2130903307, - 2130903373, - 2130903395, - 2130903401}; - - // aapt resource value: 1 - public const int RecyclerView_android_descendantFocusability = 1; - - // aapt resource value: 0 - public const int RecyclerView_android_orientation = 0; - - // aapt resource value: 2 - public const int RecyclerView_fastScrollEnabled = 2; - - // aapt resource value: 3 - public const int RecyclerView_fastScrollHorizontalThumbDrawable = 3; - - // aapt resource value: 4 - public const int RecyclerView_fastScrollHorizontalTrackDrawable = 4; - - // aapt resource value: 5 - public const int RecyclerView_fastScrollVerticalThumbDrawable = 5; - - // aapt resource value: 6 - public const int RecyclerView_fastScrollVerticalTrackDrawable = 6; - - // aapt resource value: 7 - public const int RecyclerView_layoutManager = 7; - - // aapt resource value: 8 - public const int RecyclerView_reverseLayout = 8; - - // aapt resource value: 9 - public const int RecyclerView_spanCount = 9; - - // aapt resource value: 10 - public const int RecyclerView_stackFromEnd = 10; - - // aapt resource value: { 0x7F0300F9 } - public static int[] ScrimInsetsFrameLayout = new int[] { - 2130903289}; - - // aapt resource value: 0 - public const int ScrimInsetsFrameLayout_insetForeground = 0; - - // aapt resource value: { 0x7F03003A } - public static int[] ScrollingViewBehavior_Layout = new int[] { - 2130903098}; - - // aapt resource value: 0 - public const int ScrollingViewBehavior_Layout_behavior_overlapTop = 0; - - // aapt resource value: { 0x7F030152 } - public static int[] ScrollViewRendererTheme = new int[] { - 2130903378}; - - // aapt resource value: 0 - public const int ScrollViewRendererTheme_scrollViewStyle = 0; - - // aapt resource value: { 0x10100DA,0x101011F,0x1010220,0x1010264,0x7F030077,0x7F030090,0x7F0300A6,0x7F0300DE,0x7F0300F5,0x7F03010A,0x7F030147,0x7F030148,0x7F030153,0x7F030154,0x7F030174,0x7F030179,0x7F0301D4 } - public static int[] SearchView = new int[] { - 16842970, - 16843039, - 16843296, - 16843364, - 2130903159, - 2130903184, - 2130903206, - 2130903262, - 2130903285, - 2130903306, - 2130903367, - 2130903368, - 2130903379, - 2130903380, - 2130903412, - 2130903417, - 2130903508}; - - // aapt resource value: 0 - public const int SearchView_android_focusable = 0; - - // aapt resource value: 3 - public const int SearchView_android_imeOptions = 3; - - // aapt resource value: 2 - public const int SearchView_android_inputType = 2; - - // aapt resource value: 1 - public const int SearchView_android_maxWidth = 1; - - // aapt resource value: 4 - public const int SearchView_closeIcon = 4; - - // aapt resource value: 5 - public const int SearchView_commitIcon = 5; - - // aapt resource value: 6 - public const int SearchView_defaultQueryHint = 6; - - // aapt resource value: 7 - public const int SearchView_goIcon = 7; - - // aapt resource value: 8 - public const int SearchView_iconifiedByDefault = 8; - - // aapt resource value: 9 - public const int SearchView_layout = 9; - - // aapt resource value: 10 - public const int SearchView_queryBackground = 10; - - // aapt resource value: 11 - public const int SearchView_queryHint = 11; - - // aapt resource value: 12 - public const int SearchView_searchHintIcon = 12; - - // aapt resource value: 13 - public const int SearchView_searchIcon = 13; - - // aapt resource value: 14 - public const int SearchView_submitBackground = 14; - - // aapt resource value: 15 - public const int SearchView_suggestionRowLayout = 15; - - // aapt resource value: 16 - public const int SearchView_voiceIcon = 16; - - // aapt resource value: { 0x7F030161,0x7F030162 } - public static int[] Snackbar = new int[] { - 2130903393, - 2130903394}; - - // aapt resource value: { 0x101011F,0x7F0300B6,0x7F030128 } - public static int[] SnackbarLayout = new int[] { - 16843039, - 2130903222, - 2130903336}; - - // aapt resource value: 0 - public const int SnackbarLayout_android_maxWidth = 0; - - // aapt resource value: 1 - public const int SnackbarLayout_elevation = 1; - - // aapt resource value: 2 - public const int SnackbarLayout_maxActionInlineWidth = 2; - - // aapt resource value: 0 - public const int Snackbar_snackbarButtonStyle = 0; - - // aapt resource value: 1 - public const int Snackbar_snackbarStyle = 1; - - // aapt resource value: { 0x10100B2,0x1010176,0x101017B,0x1010262,0x7F030141 } - public static int[] Spinner = new int[] { - 16842930, - 16843126, - 16843131, - 16843362, - 2130903361}; - - // aapt resource value: 3 - public const int Spinner_android_dropDownWidth = 3; - - // aapt resource value: 0 - public const int Spinner_android_entries = 0; - - // aapt resource value: 1 - public const int Spinner_android_popupBackground = 1; - - // aapt resource value: 2 - public const int Spinner_android_prompt = 2; - - // aapt resource value: 4 - public const int Spinner_popupTheme = 4; - - // aapt resource value: { 0x101011C,0x1010194,0x1010195,0x1010196,0x101030C,0x101030D } - public static int[] StateListDrawable = new int[] { - 16843036, - 16843156, - 16843157, - 16843158, - 16843532, - 16843533}; - - // aapt resource value: { 0x1010199 } - public static int[] StateListDrawableItem = new int[] { - 16843161}; - - // aapt resource value: 0 - public const int StateListDrawableItem_android_drawable = 0; - - // aapt resource value: 3 - public const int StateListDrawable_android_constantSize = 3; - - // aapt resource value: 0 - public const int StateListDrawable_android_dither = 0; - - // aapt resource value: 4 - public const int StateListDrawable_android_enterFadeDuration = 4; - - // aapt resource value: 5 - public const int StateListDrawable_android_exitFadeDuration = 5; - - // aapt resource value: 2 - public const int StateListDrawable_android_variablePadding = 2; - - // aapt resource value: 1 - public const int StateListDrawable_android_visible = 1; - - // aapt resource value: { 0x1010124,0x1010125,0x1010142,0x7F03015C,0x7F030167,0x7F03017A,0x7F03017B,0x7F03017D,0x7F0301B5,0x7F0301B6,0x7F0301B7,0x7F0301CE,0x7F0301CF,0x7F0301D0 } - public static int[] SwitchCompat = new int[] { - 16843044, - 16843045, - 16843074, - 2130903388, - 2130903399, - 2130903418, - 2130903419, - 2130903421, - 2130903477, - 2130903478, - 2130903479, - 2130903502, - 2130903503, - 2130903504}; - - // aapt resource value: 1 - public const int SwitchCompat_android_textOff = 1; - - // aapt resource value: 0 - public const int SwitchCompat_android_textOn = 0; - - // aapt resource value: 2 - public const int SwitchCompat_android_thumb = 2; - - // aapt resource value: 3 - public const int SwitchCompat_showText = 3; - - // aapt resource value: 4 - public const int SwitchCompat_splitTrack = 4; - - // aapt resource value: 5 - public const int SwitchCompat_switchMinWidth = 5; - - // aapt resource value: 6 - public const int SwitchCompat_switchPadding = 6; - - // aapt resource value: 7 - public const int SwitchCompat_switchTextAppearance = 7; - - // aapt resource value: 8 - public const int SwitchCompat_thumbTextPadding = 8; - - // aapt resource value: 9 - public const int SwitchCompat_thumbTint = 9; - - // aapt resource value: 10 - public const int SwitchCompat_thumbTintMode = 10; - - // aapt resource value: 11 - public const int SwitchCompat_track = 11; - - // aapt resource value: 12 - public const int SwitchCompat_trackTint = 12; - - // aapt resource value: 13 - public const int SwitchCompat_trackTintMode = 13; - - // aapt resource value: { 0x1010002,0x10100F2,0x101014F } - public static int[] TabItem = new int[] { - 16842754, - 16842994, - 16843087}; - - // aapt resource value: 0 - public const int TabItem_android_icon = 0; - - // aapt resource value: 1 - public const int TabItem_android_layout = 1; - - // aapt resource value: 2 - public const int TabItem_android_text = 2; - - // aapt resource value: { 0x7F03017E,0x7F03017F,0x7F030180,0x7F030181,0x7F030182,0x7F030183,0x7F030184,0x7F030185,0x7F030186,0x7F030187,0x7F030188,0x7F030189,0x7F03018A,0x7F03018B,0x7F03018C,0x7F03018D,0x7F03018E,0x7F03018F,0x7F030190,0x7F030191,0x7F030192,0x7F030193,0x7F030195,0x7F030196,0x7F030197 } - public static int[] TabLayout = new int[] { - 2130903422, - 2130903423, - 2130903424, - 2130903425, - 2130903426, - 2130903427, - 2130903428, - 2130903429, - 2130903430, - 2130903431, - 2130903432, - 2130903433, - 2130903434, - 2130903435, - 2130903436, - 2130903437, - 2130903438, - 2130903439, - 2130903440, - 2130903441, - 2130903442, - 2130903443, - 2130903445, - 2130903446, - 2130903447}; - - // aapt resource value: 0 - public const int TabLayout_tabBackground = 0; - - // aapt resource value: 1 - public const int TabLayout_tabContentStart = 1; - - // aapt resource value: 2 - public const int TabLayout_tabGravity = 2; - - // aapt resource value: 3 - public const int TabLayout_tabIconTint = 3; - - // aapt resource value: 4 - public const int TabLayout_tabIconTintMode = 4; - - // aapt resource value: 5 - public const int TabLayout_tabIndicator = 5; - - // aapt resource value: 6 - public const int TabLayout_tabIndicatorAnimationDuration = 6; - - // aapt resource value: 7 - public const int TabLayout_tabIndicatorColor = 7; - - // aapt resource value: 8 - public const int TabLayout_tabIndicatorFullWidth = 8; - - // aapt resource value: 9 - public const int TabLayout_tabIndicatorGravity = 9; - - // aapt resource value: 10 - public const int TabLayout_tabIndicatorHeight = 10; - - // aapt resource value: 11 - public const int TabLayout_tabInlineLabel = 11; - - // aapt resource value: 12 - public const int TabLayout_tabMaxWidth = 12; - - // aapt resource value: 13 - public const int TabLayout_tabMinWidth = 13; - - // aapt resource value: 14 - public const int TabLayout_tabMode = 14; - - // aapt resource value: 15 - public const int TabLayout_tabPadding = 15; - - // aapt resource value: 16 - public const int TabLayout_tabPaddingBottom = 16; - - // aapt resource value: 17 - public const int TabLayout_tabPaddingEnd = 17; - - // aapt resource value: 18 - public const int TabLayout_tabPaddingStart = 18; - - // aapt resource value: 19 - public const int TabLayout_tabPaddingTop = 19; - - // aapt resource value: 20 - public const int TabLayout_tabRippleColor = 20; - - // aapt resource value: 21 - public const int TabLayout_tabSelectedTextColor = 21; - - // aapt resource value: 22 - public const int TabLayout_tabTextAppearance = 22; - - // aapt resource value: 23 - public const int TabLayout_tabTextColor = 23; - - // aapt resource value: 24 - public const int TabLayout_tabUnboundedRipple = 24; - - // aapt resource value: { 0x1010095,0x1010096,0x1010097,0x1010098,0x101009A,0x101009B,0x1010161,0x1010162,0x1010163,0x1010164,0x10103AC,0x7F0300D2,0x7F030198 } - public static int[] TextAppearance = new int[] { - 16842901, - 16842902, - 16842903, - 16842904, - 16842906, - 16842907, - 16843105, - 16843106, - 16843107, - 16843108, - 16843692, - 2130903250, - 2130903448}; - - // aapt resource value: 10 - public const int TextAppearance_android_fontFamily = 10; - - // aapt resource value: 6 - public const int TextAppearance_android_shadowColor = 6; - - // aapt resource value: 7 - public const int TextAppearance_android_shadowDx = 7; - - // aapt resource value: 8 - public const int TextAppearance_android_shadowDy = 8; - - // aapt resource value: 9 - public const int TextAppearance_android_shadowRadius = 9; - - // aapt resource value: 3 - public const int TextAppearance_android_textColor = 3; - - // aapt resource value: 4 - public const int TextAppearance_android_textColorHint = 4; - - // aapt resource value: 5 - public const int TextAppearance_android_textColorLink = 5; - - // aapt resource value: 0 - public const int TextAppearance_android_textSize = 0; - - // aapt resource value: 2 - public const int TextAppearance_android_textStyle = 2; - - // aapt resource value: 1 - public const int TextAppearance_android_typeface = 1; - - // aapt resource value: 11 - public const int TextAppearance_fontFamily = 11; - - // aapt resource value: 12 - public const int TextAppearance_textAllCaps = 12; - - // aapt resource value: { 0x101009A,0x1010150,0x7F030043,0x7F030044,0x7F030045,0x7F030046,0x7F030047,0x7F030048,0x7F030049,0x7F03004A,0x7F03004B,0x7F0300A1,0x7F0300A2,0x7F0300A3,0x7F0300A4,0x7F0300B9,0x7F0300BA,0x7F0300E1,0x7F0300E2,0x7F0300E3,0x7F0300E7,0x7F0300E8,0x7F0300E9,0x7F03013B,0x7F03013C,0x7F03013D,0x7F03013E,0x7F03013F } - public static int[] TextInputLayout = new int[] { - 16842906, - 16843088, - 2130903107, - 2130903108, - 2130903109, - 2130903110, - 2130903111, - 2130903112, - 2130903113, - 2130903114, - 2130903115, - 2130903201, - 2130903202, - 2130903203, - 2130903204, - 2130903225, - 2130903226, - 2130903265, - 2130903266, - 2130903267, - 2130903271, - 2130903272, - 2130903273, - 2130903355, - 2130903356, - 2130903357, - 2130903358, - 2130903359}; - - // aapt resource value: 1 - public const int TextInputLayout_android_hint = 1; - - // aapt resource value: 0 - public const int TextInputLayout_android_textColorHint = 0; - - // aapt resource value: 2 - public const int TextInputLayout_boxBackgroundColor = 2; - - // aapt resource value: 3 - public const int TextInputLayout_boxBackgroundMode = 3; - - // aapt resource value: 4 - public const int TextInputLayout_boxCollapsedPaddingTop = 4; - - // aapt resource value: 5 - public const int TextInputLayout_boxCornerRadiusBottomEnd = 5; - - // aapt resource value: 6 - public const int TextInputLayout_boxCornerRadiusBottomStart = 6; - - // aapt resource value: 7 - public const int TextInputLayout_boxCornerRadiusTopEnd = 7; - - // aapt resource value: 8 - public const int TextInputLayout_boxCornerRadiusTopStart = 8; - - // aapt resource value: 9 - public const int TextInputLayout_boxStrokeColor = 9; - - // aapt resource value: 10 - public const int TextInputLayout_boxStrokeWidth = 10; - - // aapt resource value: 11 - public const int TextInputLayout_counterEnabled = 11; - - // aapt resource value: 12 - public const int TextInputLayout_counterMaxLength = 12; - - // aapt resource value: 13 - public const int TextInputLayout_counterOverflowTextAppearance = 13; - - // aapt resource value: 14 - public const int TextInputLayout_counterTextAppearance = 14; - - // aapt resource value: 15 - public const int TextInputLayout_errorEnabled = 15; - - // aapt resource value: 16 - public const int TextInputLayout_errorTextAppearance = 16; - - // aapt resource value: 17 - public const int TextInputLayout_helperText = 17; - - // aapt resource value: 18 - public const int TextInputLayout_helperTextEnabled = 18; - - // aapt resource value: 19 - public const int TextInputLayout_helperTextTextAppearance = 19; - - // aapt resource value: 20 - public const int TextInputLayout_hintAnimationEnabled = 20; - - // aapt resource value: 21 - public const int TextInputLayout_hintEnabled = 21; - - // aapt resource value: 22 - public const int TextInputLayout_hintTextAppearance = 22; - - // aapt resource value: 23 - public const int TextInputLayout_passwordToggleContentDescription = 23; - - // aapt resource value: 24 - public const int TextInputLayout_passwordToggleDrawable = 24; - - // aapt resource value: 25 - public const int TextInputLayout_passwordToggleEnabled = 25; - - // aapt resource value: 26 - public const int TextInputLayout_passwordToggleTint = 26; - - // aapt resource value: 27 - public const int TextInputLayout_passwordToggleTintMode = 27; - - // aapt resource value: { 0x1010034,0x7F0300B7,0x7F0300B8 } - public static int[] ThemeEnforcement = new int[] { - 16842804, - 2130903223, - 2130903224}; - - // aapt resource value: 0 - public const int ThemeEnforcement_android_textAppearance = 0; - - // aapt resource value: 1 - public const int ThemeEnforcement_enforceMaterialTheme = 1; - - // aapt resource value: 2 - public const int ThemeEnforcement_enforceTextAppearance = 2; - - // aapt resource value: { 0x10100AF,0x1010140,0x7F030051,0x7F03007F,0x7F030080,0x7F030092,0x7F030093,0x7F030094,0x7F030095,0x7F030096,0x7F030097,0x7F030124,0x7F030125,0x7F030129,0x7F03012E,0x7F03012F,0x7F030141,0x7F030175,0x7F030176,0x7F030177,0x7F0301BD,0x7F0301BF,0x7F0301C0,0x7F0301C1,0x7F0301C2,0x7F0301C3,0x7F0301C4,0x7F0301C5,0x7F0301C6 } - public static int[] Toolbar = new int[] { - 16842927, - 16843072, - 2130903121, - 2130903167, - 2130903168, - 2130903186, - 2130903187, - 2130903188, - 2130903189, - 2130903190, - 2130903191, - 2130903332, - 2130903333, - 2130903337, - 2130903342, - 2130903343, - 2130903361, - 2130903413, - 2130903414, - 2130903415, - 2130903485, - 2130903487, - 2130903488, - 2130903489, - 2130903490, - 2130903491, - 2130903492, - 2130903493, - 2130903494}; - - // aapt resource value: 0 - public const int Toolbar_android_gravity = 0; - - // aapt resource value: 1 - public const int Toolbar_android_minHeight = 1; - - // aapt resource value: 2 - public const int Toolbar_buttonGravity = 2; - - // aapt resource value: 3 - public const int Toolbar_collapseContentDescription = 3; - - // aapt resource value: 4 - public const int Toolbar_collapseIcon = 4; - - // aapt resource value: 5 - public const int Toolbar_contentInsetEnd = 5; - - // aapt resource value: 6 - public const int Toolbar_contentInsetEndWithActions = 6; - - // aapt resource value: 7 - public const int Toolbar_contentInsetLeft = 7; - - // aapt resource value: 8 - public const int Toolbar_contentInsetRight = 8; - - // aapt resource value: 9 - public const int Toolbar_contentInsetStart = 9; - - // aapt resource value: 10 - public const int Toolbar_contentInsetStartWithNavigation = 10; - - // aapt resource value: 11 - public const int Toolbar_logo = 11; - - // aapt resource value: 12 - public const int Toolbar_logoDescription = 12; - - // aapt resource value: 13 - public const int Toolbar_maxButtonHeight = 13; - - // aapt resource value: 14 - public const int Toolbar_navigationContentDescription = 14; - - // aapt resource value: 15 - public const int Toolbar_navigationIcon = 15; - - // aapt resource value: 16 - public const int Toolbar_popupTheme = 16; - - // aapt resource value: 17 - public const int Toolbar_subtitle = 17; - - // aapt resource value: 18 - public const int Toolbar_subtitleTextAppearance = 18; - - // aapt resource value: 19 - public const int Toolbar_subtitleTextColor = 19; - - // aapt resource value: 20 - public const int Toolbar_title = 20; - - // aapt resource value: 21 - public const int Toolbar_titleMargin = 21; - - // aapt resource value: 22 - public const int Toolbar_titleMarginBottom = 22; - - // aapt resource value: 23 - public const int Toolbar_titleMarginEnd = 23; - - // aapt resource value: 26 - public const int Toolbar_titleMargins = 26; - - // aapt resource value: 24 - public const int Toolbar_titleMarginStart = 24; - - // aapt resource value: 25 - public const int Toolbar_titleMarginTop = 25; - - // aapt resource value: 27 - public const int Toolbar_titleTextAppearance = 27; - - // aapt resource value: 28 - public const int Toolbar_titleTextColor = 28; - - // aapt resource value: { 0x1010000,0x10100DA,0x7F030135,0x7F030136,0x7F0301B3 } - public static int[] View = new int[] { - 16842752, - 16842970, - 2130903349, - 2130903350, - 2130903475}; - - // aapt resource value: { 0x10100D4,0x7F030034,0x7F030035 } - public static int[] ViewBackgroundHelper = new int[] { - 16842964, - 2130903092, - 2130903093}; - - // aapt resource value: 0 - public const int ViewBackgroundHelper_android_background = 0; - - // aapt resource value: 1 - public const int ViewBackgroundHelper_backgroundTint = 1; - - // aapt resource value: 2 - public const int ViewBackgroundHelper_backgroundTintMode = 2; - - // aapt resource value: { 0x10100D0,0x10100F2,0x10100F3 } - public static int[] ViewStubCompat = new int[] { - 16842960, - 16842994, - 16842995}; - - // aapt resource value: 0 - public const int ViewStubCompat_android_id = 0; - - // aapt resource value: 2 - public const int ViewStubCompat_android_inflatedId = 2; - - // aapt resource value: 1 - public const int ViewStubCompat_android_layout = 1; - - // aapt resource value: 1 - public const int View_android_focusable = 1; - - // aapt resource value: 0 - public const int View_android_theme = 0; - - // aapt resource value: 2 - public const int View_paddingEnd = 2; - - // aapt resource value: 3 - public const int View_paddingStart = 3; - - // aapt resource value: 4 - public const int View_theme = 4; - - static Styleable() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Styleable() - { - } - } - - public partial class Xml - { - - // aapt resource value: 0x7F100000 - public const int xamarin_essentials_fileprovider_file_paths = 2131755008; - - static Xml() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Xml() - { - } - } - } -} -#pragma warning restore 1591 diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/layout/Tabbar.xml b/samples/core/Xamarin/EFGetStarted.Android/Resources/layout/Tabbar.xml deleted file mode 100644 index b2d0868812..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/Resources/layout/Tabbar.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/layout/Toolbar.xml b/samples/core/Xamarin/EFGetStarted.Android/Resources/layout/Toolbar.xml deleted file mode 100644 index 32440653b8..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/Resources/layout/Toolbar.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-anydpi-v26/icon.xml b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-anydpi-v26/icon.xml deleted file mode 100644 index 88d1d0a16c..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-anydpi-v26/icon.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-anydpi-v26/icon_round.xml b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-anydpi-v26/icon_round.xml deleted file mode 100644 index 88d1d0a16c..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-anydpi-v26/icon_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-hdpi/icon.png b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-hdpi/icon.png deleted file mode 100644 index 4623ca2c42..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-hdpi/icon.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-hdpi/launcher_foreground.png b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-hdpi/launcher_foreground.png deleted file mode 100644 index a89e5bbce6..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-hdpi/launcher_foreground.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-mdpi/icon.png b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-mdpi/icon.png deleted file mode 100644 index 9b1d25e25d..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-mdpi/icon.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-mdpi/launcher_foreground.png b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-mdpi/launcher_foreground.png deleted file mode 100644 index 431a8a053d..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-mdpi/launcher_foreground.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xhdpi/icon.png b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xhdpi/icon.png deleted file mode 100644 index 844dfe544e..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xhdpi/icon.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xhdpi/launcher_foreground.png b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xhdpi/launcher_foreground.png deleted file mode 100644 index 9e9e4f8e4c..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xhdpi/launcher_foreground.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxhdpi/icon.png b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxhdpi/icon.png deleted file mode 100644 index e20ec9ae22..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxhdpi/icon.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxhdpi/launcher_foreground.png b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxhdpi/launcher_foreground.png deleted file mode 100644 index 5f1e1356eb..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxhdpi/launcher_foreground.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxxhdpi/icon.png b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxxhdpi/icon.png deleted file mode 100644 index 8a08bf75e7..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxxhdpi/icon.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png b/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png deleted file mode 100644 index aca9f8d1c0..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/values/colors.xml b/samples/core/Xamarin/EFGetStarted.Android/Resources/values/colors.xml deleted file mode 100644 index bdd44a8371..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/Resources/values/colors.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - #FFFFFF - #3F51B5 - #303F9F - #FF4081 - \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted.Android/Resources/values/styles.xml b/samples/core/Xamarin/EFGetStarted.Android/Resources/values/styles.xml deleted file mode 100644 index 088e4497fa..0000000000 --- a/samples/core/Xamarin/EFGetStarted.Android/Resources/values/styles.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted.iOS/AppDelegate.cs b/samples/core/Xamarin/EFGetStarted.iOS/AppDelegate.cs deleted file mode 100644 index 035e987717..0000000000 --- a/samples/core/Xamarin/EFGetStarted.iOS/AppDelegate.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -using Foundation; -using UIKit; - -namespace EFGetStarted.iOS -{ - // The UIApplicationDelegate for the application. This class is responsible for launching the - // User Interface of the application, as well as listening (and optionally responding) to - // application events from iOS. - [Register("AppDelegate")] - public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate - { - // - // This method is invoked when the application has loaded and is ready to run. In this - // method you should instantiate the window, load the UI into it and then make the window - // visible. - // - // You have 17 seconds to return from this method, or iOS will terminate your application. - // - public override bool FinishedLaunching(UIApplication app, NSDictionary options) - { - global::Xamarin.Forms.Forms.Init(); - LoadApplication(new App()); - - return base.FinishedLaunching(app, options); - } - } -} diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 98f4d035c8..0000000000 --- a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "images": [ - { - "scale": "2x", - "size": "20x20", - "idiom": "iphone", - "filename": "Icon40.png" - }, - { - "scale": "3x", - "size": "20x20", - "idiom": "iphone", - "filename": "Icon60.png" - }, - { - "scale": "2x", - "size": "29x29", - "idiom": "iphone", - "filename": "Icon58.png" - }, - { - "scale": "3x", - "size": "29x29", - "idiom": "iphone", - "filename": "Icon87.png" - }, - { - "scale": "2x", - "size": "40x40", - "idiom": "iphone", - "filename": "Icon80.png" - }, - { - "scale": "3x", - "size": "40x40", - "idiom": "iphone", - "filename": "Icon120.png" - }, - { - "scale": "2x", - "size": "60x60", - "idiom": "iphone", - "filename": "Icon120.png" - }, - { - "scale": "3x", - "size": "60x60", - "idiom": "iphone", - "filename": "Icon180.png" - }, - { - "scale": "1x", - "size": "20x20", - "idiom": "ipad", - "filename": "Icon20.png" - }, - { - "scale": "2x", - "size": "20x20", - "idiom": "ipad", - "filename": "Icon40.png" - }, - { - "scale": "1x", - "size": "29x29", - "idiom": "ipad", - "filename": "Icon29.png" - }, - { - "scale": "2x", - "size": "29x29", - "idiom": "ipad", - "filename": "Icon58.png" - }, - { - "scale": "1x", - "size": "40x40", - "idiom": "ipad", - "filename": "Icon40.png" - }, - { - "scale": "2x", - "size": "40x40", - "idiom": "ipad", - "filename": "Icon80.png" - }, - { - "scale": "1x", - "size": "76x76", - "idiom": "ipad", - "filename": "Icon76.png" - }, - { - "scale": "2x", - "size": "76x76", - "idiom": "ipad", - "filename": "Icon152.png" - }, - { - "scale": "2x", - "size": "83.5x83.5", - "idiom": "ipad", - "filename": "Icon167.png" - }, - { - "scale": "1x", - "size": "1024x1024", - "idiom": "ios-marketing", - "filename": "Icon1024.png" - } - ], - "properties": {}, - "info": { - "version": 1, - "author": "xcode" - } -} \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png deleted file mode 100644 index 9174c989a9..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png deleted file mode 100644 index 9c60a1761d..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png deleted file mode 100644 index 448d6efb57..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png deleted file mode 100644 index 8524768f8d..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png deleted file mode 100644 index 60a64703c0..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png deleted file mode 100644 index 45268a641c..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png deleted file mode 100644 index 6a6c77a8b4..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png deleted file mode 100644 index cc7edcf5cb..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png deleted file mode 100644 index 1ad04f004b..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png deleted file mode 100644 index 2dd52620a8..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png deleted file mode 100644 index b058cae2f4..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png deleted file mode 100644 index 02e47a2611..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png b/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png deleted file mode 100644 index 4954a4bd33..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/EFGetStarted.iOS.csproj b/samples/core/Xamarin/EFGetStarted.iOS/EFGetStarted.iOS.csproj deleted file mode 100644 index 6b3f8a101d..0000000000 --- a/samples/core/Xamarin/EFGetStarted.iOS/EFGetStarted.iOS.csproj +++ /dev/null @@ -1,144 +0,0 @@ - - - - Debug - iPhoneSimulator - 8.0.30703 - 2.0 - {CDC252B5-A191-4131-8B4F-8983A370DA5C} - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {6143fdea-f3c2-4a09-aafa-6e230626515e} - Exe - EFGetStarted.iOS - Resources - EFGetStarted.iOS - true - NSUrlSessionHandler - automatic - - - true - full - false - bin\iPhoneSimulator\Debug - DEBUG - prompt - 4 - x86_64 - None - true - iPhone Developer - - - none - true - bin\iPhoneSimulator\Release - prompt - 4 - SdkOnly - x86_64 - iPhone Developer - --linkskip System.Core - - - true - full - false - bin\iPhone\Debug - DEBUG - prompt - 4 - ARM64 - iPhone Developer - true - Entitlements.plist - None - -all - - - none - true - bin\iPhone\Release - prompt - 4 - ARM64 - iPhone Developer - Entitlements.plist - --interpreter - SdkOnly - --linkskip System.Core - - - - - - - - - - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - - - - - - - - - - - - - - - - - - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F} - EFGetStarted - - - diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Entitlements.plist b/samples/core/Xamarin/EFGetStarted.iOS/Entitlements.plist deleted file mode 100644 index e9a3005f78..0000000000 --- a/samples/core/Xamarin/EFGetStarted.iOS/Entitlements.plist +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Info.plist b/samples/core/Xamarin/EFGetStarted.iOS/Info.plist deleted file mode 100644 index 2f4be326e7..0000000000 --- a/samples/core/Xamarin/EFGetStarted.iOS/Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - UIDeviceFamily - - 1 - 2 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - MinimumOSVersion - 8.0 - CFBundleDisplayName - EFGetStarted - CFBundleIdentifier - com.microsoft.EFGetStarted - CFBundleVersion - 1.0 - UILaunchStoryboardName - LaunchScreen - CFBundleName - EFGetStarted - XSAppIconAssets - Assets.xcassets/AppIcon.appiconset - - diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Main.cs b/samples/core/Xamarin/EFGetStarted.iOS/Main.cs deleted file mode 100644 index b2caf35b22..0000000000 --- a/samples/core/Xamarin/EFGetStarted.iOS/Main.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -using Foundation; -using UIKit; - - - -namespace EFGetStarted.iOS -{ - public class Application - { - // This is the main entry point of the application. - static void Main(string[] args) - { - // if you want to use a different Application Delegate class from "AppDelegate" - // you can specify it here. - UIApplication.Main(args, null, "AppDelegate"); - - } - } -} diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Properties/AssemblyInfo.cs b/samples/core/Xamarin/EFGetStarted.iOS/Properties/AssemblyInfo.cs deleted file mode 100644 index 708fdf0d62..0000000000 --- a/samples/core/Xamarin/EFGetStarted.iOS/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("EFGetStarted.iOS")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("EFGetStarted.iOS")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default-568h@2x.png b/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default-568h@2x.png deleted file mode 100644 index 26c6461e50..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default-568h@2x.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default-Portrait.png b/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default-Portrait.png deleted file mode 100644 index 5d0d1ab4c6..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default-Portrait.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default-Portrait@2x.png b/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default-Portrait@2x.png deleted file mode 100644 index 0ee2688e8f..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default-Portrait@2x.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default.png b/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default.png deleted file mode 100644 index b74643c0aa..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default@2x.png b/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default@2x.png deleted file mode 100644 index dbd6bd3e86..0000000000 Binary files a/samples/core/Xamarin/EFGetStarted.iOS/Resources/Default@2x.png and /dev/null differ diff --git a/samples/core/Xamarin/EFGetStarted.iOS/Resources/LaunchScreen.storyboard b/samples/core/Xamarin/EFGetStarted.iOS/Resources/LaunchScreen.storyboard deleted file mode 100644 index f12b936801..0000000000 --- a/samples/core/Xamarin/EFGetStarted.iOS/Resources/LaunchScreen.storyboard +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted.sln b/samples/core/Xamarin/EFGetStarted.sln deleted file mode 100644 index e2418d5398..0000000000 --- a/samples/core/Xamarin/EFGetStarted.sln +++ /dev/null @@ -1,57 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EFGetStarted.Android", "EFGetStarted.Android\EFGetStarted.Android.csproj", "{8969C333-0071-4893-91BE-18050B0343C9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EFGetStarted.iOS", "EFGetStarted.iOS\EFGetStarted.iOS.csproj", "{CDC252B5-A191-4131-8B4F-8983A370DA5C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EFGetStarted", "EFGetStarted\EFGetStarted.csproj", "{E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - Debug|iPhoneSimulator = Debug|iPhoneSimulator - Release|iPhoneSimulator = Release|iPhoneSimulator - Debug|iPhone = Debug|iPhone - Release|iPhone = Release|iPhone - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8969C333-0071-4893-91BE-18050B0343C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8969C333-0071-4893-91BE-18050B0343C9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8969C333-0071-4893-91BE-18050B0343C9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8969C333-0071-4893-91BE-18050B0343C9}.Release|Any CPU.Build.0 = Release|Any CPU - {8969C333-0071-4893-91BE-18050B0343C9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {8969C333-0071-4893-91BE-18050B0343C9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {8969C333-0071-4893-91BE-18050B0343C9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {8969C333-0071-4893-91BE-18050B0343C9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {8969C333-0071-4893-91BE-18050B0343C9}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {8969C333-0071-4893-91BE-18050B0343C9}.Debug|iPhone.Build.0 = Debug|Any CPU - {8969C333-0071-4893-91BE-18050B0343C9}.Release|iPhone.ActiveCfg = Release|Any CPU - {8969C333-0071-4893-91BE-18050B0343C9}.Release|iPhone.Build.0 = Release|Any CPU - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Release|Any CPU.Build.0 = Release|iPhoneSimulator - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Debug|iPhone.ActiveCfg = Debug|iPhone - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Debug|iPhone.Build.0 = Debug|iPhone - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Release|iPhone.ActiveCfg = Release|iPhone - {CDC252B5-A191-4131-8B4F-8983A370DA5C}.Release|iPhone.Build.0 = Release|iPhone - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Release|Any CPU.Build.0 = Release|Any CPU - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Debug|iPhone.Build.0 = Debug|Any CPU - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Release|iPhone.ActiveCfg = Release|Any CPU - {E5DCDF9D-4AF4-4570-A9B6-D7C78DB2096F}.Release|iPhone.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/samples/core/Xamarin/EFGetStarted/App.xaml b/samples/core/Xamarin/EFGetStarted/App.xaml deleted file mode 100644 index fc7e54510a..0000000000 --- a/samples/core/Xamarin/EFGetStarted/App.xaml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted/App.xaml.cs b/samples/core/Xamarin/EFGetStarted/App.xaml.cs deleted file mode 100644 index e2d1985eeb..0000000000 --- a/samples/core/Xamarin/EFGetStarted/App.xaml.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using Xamarin.Forms; -using Xamarin.Forms.Xaml; - -namespace EFGetStarted -{ - public partial class App : Application - { - public App() - { - InitializeComponent(); - - MainPage = new NavigationPage(new BlogsPage()); - } - - protected override void OnStart() - { - - } - - protected override void OnSleep() - { - - } - - protected override void OnResume() - { - - } - } -} diff --git a/samples/core/Xamarin/EFGetStarted/AssemblyInfo.cs b/samples/core/Xamarin/EFGetStarted/AssemblyInfo.cs deleted file mode 100644 index c859952e34..0000000000 --- a/samples/core/Xamarin/EFGetStarted/AssemblyInfo.cs +++ /dev/null @@ -1,3 +0,0 @@ -using Xamarin.Forms.Xaml; - -[assembly: XamlCompilation(XamlCompilationOptions.Compile)] \ No newline at end of file diff --git a/samples/core/Xamarin/EFGetStarted/EFGetStarted.csproj b/samples/core/Xamarin/EFGetStarted/EFGetStarted.csproj deleted file mode 100644 index 886d2b90a2..0000000000 --- a/samples/core/Xamarin/EFGetStarted/EFGetStarted.csproj +++ /dev/null @@ -1,24 +0,0 @@ - - - - netstandard2.0 - true - - - - portable - true - - - - - - - - - - - - - - diff --git a/samples/core/Xamarin/EFGetStarted/Models/Blog.cs b/samples/core/Xamarin/EFGetStarted/Models/Blog.cs deleted file mode 100644 index 56a6373d81..0000000000 --- a/samples/core/Xamarin/EFGetStarted/Models/Blog.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace EFGetStarted -{ - public class Blog - { - public int BlogId { get; set; } - public string Url { get; set; } - - public List Posts { get; set; } = new List(); - } -} diff --git a/samples/core/Xamarin/EFGetStarted/Models/Post.cs b/samples/core/Xamarin/EFGetStarted/Models/Post.cs deleted file mode 100644 index 153481cd2b..0000000000 --- a/samples/core/Xamarin/EFGetStarted/Models/Post.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -namespace EFGetStarted -{ - public class Post - { - public int PostId { get; set; } - public string Title { get; set; } - public string Content { get; set; } - - public int BlogId { get; set; } - public Blog Blog { get; set; } - } -} diff --git a/samples/core/Xamarin/EFGetStarted/Pages/AddBlogPage.xaml b/samples/core/Xamarin/EFGetStarted/Pages/AddBlogPage.xaml deleted file mode 100644 index b47f3bb25c..0000000000 --- a/samples/core/Xamarin/EFGetStarted/Pages/AddBlogPage.xaml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/samples/core/Xamarin/EFGetStarted/Pages/AddBlogPage.xaml.cs b/samples/core/Xamarin/EFGetStarted/Pages/AddBlogPage.xaml.cs deleted file mode 100644 index e403ebda2d..0000000000 --- a/samples/core/Xamarin/EFGetStarted/Pages/AddBlogPage.xaml.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; - -using Xamarin.Forms; - -namespace EFGetStarted -{ - public partial class AddBlogPage : ContentPage - { - public AddBlogPage() - { - InitializeComponent(); - } - - async void Save_Clicked(System.Object sender, System.EventArgs e) - { - var blog = new Blog { Url = blogUrl.Text }; - - using (var blogContext = new BloggingContext()) - { - blogContext.Add(blog); - - await blogContext.SaveChangesAsync(); - } - - await Navigation.PopModalAsync(); - } - - async void Cancel_Clicked(System.Object sender, System.EventArgs e) - { - await Navigation.PopModalAsync(); - } - } -} diff --git a/samples/core/Xamarin/EFGetStarted/Pages/AddPostPage.xaml b/samples/core/Xamarin/EFGetStarted/Pages/AddPostPage.xaml deleted file mode 100644 index e1f11bc797..0000000000 --- a/samples/core/Xamarin/EFGetStarted/Pages/AddPostPage.xaml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/core/Xamarin/EFGetStarted/Pages/AddPostPage.xaml.cs b/samples/core/Xamarin/EFGetStarted/Pages/AddPostPage.xaml.cs deleted file mode 100644 index 9fecc6b449..0000000000 --- a/samples/core/Xamarin/EFGetStarted/Pages/AddPostPage.xaml.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.EntityFrameworkCore; - -using Xamarin.Forms; - -namespace EFGetStarted -{ - public partial class AddPostPage : ContentPage - { - int BlogId; - - public AddPostPage(int blogId) - { - InitializeComponent(); - - BlogId = blogId; - } - - protected async void Save_Clicked(object sender, EventArgs e) - { - var newPost = new Post - { - BlogId = BlogId, - Content = postCell.Text, - Title = titleCell.Text - }; - - try - { - using (var blogContext = new BloggingContext()) - { - await blogContext.Posts.AddAsync(newPost); - - await blogContext.SaveChangesAsync(); - } - } - catch (Exception ex) - { - System.Diagnostics.Debug.WriteLine(ex); - } - - await Navigation.PopModalAsync(); - } - - protected async void Cancel_Clicked(object sender, EventArgs e) - { - await Navigation.PopModalAsync(); - } - } -} diff --git a/samples/core/Xamarin/EFGetStarted/Pages/BlogsPage.xaml b/samples/core/Xamarin/EFGetStarted/Pages/BlogsPage.xaml deleted file mode 100644 index 98980f0fe8..0000000000 --- a/samples/core/Xamarin/EFGetStarted/Pages/BlogsPage.xaml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/core/Xamarin/EFGetStarted/Pages/BlogsPage.xaml.cs b/samples/core/Xamarin/EFGetStarted/Pages/BlogsPage.xaml.cs deleted file mode 100644 index 3b037bdb29..0000000000 --- a/samples/core/Xamarin/EFGetStarted/Pages/BlogsPage.xaml.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using Xamarin.Forms; -using System.ComponentModel; -using System.Threading.Tasks; - -namespace EFGetStarted -{ - public partial class BlogsPage : ContentPage, INotifyPropertyChanged - { - public BlogsPage() - { - InitializeComponent(); - } - - protected async override void OnAppearing() - { - blobCollectionView.SelectedItem = null; - - using (var blogContext = new BloggingContext()) - { - await InsertStartData(blogContext); - - var theBlogs = blogContext.Blogs.ToList(); - - blobCollectionView.ItemsSource = theBlogs; - } - } - - async Task InsertStartData(BloggingContext context) - { - var blogCount = context.Blogs.Count(); - - if (blogCount == 0) - { - await context.AddAsync(new Blog { Url = "https://devblogs.microsoft.com/xamarin" }); - await context.AddAsync(new Blog { Url = "https://aka.ms/appsonazureblog" }); - - await context.SaveChangesAsync(); - } - } - - async void blobCollectionView_SelectionChanged(object sender, SelectionChangedEventArgs e) - { - if (!(e.CurrentSelection.FirstOrDefault() is Blog blog)) - return; - - var postsPage = new PostsPage(blog.BlogId); - await Navigation.PushAsync(postsPage); - } - - async void ToolbarItem_Clicked(System.Object sender, System.EventArgs e) - { - await Navigation.PushModalAsync(new NavigationPage(new AddBlogPage())); - } - - async void DeleteAll_Clicked(object sender, EventArgs e) - { - using (var blogContext = new BloggingContext()) - { - blogContext.RemoveRange(blogContext.Blogs); - - await blogContext.SaveChangesAsync(); - - blobCollectionView.ItemsSource = blogContext.Blogs.ToList(); - } - } - } -} diff --git a/samples/core/Xamarin/EFGetStarted/Pages/PostsPage.xaml b/samples/core/Xamarin/EFGetStarted/Pages/PostsPage.xaml deleted file mode 100644 index a4025bb7ab..0000000000 --- a/samples/core/Xamarin/EFGetStarted/Pages/PostsPage.xaml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/core/Xamarin/EFGetStarted/Pages/PostsPage.xaml.cs b/samples/core/Xamarin/EFGetStarted/Pages/PostsPage.xaml.cs deleted file mode 100644 index a93ae62735..0000000000 --- a/samples/core/Xamarin/EFGetStarted/Pages/PostsPage.xaml.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -using Xamarin.Forms; - -namespace EFGetStarted -{ - public partial class PostsPage : ContentPage - { - int BlogId; - - public PostsPage(int blogId) - { - InitializeComponent(); - - BlogId = blogId; - } - - protected override void OnAppearing() - { - using (var blogContext = new BloggingContext()) - { - var postList = blogContext.Posts - .Where(p => p.BlogId == BlogId) - .ToList(); - - postCollection.ItemsSource = postList; - } - } - - async void ToolbarItem_Clicked(System.Object sender, System.EventArgs e) - { - await Navigation.PushModalAsync(new NavigationPage(new AddPostPage(BlogId))); - } - } -} diff --git a/samples/core/Xamarin/EFGetStarted/Services/BloggingContext.cs b/samples/core/Xamarin/EFGetStarted/Services/BloggingContext.cs deleted file mode 100644 index ef1adf8307..0000000000 --- a/samples/core/Xamarin/EFGetStarted/Services/BloggingContext.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.IO; -using Microsoft.EntityFrameworkCore; -using Xamarin.Essentials; - -namespace EFGetStarted -{ - public class BloggingContext : DbContext - { - public DbSet Blogs { get; set; } - public DbSet Posts { get; set; } - - public BloggingContext() - { - SQLitePCL.Batteries_V2.Init(); - - this.Database.EnsureCreated(); - } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - string dbPath = Path.Combine(FileSystem.AppDataDirectory, "blogs.db3"); - - optionsBuilder - .UseSqlite($"Filename={dbPath}"); - } - } -} diff --git a/samples/global.json b/samples/global.json new file mode 100644 index 0000000000..be4942c34f --- /dev/null +++ b/samples/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "10.0.100-rc.1.25451.107" + } +} \ No newline at end of file