asp.net-core - 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)
解决方案
即使下载了用于生产的 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)。
推荐阅读
- docker - 使用 ansible 卷的组合列表启动 Docker 容器
- python - WTForms Validators 在编辑用户时检查字段的唯一性
- java - 处理来自 java 流的相邻重叠对
- java - 断开连接后使用SFTP下载InputStream时JSch“管道关闭”
- amazon-web-services - 直接在云形成中设置堆栈级标签,无需包装器模板
- encoding - 编辑后的视频会产生比原始图像更小的图像,即使分辨率更高
- python - 错误:Pandas 需要版本 '1.1.0' 或更新版本的 'xlrd'(当前安装版本 '1.0.0')
- arduino - 在 esp32 上为盖革计数器获取数据时出现问题
- html - 跨度为双 f,chrome 中的奇怪性能
- android - Android recycler view onItemClick 识别适配器