【发布时间】:2017-06-19 13:54:38
【问题描述】:
我正在尝试在我的 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?通过托管和非托管数据访问? (因为非托管框架没有nuget 版本)
【问题讨论】:
标签: c# oracle entity-framework-6 identity