我是开发ASP.NET应用程序的新手,我开始了一个新项目,我正在使用带有ODP和OLAC插件的Oracle DB . 我设置了连接字符串,我可以在Server Explorer下看到数据库 .
现在我希望Identity用户也可以存储在我的数据库中,但我现在无法找到它们存储的位置 . app_data文件夹为空,任何地方都没有.mdf文件,我的连接字符串是Oracle连接字符串;但是当我设置IdentityDBContext以使用我自己的连接字符串时,我收到错误说 "The entity type ApplicationUser is not part of the model for the current context." 我正在使用数据库优先方法:
这是我的数据库上下文的自动生成代码:
public partial class ActivoContext : DbContext
{
public ActivoContext()
: base("name=ActivoContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
......
这是项目生成的身份代码,我刚刚更改了连接字符串:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("name=ActivoContext", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
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>
EDIT 所以我意识到问题是使用相同的连接字符串有两个不同的上下文 . 因此,只有一个显示而另一个不起作用:自动生成的db-first ActivoContext显示而ApplicationDbContext不显示 . 我该如何合并这两个或让它们一起工作?我无法修改DbContext导致其自动生成...
2 回答
最后让Identity 2.0与我的Oracle DB一起使用 . 这是我做的:
如果您不想对默认的IdentityUser进行任何更改,则以下步骤有效(例如,如果您可以使用char ID而不是int或long),并且只需要现有Oracle架构上的表 .
1)在Oracle上创建标识表 . 您可以根据需要更改表名,只需确保包含必要的Identity列以使用它 . 您还可以在应用程序中添加可能需要的任何额外列(最初在Devart上找到的脚本,我将其复制到gist,以防URL中断):
要点here
2)如果您正在使用EDMX文件,则需要添加新的连接字符串,因为自动生成的连接字符串将无法工作,您需要一个标准的连接字符串 . 请尝试以下模板:
3)告诉您的ApplicationDbContext使用新的connectionString
4)告诉Identity使用您现有的架构和表格 . 在IdentityModels.cs中找到的ApplicationDbContext定义中添加此方法:
5)重建,就是这样!
您可以使用此脚本在Oracle DB中正确创建标识表
`
`
像下面一样修改ConnectionString
然后修改你的OnModelCreating方法
`
`
这对我的项目工作得很好 .
你可以在这里找到一些有趣的点 . (ASP.NET MVC,EF与NgGet Oracle 12.2.1 ..)
ASP.NET Identity With Oracle Database