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

vah*_*det 9 database oracle entity-framework-6 asp.net-mvc-5 asp.net-identity-2

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

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

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

And*_*ano 6

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

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

    点击这里

  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)
    {
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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");
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 重建,就是这样!

请让我知道这对你有没有用!