ORA-00604& ORA-08177与实体框架

时间:2018-01-26 19:10:27

标签: c# asp.net-mvc entity-framework oracle12c

我是asp.net mvc和实体框架的初学者。我已经开始在github中跟随这个例子了:https://github.com/abdelkafiahmed/BankManagementSystem

我在visual studio 2012 ultimate中创建了一个新项目MVC5,所有模型类(Banque,Client,...等)和实体框架上下文类 BankDbContext

我有 oracle数据库12c 版本

由于此示例中 web.config 中没有连接字符串,我决定使用实体框架访问oracle数据库。我通过 nuget 下载并安装了 oracle.ManagedDataAccess.EntityFramework oracle.ManagedDataAccess EntityFramework v6 包和t alsred thes包给出的连接字符串

<oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="ORCL" descriptor="(DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = orcl) 
    )
  )" />
      </dataSources>
    </version>
</oracle.manageddataaccess.client>
<connectionStrings>
    <add name="BankDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=bcdratest;Password=bcdratest;Data Source=ORCL" />
</connectionStrings>

我创建了Initializer类之后:

namespace BankAccountsManagementSystem.DataAccessLayer
{
    public class Initializer :DropCreateDatabaseAlways<BankDbContext>
    {
        protected override void Seed(BankDbContext context)
        {


            using(var ctx = new BankDbContext())
            {
               var  banque = new Banque
               {
                   Nom="ENIT Bank",
                   ArgentDepose = 0.0m,
                   Capital =0.0m,
                   NbreClients = 0,
                   NbreComptes=0,
                   NbreCredits=0,
                   SommeCredits = 0
                };

                ctx.Banques.Add(banque);
                ctx.SaveChanges();
              }             
            }


        }
    }

我已经开始创建 BanquesController Banques / Index 视图,当我执行应用程序时,数据库是第一次创建的。之后,我通过脚手架创建了 PersonneMoralesController ,并通过此示例中的代码更改了索引操作

here

但是在执行应用程序时我得到一个例外:

ORA-00604: error occurred at recursive SQL level string 1

ORA-08177: can't serialize access for this transaction

并且不会重新创建数据库。

我认为由于初始化程序银行控制器索引操作中的代码,我在这些错误中出现了这些错误,两个事务在同一Banques表中,所以我排除了这个初始化程序类文件。

但即便如此,当执行申请时问题仍然存在

为什么以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我通过以下方式解决了这个问题: 在Web.Config中验证您的DataSource。它包含TNS的别名和描述,它应该在我的机器上安装的ODP.NET的tnsname.ora中相同。

验证Oracle.ManagedDataAccess(.EntityFramework)包版本是否与我机器中的ODP.Net兼容。我的ODP.NET版本是12.1.024。因此,Oracle.ManagedDataAccess(.EntityFramework)包必须是12.1.024。并且小于12.2.0

我希望能帮到你。