database - ASP.NET MVC5 - 将用户保留在 Oracle 数据库中

标签 database oracle asp.net-mvc-5 entity-framework-6 asp.net-identity-2

一旦创建了一个ASP.NET MVC5项目(目标框架是.NET 4.5.1并且认证类型是Individual User Account ),那么配置项目以将用户、声明、角色等保留在 Oracle 12c 数据库中的最优雅的方法是什么?我的意思是,如何在不改变自动生成的 MVC5 项目结构的情况下将授权/身份验证数据保留在 Oracle 中。

我想改变 <defaultConnection>标记还不够,应该有另一个 Oracle 实现来替换 Microsoft.AspNet.Identity.EntityFramework .收集一个答案,告诉你从一开始就一步一步地做什么,模板项目是由 VisualStudio 生成的(即应该将哪些引用添加到项目中;应该以何种方式添加 Web.config 文件),这将非常有帮助安排好了吗?Oracle 表应该严格命名为 AspNetUsers、AspNetClaims 等,还是我可以将已经存在的表名注入(inject)代码端?)

注意:Devart 的 dotConnect for Oracle 不在我的范围内,因为它不是免费产品。我使用 Oracle ManagedDataAccess 进行数据库访问并使用 Entity Framework,但是将 ASP.NET Identity 2 + EntityFramework6 逻辑与 Oracle 数据库一起使用(没有深入改变经典 MVC5 项目的结构)令我沮丧。

最佳答案

这对您来说可能有点晚了,但我会保留它以防其他人遇到同样的问题。 所以我终于设法让 Identity 2.0 和 Oracle 一起工作。如果您不想对默认的 IdentityUser 进行任何更改(例如,如果您可以使用 char ID 而不是 int 或 long)并且只想要现有 Oracle 架构中的表,则以下步骤有效。

  1. 在 Oracle 上创建身份表。如果需要,您可以更改表名,只需确保包含 Identity 使用它所必需的列即可。您还可以在应用程序中添加您可能需要的任何额外列(最初在 Devart 上找到的脚本,我将其复制到要点以防 URL 中断):

    要点 here

  2. 如果您使用的是 EDMX 文件,则需要添加一个新的连接字符串,因为自动生成的连接字符串将不起作用,您需要一个标准的连接字符串。尝试遵循此模板:

    <add name="IdentityContext" connectionString="Data Source=localhost:1521/xe;PASSWORD=password;USER ID=username;" providerName="Oracle.ManagedDataAccess.Client" />

  3. 告诉您的 ApplicationDbContext 使用您的新 connectionString

    public ApplicationDbContext()
        : base("IdentityContext", throwIfV1Schema: false)
    {
    }
    
  4. 告诉 Identity 使用您现有的架构和表。在 IdentityModels.cs 中的 ApplicationDbContext 定义中添加此方法:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder); // MUST go first.
    
        modelBuilder.HasDefaultSchema("YOUR_SCHEMA"); // Use uppercase!
    
        modelBuilder.Entity<ApplicationUser>().ToTable("AspNetUsers");
        modelBuilder.Entity<IdentityRole>().ToTable("AspNetRoles");
        modelBuilder.Entity<IdentityUserRole>().ToTable("AspNetUserRoles");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("AspNetUserClaims");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("AspNetUserLogins");
    }
    
  5. 重建,仅此而已!

让我知道它是否适合您!

关于database - ASP.NET MVC5 - 将用户保留在 Oracle 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878718/

相关文章:

c - 仅使用一个函数更新全局 C 结构而不传递整个数据结构

javascript - asp.net web api 应用程序中的 Route 和 RoutePrefix 问题

sql-server-2008 - 如何避免 "Incorrect syntax near ' OFFSET'。 FETCH 语句中选项 NEXT 的使用无效。”

java - JOOQ:方言 DEFAULT 不支持类型类 org.jooq.impl.SelectImpl

c# - ASP MVC : How get roles from ApplicationUser

python - Flask peewee 无法在网络服务器上工作

mysql - 设置master数据库来控制其他数据库的结构

php - MYSQL - 加入或子查询问题

php - 连接到 Oracle : CodeIgniter vs Laravel

oracle - 列级权限与遗留应用程序