Как сгенерировать классы Model для существующих AzureCosmosDB? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть Azure CosmosDB со всеми данными и коллекциями. Теперь я пытаюсь сгенерировать классы Model на основе того же процесса, что и для базы данных SQLServer.

https://www.learnentityframeworkcore.com/walkthroughs/existing-database

Я попробовал следующую команду, используя утилиту cmd для перехода к папке, котораясодержит файл решения:

dotnet ef dbcontext scaffold <Azure CosmosDB ConnectionString> Microsoft.EntityFrameworkCore.Cosmos -o Models

При выполнении вышеупомянутой команды я получаю следующую ошибку:

System.InvalidOperationException: Unable to find expected assembly attribute named DesignTimeProviderServicesAttribute in provider assembly Microsoft.EntityFrameworkCore.Cosmos. This attribute is required to identify the class which acts as the design-time service provider factory.
   at Microsoft.EntityFrameworkCore.Design.Internal.DesignTimeServicesBuilder.ConfigureProviderServices(String provider, IServiceCollection services, Boolean throwOnError)
   at Microsoft.EntityFrameworkCore.Design.Internal.DesignTimeServicesBuilder.Build(String provider)
   at Microsoft.EntityFrameworkCore.Design.Internal.DatabaseOperations.ScaffoldContext(String provider, String connectionString, String outputDir, String outputContextDir, String dbContextClassName, IEnumerable`1 schemas, IEnumerable`1 tables, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContextImpl(String provider, String connectionString, String outputDir, String outputDbContextDir, String dbContextClassName, IEnumerable`1 schemaFilters, IEnumerable`1 tableFilters, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContext.<>c__DisplayClass0_1.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Unable to find expected assembly attribute named DesignTimeProviderServicesAttribute in provider assembly Microsoft.EntityFrameworkCore.Cosmos. This attribute is required to identify the class which acts as the design-time service provider factory.

Может кто-нибудь помочь мне узнать, как решить эту проблему?

1 Ответ

0 голосов
/ 02 октября 2019

Для того, чтобы это работало, поставщик базы данных должен содержать информацию о том, как создавать леса. В настоящее время CosmosDB не поддерживает это, поэтому вы не сможете использовать CLI для создания моделей из существующей базы данных.

Существует проблема Github, открытая для улучшения сообщения об ошибкечтобы сделать это более понятным. При желании вы можете открыть вопрос об этом репо с просьбой добавить эту функцию для Cosmos.

...