首页 > 解决方案 > ODP.NET Core - 脚手架数据库上下文

问题描述

我正在使用 oracles odp.net core beta 3。具体来说,该 dll 是 Oracle.ManagedDataAccess.Core.2.12.0-beta3。该项目是创建一个位于 oracle 实例之上的 Web api。

我的问题 - 此提供程序是否支持命令“Scaffold-DBContext”。如果是这样,我做错了什么...我尝试使用类似于以下内容的连接字符串。

Data Source={databasename}/{TNS}.domain.local; User ID={UserName};Password={Password};

以及 Package Manager 终端中的实际命令

Scaffold-DbContext Data Source={databasename}/{TNS}.domain.local; User ID={UserName};Password={Password};" Oracle.ManagedDataAccess -OutputDir Models -Tables {TableName}

我收到以下错误,这表明它无法在提供程序程序集中使用 DesignTimeServiceAttribute。

我还引用了 Microsoft.EntityFrameworkCore.Tools (2.2.0),其中包括设计工具。

错误

    System.InvalidOperationException: Unable to find expected assembly attribute named DesignTimeProviderServicesAttribute in provider assembly Oracle.ManagedDataAccess. 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)

标签: asp.net-coreodp.net

解决方案


即使下载了用于生产的 ODP.NET Core 驱动程序(2.18.3,于 2018 年 9 月 20 日发布,可从https://www.nuget.org/packages/Oracle 上的 nuget 获得,我也遇到了您遇到的问题。 ManagedDataAccess.Core/ )。

我联系了 Oracle 社区寻求帮助。一个善良的人回答说,如果我们想随时获得诸如“UseOracle”之类的好处,还有另一个难题。它是 Entity Framework Core 的 Oracle 提供者。请参阅https://community.oracle.com/thread/4180739上的主题。

据我所知并根据他的回答,使用它的唯一其他方法是 Oracle 帮助中心 ODP.NET Core 入门 ( https://www.oracle.com/webfolder/technetwork/tutorials /obe/db/dotnet/ODPNET_Core_get_started/index.html)。


推荐阅读