[英]Oracle database connection for Entity Framework
我正在尝试在Web API服务中进行基于令牌的授权,并计划将身份表存储在Oracle数据库中。
我知道有两种访问数据库的方法-通过Oracle ManagedDataAccess或Oracle DataAccess。 我已经下载了Entity Framework 6的托管版本。
这是我的web config
的一部分:
( 我已经修改了凭据和字符串路径,只是假设它们是正确的,并且我可以在没有实体框架的情况下进行连接-但仅限于非托管DataAccess )
<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<dataSource alias="Test" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))" />
</dataSources>
</version>
</oracle.manageddataaccess.client>
<connectionStrings>
<add name="Test"
providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=login;Password=pass;Data Source=Test" />
<clear />
<add name="OraAspNetConString" connectionString=" " />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v13.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="Oracle.ManagedDataAccess.Client"
type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
</entityFramework>
这就是dbContext
的一部分OnModelCreating
方法应该强制身份使用我自己准备的表(或者我希望这样做,没有机会对其进行测试):
public class AuthContext : IdentityDbContext<IdentityUser>
{
public AuthContext() : base("Test")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder); // MUST go first.
modelBuilder.HasDefaultSchema("MY_SCHEME"); // Use uppercase!
modelBuilder.Entity<IdentityUser>().ToTable("AspNetUsers");
modelBuilder.Entity<IdentityRole>().ToTable("AspNetRoles");
modelBuilder.Entity<IdentityUserRole>().ToTable("AspNetUserRoles");
modelBuilder.Entity<IdentityUserClaim>().ToTable("AspNetUserClaims");
modelBuilder.Entity<IdentityUserLogin>().ToTable("AspNetUserLogins");
}
public static AuthContext Create()
{
return new AuthContext();
}
}
所以...当我在ManagedDataAccess中使用连接字符串时:
<add name="Test"
providerName="Oracle.ManagedDataAccess.Client"
connectionString="User Id=login;Password=pass;Data Source=Test" />
我遇到了错误:
ORA-12154:TNS:无法解析指定的连接标识符
当我转向这样的非托管版本时:
<add name="Test"
providerName="Oracle.DataAccess.Client"
connectionString="User Id=login;Password=pass;Data Source=Test" />
我收到一个错误消息,即Entity Framework无法找到任何名为Oracle.DataAccess.Client
dbContext
。
在我的其他项目中,我使用的是Oracle.ManagedDataAccess.Client
,但是在我的连接字符串中键入Oracle.DataAccess.Client
一切正常!
一个简单的问题-如何使用EF6连接到Oracle? 通过托管和非托管数据访问? (因为非托管框架版本没有裸露)
我没有明确的答案,但以下内容可能有助于找到根本原因。
我假设Oracle.ManagedDataAccess.Client
和Oracle.DataAccess.Client
使用不同的方法来解析TNS别名。
Oracle.ManagedDataAccess.Client
检查以下内容:
machine.config
, web.config
, user.config
)的<oracle.manageddataaccess.client>
部分下的dataSources
部分中的数据源别名。 tnsnames.ora
文件中.NET配置文件中TNS_ADMIN
指定的位置的数据源别名。 位置可以包含绝对或相对目录路径。 tnsnames.ora
文件中的数据源别名与.exe
位于同一目录中。 而Oracle.DataAccess.Client
在以下位置寻找tnsnames.ora
文件:
TNS_ADMIN
HKLM\\SOFTWARE\\ORACLE\\KEY_{Oracle_Home_Name}\\TNS_ADMIN
,分别。 HKLM\\SOFTWARE\\Wow6432Node\\ORACLE\\KEY_{Oracle_Home_Name}\\TNS_ADMIN
%ORACLE_HOME%\\network\\admin
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.