code

ASP.NET MVC5 - Oracle Database에 사용자 유지

starcafe 2023. 11. 4. 13:10
반응형

ASP.NET MVC5 - Oracle Database에 사용자 유지

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를 사용하지만 ASP를 사용합니다.Oracle 데이터베이스를 사용하는 NET Identity 2 + EntityFramework 6 로직(클래식 MVC5 프로젝트의 구조를 크게 변경하지 않고)은 저에게 좌절감을 주었습니다.

고객님께는 조금 늦게 도착할 수도 있지만, 혹시 다른 분들도 같은 문제가 발생할 경우를 대비해서 남겨두겠습니다.그래서 Identity 2.0과 Oracle이 함께 작동할 수 있게 되었습니다.기본 IdentityUser를 변경하지 않고(예: int 또는 long이 아닌 char ID를 사용해도 상관없는 경우) 기존 Oracle 스키마의 테이블만 원하는 경우 다음 단계를 수행합니다.

  1. Oracle에서 ID 테이블을 만듭니다.원하는 경우 테이블 이름을 변경할 수 있으며, ID 작업에 필요한 열을 포함해야 합니다.응용 프로그램에 필요한 추가 열을 추가할 수도 있습니다(원래 Devart에서 볼 수 있는 스크립트로 URL이 깨질 경우를 대비하여 mist에 복사했습니다).

    여기에 요지

  2. EDMX 파일을 사용하는 경우 자동으로 생성되는 연결 문자열이 작동하지 않으므로 표준 연결 문자열을 추가해야 합니다.다음 템플릿을 따라 시도해 보십시오.

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

  3. ApplicationDbContext에 새 연결 문자열을 사용하도록 지시

    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. 재건하라, 그것으로 끝!

그게 당신에게 도움이 된다면 저에게 알려주세요!

Andres Bejarano는 나에게 아주 잘 해주었지만, 나는 나에게 많은 시간을 절약해 줄 수 있는 무언가를 추가하고 싶습니다.먼저 Oracle을 사용하여 데이터베이스에 연결할 수 있는지 확인합니다.관리되는 데이터 액세스.클라이언트(TNS 이름 파일에 문제가 있었습니다. Oracle Connection 참조)ORA-12541 TNS 청취자 없음) 던지는 중입니다.

둘째, 사용자를 등록하려고 할 때 다음 오류가 발생했습니다.

ADO에 대한 엔티티 프레임워크 제공자를 찾을 수 없습니다.불변 이름이 'Oracle'인 NET 공급자입니다.관리되는 데이터 액세스.고객님.공급자가 애플리케이션 구성 파일의 'entityFramework' 섹션에 등록되어 있는지 확인합니다.자세한 내용은 http://go.microsoft.com/fwlink/ ?LinkId=260882를 참조하십시오.

이는 올바른 Nuget 패키지가 모두 설치되어 있지 않거나 웹.config를 망쳤기 때문입니다.

ODAC가 http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html 에 설치되어 있는지 확인합니다.

다음 Nuget 패키지를 순서대로 제거/재설치하면 됩니다.다음 오류를 해결해야 합니다.

  1. Oracle 설치 제거-패키지를 제거합니다.관리되는 데이터 액세스.엔터티 프레임워크
  2. Oracle 설치 제거-패키지를 제거합니다.관리 데이터 액세스
  3. Uninstall-Package 엔티티 프레임워크 버전 6.1.1
  4. IMT2000 3GPP - 설치-패키지 엔티티 프레임워크 - 버전 6.1.1
  5. 설치-패키지 오라클.관리 데이터 액세스
  6. 설치-패키지 오라클.관리되는 데이터 액세스.엔터티 프레임워크

네, 오래된 질문이지만 저는 이것에 대해 몇 가지 말하는 것이 유용하다고 생각합니다.Andres Bejarano의 답변은 저에게 효과가 있었지만 dll Version에 대해서는 몇 가지가 있습니다.Entity Framework 6 On VS 2015의 경우 MVC 프로젝트에 다음 dll에 대한 참조가 추가되었습니다.

  • Oracle.DataAccess.엔티티 프레임워크 6.121.2.0
  • Oracle.ManagedDataAccess 4.121.2.0
  • Oracle.managedDataAccess.엔티티 프레임워크 6.121.2.0.

이 후 web.config 파일에 다음과 같이 올바른 구성을 작성해야 합니다.
Configuration(구성) 태그 끝에 다음을 추가합니다.

<system.data>
<DbProviderFactories>
  <remove invariant="Oracle.ManagedDataAccess.Client" />
  <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories> </system.data>

공급자 섹션에서 다음을 추가합니다.

<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

물론 연결 문자열 섹션에서는 다음과 같은 오라클용 연결 문자열을 넣어야 합니다.

<add name="IdentityContext" connectionString="Data Source=YOURDB;User Id=YOURUSER;Password=YOURPASSWORD;"
  providerName="Oracle.ManagedDataAccess.Client" />

안드레스 베조라노가 말한 변화는 누겟을 건들지 않고 저에게 효과가 있었습니다.

직접 실행할 수 있습니다.그건 불가능하지 않다.누군가여기저기서 해냈습니다.상황이 좀 달라질 수도 있습니다.

저는 AspNet을 구현했습니다.nhibernate에 대한 ID와 엔티티 프레임워크에 대한 언급이 없습니다.코드를 보여줄 수는 없지만 기본적으로 다른 사람들이 레이븐Db, 대퍼 또는 하이버네이트에서 한 일을 따라왔습니다.

다음 사항을 구현해야 합니다.

  • 사용자(Microsoft).AspNet.신원.아이유서),
  • 역할(Microsoft).AspNet.신원.IRole)
  • UserStore(마이크로소프트).AspNet.신원.아이유서스토어)
  • 사용자 관리자(Microsoft).AspNet.신원.사용자 관리자)
  • RolesStore(마이크로소프트).AspNet.신원.IRoleStore)
  • 역할 관리자(Microsoft).AspNet.신원.역할 관리자)

언급URL : https://stackoverflow.com/questions/28878718/asp-net-mvc5-keeping-users-in-oracle-database

반응형