我是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 ,并通过此示例中的代码更改了索引操作
但是在执行应用程序时我得到一个例外:
ORA-00604: error occurred at recursive SQL level string 1
ORA-08177: can't serialize access for this transaction
并且不会重新创建数据库。
我认为由于初始化程序和银行控制器索引操作中的代码,我在这些错误中出现了这些错误,两个事务在同一Banques表中,所以我排除了这个初始化程序类文件。
但即便如此,当执行申请时问题仍然存在
为什么以及如何解决这个问题?
答案 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
我希望能帮到你。