And*_*ano 3 asp.net oracle asp.net-mvc asp.net-identity
我是开发ASP.NET应用程序的新手,我开始了一个新项目,我正在使用带有ODP和OLAC插件的Oracle DB.我设置了连接字符串,我可以在Server Explorer下看到数据库.
现在我希望Identity用户也可以存储在我的数据库中,但我现在无法找到它们存储的位置.app_data文件夹为空,任何地方都没有.mdf文件,我的连接字符串是Oracle连接字符串; 但是当我设置IdentityDBContext以使用我自己的连接字符串时,我得到一个错误,说"实体类型ApplicationUser不是当前上下文模型的一部分".我正在使用数据库优先方法:
这是我的数据库上下文的自动生成代码:
public partial class ActivoContext : DbContext
{
public ActivoContext()
: base("name=ActivoContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
......
Run Code Online (Sandbox Code Playgroud)
这是项目生成的身份代码,我刚刚更改了连接字符串:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("name=ActivoContext", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
Run Code Online (Sandbox Code Playgroud)
web.config文件:
<connectionStrings>
<add name="ActivoContext" connectionString="metadata=res://*/Activo.csdl|res://*/Activo.ssdl|res://*/Activo.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string="DATA SOURCE=localhost:1521/xe;PASSWORD=activos;USER ID=ACTIVOS"" providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
编辑 所以我意识到问题是使用相同的连接字符串有两个不同的上下文.因此,只显示一个而另一个不起作用:自动生成的db-first ActivoContext显示而ApplicationDbContext不显示.我应该如何合并这两个或让它们一起工作?我无法修改DbContext导致其自动生成...
最后让Identity 2.0与我的Oracle DB一起使用.这是我做的:
如果您不想对默认的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" />
Run Code Online (Sandbox Code Playgroud)
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)重建,就是这样!
| 归档时间: |
|
| 查看次数: |
4497 次 |
| 最近记录: |