gpt4 book ai didi

c# - 带有 EF6 和 dotConnect for oracle 的 aspnetcore 2.0

转载 作者:行者123 更新时间:2023-11-30 16:43:03 30 4
gpt4 key购买 nike

我正在尝试通过 dotConnect for Oracle(v 9.4) 使用 Oracle。由于 aspnet core 2.0 完全支持引用旧的 .net 框架,我正在尝试使用常规的 .net 程序集连接到数据库(即包含我的 DbContext 的程序集是针对 .net 4.6.1 的,并且在我的 asp.net 中被引用核心2项目)。

我面临以下问题

"System.TypeInitializationException: 'The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception.'

Inner Exception: FileNotFoundException: Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified."

这是我的 CodeConfig

public class CodeConfig : DbConfiguration
{
public CodeConfig()
{
SetProviderServices("Devart.Data.Oracle", Devart.Data.Oracle.Entity.OracleEntityProviderServices.Instance);
SetProviderFactory("Devart.Data.Oracle", new Devart.Data.Oracle.OracleProviderFactory());
}
}

我的 DbContext 类

[DbConfigurationType(typeof(CodeConfig))]
public partial class MyEntities : DataContext, IMyStoredProcedures
{
public MyEntities(string nameOrConnectionString) : base(nameOrConnectionString)
{
Configure();
}

private void Configure()
{
this.Configuration.AutoDetectChangesEnabled = true;
this.Configuration.LazyLoadingEnabled = true;
this.Configuration.ProxyCreationEnabled = true;
this.Configuration.ValidateOnSaveEnabled = true;
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}

}
...
}

Exception is thrown when base(nameOrConnectionString) is executed.

启动中的 DI

var dbContext = new MyEntities(Configuration["Data:DefaultConnection:ConnectionString"]);
services.AddScoped<IDataContextAsync>(provider => dbContext);
services.AddScoped<IMyStoredProcedures>(provider => dbContext);

Appsettings.json

"Data": {
"DefaultConnection": {
"ConnectionString": "metadata=res://Org.MyApp.Entities/MyModel.csdl|res://Org.MyApp.Entities/MyModel.ssdl|res://Org.MyApp.Entities/MyModel.msl;provider=Devart.Data.Oracle;provider connection string=&quot;User Id=UID;Password=****;Server=Server;Persist Security Info=True&quot;"
}
}

以下链接用作引用。

  1. Getting started Asp.net core with EF6

  2. aspnet core 1.x with EF6 (基于 1.x 但有有用的信息)

最佳答案

经过多次尝试,我终于破解了这个问题。

  1. 在连接字符串中应替换为'
  2. 不要以 netcoreapp2.0 为目标,而是将您的 aspnetcore 2.0 应用程序以 net461 或任何更高的完整框架为目标(在您的 aspnetcore 2.0 csproj 文件中查找 net461)
  3. 将 EF >=6.1 从 nuget 添加到您的模态/实体程序集。引用 Devart.DataDevArt.Data.OracleDevart.Data.Oracle.Entoty.EF6 在同一程序集中。
  4. 创建一个派生自DevArt.Data.Entity.OracleEntityProviderServicesConfiguration的类OracleDbConfiguration
public class OracleDbConfiguration : OracleEntityProviderServicesConfiguration// : DbConfiguration
{
public OracleDbConfiguration()
{
SetProviderServices("Devart.Data.Oracle", OracleEntityProviderServices.Instance);
SetProviderFactory("Devart.Data.Oracle", OracleProviderFactory.Instance);
}
}
  1. 用它装饰您的 DbContext 类。例如

    [DbConfigurationType(typeof(OracleDbConfiguration))]

  2. 在您的 DbContext 类上创建一个静态构造函数并像这样填充它

static MyEntities()
{
var config = Devart.Data.Oracle.Entity.Configuration.OracleEntityProviderConfig.Instance;
config.CodeFirstOptions.ColumnTypeCasingConventionCompatibility = false;
}

如果有机会,我会上传一个包含完整解决方案的简单应用。

关于c# - 带有 EF6 和 dotConnect for oracle 的 aspnetcore 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45718265/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com