2017-08-16 72 views
3

我想使用Oracle使用dotConnect for Oracle(v 9.4)。由於aspnet核心2.0完全支持引用舊的.net框架,我試圖連接到數據庫使用常規的.net程序集(即程序集包含我的DbContext在目標。NET 4.6.1,並已在我的聊天室網站核心2項目)。aspnetcore 2.0與EF6和dotConnect爲oracle

我對着跌破發行

"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(); 
     }  

    } 
... 
} 

拋出異常時base(nameOrConnectionString)被執行。

在啓動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

多次嘗試後,我終於能夠通過此破解。

  1. 「在連接字符串應與「
  2. 而是瞄準netcoreapp2.0的,針對你aspnetcore 2.0的應用程序net461或任何完整的框架高於(在你的aspnetcore 2.0的csproj文件查找net461)
  3. 加入EF> =取代6.1從nuget到你的模態/實體組件。參考文獻Devart.Data,DevArt.Data.OracleDevart.Data.Oracle.Entoty.EF6在同一個程序集中。
  4. DevArt.Data.Entity.OracleEntityProviderServicesConfiguration
public class OracleDbConfiguration : OracleEntityProviderServicesConfiguration// : DbConfiguration 
{ 
    public OracleDbConfiguration() 
    { 
     SetProviderServices("Devart.Data.Oracle", OracleEntityProviderServices.Instance); 
     SetProviderFactory("Devart.Data.Oracle", OracleProviderFactory.Instance); 
    } 
} 
創建派生的類OracleDbConfiguration
  • 裝飾你的DbContext類與它。例如。

    [DbConfigurationType(typeof(OracleDbConfiguration))]

  • 您的DbContext類創建一個靜態構造函數,並填寫像這樣

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

    當我得到一個機會,我會上傳一個簡單的應用程序,它有完整的解決方案。

    相關問題