【发布时间】:2017-04-29 22:49:04
【问题描述】:
我正在尝试将 MVC(版本 5)身份成员资格提供程序与 Oracle 数据库 (11 g) 一起使用。我已经创建了一个数据库并安装了所有必要的表(ORA_ASPNET_APPLICATIONS、ORA_ASPNET_USERS 等)。我还下载了 Oracle Developer Tools for Visual Studio,并安装并引用了 Oracle.ManagedDataAccess 和 Oracle.ManagedDataAccess.EntityFramework 程序集。当我尝试添加新用户时,应用程序在这一行中断:
var result = await UserManager.CreateAsync(user, model.Password);
我收到以下错误:
ORA-01918: 用户 'dbo' 不存在
我查看了堆栈跟踪 - 根据内容 - 应用程序似乎正在尝试创建一个新数据库(见下文):
System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext 上下文)
不过,我不确定为什么,因为数据库已经存在。我的 web.config 中只有一个连接字符串,它指向我创建的 Oracle 数据库。
是否有人能够让 MVC 成员资格提供程序与 Oracle 合作?如果是这样,任何人都可以为我提供任何帮助吗?我已经查看了这个链接——Oracle.ManagedDataAccess.EntityFramework - ORA-01918: user 'dbo' does not exist——但我没有使用代码优先,所以我认为任何建议都不适用于我的情况。
我的连接字符串如下:
<add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=MyOracleAccountUserName;Password=MyOracleAccountPassword;Data Source=MyOracleDataSource" />
不过,我不认为这是连接字符串。我还尝试按如下方式覆盖 OnModelCreating 方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasDefaultSchema("MySchemaName");
modelBuilder.Entity<ApplicationUser>().ToTable("ORA_ASPNET_USERS");
modelBuilder.Entity<IdentityRole>().ToTable("ORA_ASPNET_ROLES");
modelBuilder.Entity<IdentityUserRole>().ToTable("ORA_ASPNET_USERSINROLES");
}
但是,当我这样做时,我得到一个不同的错误:ORA-00904: "Extent1"."UserName": invalid identifier.
【问题讨论】:
-
您的连接字符串错误?在 web.config 中向我们展示您的连接字符串
-
我添加了连接字符串
-
我想通了。我数据库中的表是基于 ASP.Net Membership 模型,而不是 Identity 模型。我使用了 Oracle 提供的数据库表脚本。所以,我不得不废弃这些并使用迁移创建新的。一旦我这样做了,我就可以创建新用户了。
-
你应该发布你的答案......其他人可能会觉得它有益。
标签: asp.net-mvc oracle11g odp.net membership-provider