一旦创建了一个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 架构中的表,则以下步骤有效。
在 Oracle 上创建身份表。如果需要,您可以更改表名,只需确保包含 Identity 使用它所必需的列即可。您还可以在应用程序中添加您可能需要的任何额外列(最初在 Devart 上找到的脚本,我将其复制到要点以防 URL 中断):
要点 here
如果您使用的是 EDMX 文件,则需要添加一个新的连接字符串,因为自动生成的连接字符串将不起作用,您需要一个标准的连接字符串。尝试遵循此模板:
<add name="IdentityContext" connectionString="Data Source=localhost:1521/xe;PASSWORD=password;USER ID=username;" providerName="Oracle.ManagedDataAccess.Client" />
告诉您的 ApplicationDbContext 使用您的新 connectionString
public ApplicationDbContext() : base("IdentityContext", throwIfV1Schema: false) { }
告诉 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"); }
重建,仅此而已!
让我知道它是否适合您!
关于database - ASP.NET MVC5 - 将用户保留在 Oracle 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878718/