1

我搜索了以下链接:

如何使用 EF 部署 Oracle

使用 EF 部署 Oracle 的问题

以及有关 Oracle 部署的许多其他帖子。

基本上我有一个 C# 简单的测试应用程序来将一些行插入数据库(这是一个测试应用程序。完整的应用程序使用了很多 EF 的东西):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;
using MzDbLib.DataAccessObject;
using MzDbLib.DatabaseContext;
using MzDbLib.DatabaseModel;

namespace TestDbConnection
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("This program will generate 10 logs into SYSTEMDATALOG table");

            ///
            /// Do a loop of 10 logs generated
            /// 
            for (int i = 0; i < 10; i++)
            {
                string msg = "TEST GENERATED LOG NUMBER " + i.ToString();

                Console.Write("Generating log " + i.ToString() + "...");

                //
                // Connect to database and to the log table
                //
                Entities dbContext = new Entities();
                SYSTEMDATALOG logTable = new SYSTEMDATALOG();

                logTable.DATETIME = DateTime.Now;

                logTable.TYPE = "INFO";

                logTable.SEVERITY = 0;
                logTable.SOURCE = "TESTDBCONNECTION";
                logTable.USER = "SYSTEM";
                logTable.MESSAGE = msg;

                dbContext.SYSTEMDATALOG.Add(logTable);
                dbContext.SaveChanges();

                Console.WriteLine("Done.");
            }

            Console.WriteLine ("Data generated at the database. Press a key to end test.");
            Console.ReadKey();

            // 
            // Application exit
            //
            Environment.Exit(0);
        }
    }
}

dbContext 和 SYSTEMDATALOG 类是通过 EF 模型优先从 Oracle 数据库生成的。我正在使用 Visual Studio 2012 和 ODAC 12.1.0.1.0,并在开发机器上安装了 32 位的 Oracle Developer Tools。开发时所有全新安装和工作都很好。

在开发中一切都运行良好,但在生产中却没有。

我在生产中使用 WINDOWS SERVER 2012。我尝试了以下方法:

a) 从 schatch 安装 WS2012 并从 Oracle 站点安装全新的 ODAC 32 位版本 12.1.0.1.0。我确实使用 ODAC 4 版本运行安装。

我得到“提供程序与 Oracle 客户端的版本不兼容”。经过一些尝试和几个小时的损失,采用不同的方法,我决定采用一种新方法 - 不安装 Oracle

b) 我全新安装了 WS2012 并且没有安装 ORacle。复制了上述链接中所述的 DLL,现在我得到“无法找到请求的 .NET 数据提供程序”。我已将所有可用的 Oracle DLL 从 DEV 机器复制到我的应用程序的 WS2012 EXE 目录中,但仍然出现该错误。

我的连接字符串(由 VS2012 自动生成)是:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <connectionStrings>
    <add name="Entities" connectionString="metadata=res://*/DatabaseModel.DatabaseModel.csdl|res://*/DatabaseModel.DatabaseModel.ssdl|res://*/DatabaseModel.DatabaseModel.msl;provider=Oracle.DataAccess.Client;provider connection string=&quot;data source=//ORACLESERVER1:1521/MEZAMES;password=xxx;persist security info=True;user id=MZMESDB&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

这个字符串被生成到 2 个文件中:TestDbConnection.exe.configTestDbConnection.vshost.exe.config(我正在将 bin/Debug 文件夹复制到服务器)。

因此,我需要帮助将我的应用程序部署到新服务器。一些问题:

a) ODAC 12.1.0.1 的应用程序需要哪个 DLL?这与 ODAC 11 有什么不同吗?

b) 最后一个错误是关于 EF 还是 Oracle ?

c) 为什么 VS 会生成 2 个配置文件?

d) "providerName="System.Data.EntityClient" 是错误的原因吗?如果是,应该一起复制什么 DLL。

e) 是否有任何工具/方法可以知道缺少什么或版本不兼容,避免复制和尝试方法?

f) 配置文件中是否缺少某些内容?

感谢大家的任何帮助。这让我发疯了,因为我从本周开始就一直坚持下去......

4

1 回答 1

1

我不确定服务器环境中 ODAC 的安装选项。我知道只有在代码中使用 TransactionScope 时才需要 Transaction 模块。

您从无法找到提供程序中看到的问题是因为 Oracle 将提供程序名称从12c 位更改Oracle.DataAccess.Client为。Oracle.ManagedDataAccess.Client

您需要在连接字符串和 EDMX 文件的 SSDL 部分中更改此设置:您将从

<edmx:StorageModels>
  <Schema Namespace="Model.Store" Alias="Self" Provider="Oracle.DataAccess.Client" (...)

<edmx:StorageModels>
  <Schema Namespace="Model.Store" Alias="Self" Provider="Oracle.ManagedDataAccess.Client" (...)
于 2013-09-24T12:49:22.500 回答