3

私はPostgreSQLのデータストレージを持つASP Core 1に基づいたWebアプリケーションを持っています。そして、今私は認証機能を追加したい。私は、権限を持つ基本的なサンプルのmvcプロジェクトを作成し、MsSqlサーバーで正常に動作します。しかし、PostgreSQLはどうですか?ASPコア1とPostgreSQL。 Authorizatioin and authentication

最初は同じスキーマ(SQLはdnx ef migrations scriptで生成され、コードはpg-styleで更新されています)でデータベースを作成します。そして、私は、新しいユーザーとして登録しようとすると、私はエラーを取得し42P01: relation \"AspNetUsers\" does not exist Postgresの

services.AddEntityFramework() 
    .AddNpgsql() 
    .AddDbContext<ApplicationDbContext>(options => 
     options.UseNpgsql(Configuration["Data:DefaultConnection:ConnectionString"])); 

とEFを設定しています。私はすでに二重引用符でテーブル名を囲んでいますが、それは役に立ちません。私はデフォルトの認証モデルにアクセスすることができず、テーブル名とフィールド名にname属性を追加できません。

だから、私の質問は以下のとおりです。

  1. 私は、DBへのアクセスを得ることができない私のサンプルプロジェクトの何が問題になって、なぜ?

  2. よりグローバルに。 ASP Core 1 + PostgreSqlで認証と認証を構成する最善の方法は何ですか?私はすべてのASPの認証機能には必要ありません、私はちょうどロールで、私はbigintベースのIDを持っていると私はユーザーモデル(テーブル)を拡張したい。

注:私はEF7を使用します。

答えて

2

私の最初の質問の答えは間違ったデータベーススキーマです。誰かがスキーマに興味がある場合は、完全なpg SQLコードを取得しますが、私の2番目の質問は依然としてです。

CREATE TABLE public."AspNetRoles" (
    "Id" character varying(450) NOT NULL, 
    "ConcurrencyStamp" text, 
    "Name" character varying(256), 
    "NormalizedName" character varying(256), 
    CONSTRAINT pk_identityrole PRIMARY KEY ("Id") 
); 

CREATE TABLE public."AspNetUsers" (
    "Id" character varying(450) NOT NULL, 
    "AccessFailedCount" integer NOT NULL, 
    "ConcurrencyStamp" text, 
    "Email" character varying(256), 
    "EmailConfirmed" boolean NOT NULL, 
    "LockoutEnabled" boolean NOT NULL, 
    "LockoutEnd" timestamp without time zone, 
    "NormalizedEmail" character varying(256), 
    "NormalizedUserName" character varying(256), 
    "PasswordHash" text, 
    "PhoneNumber" text, 
    "PhoneNumberConfirmed" boolean NOT NULL, 
    "SecurityStamp" text, 
    "TwoFactorEnabled" boolean NOT NULL, 
    "UserName" character varying(256), 
    CONSTRAINT pk_applicationuser PRIMARY KEY ("Id") 
); 

CREATE TABLE public."AspNetRoleClaims" (
    "Id" serial NOT NULL, 
    "ClaimType" text, 
    "ClaimValue" text, 
    "RoleId" character varying(450), 
    CONSTRAINT pk_identityroleclaim PRIMARY KEY ("Id"), 
    CONSTRAINT fk_identityroleclaim_identityrole_roleid FOREIGN KEY ("RoleId") 
     REFERENCES public."AspNetRoles" ("Id") MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
); 

CREATE TABLE public."AspNetUserClaims" (
    "Id" serial NOT NULL, 
    "ClaimType" text, 
    "ClaimValue" text, 
    "UserId" character varying(450), 
    CONSTRAINT pk_identityuserclaim PRIMARY KEY ("Id"), 
    CONSTRAINT fk_identityuserclaim_applicationuser_userid FOREIGN KEY ("UserId") 
     REFERENCES public."AspNetUsers" ("Id") MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
); 

CREATE TABLE public."AspNetUserLogins" (
    "LoginProvider" character varying(450) NOT NULL, 
    "ProviderKey" character varying(450) NOT NULL, 
    "ProviderDisplayName" text, 
    "UserId" character varying(450), 
    CONSTRAINT pk_identityuserlogin PRIMARY KEY ("LoginProvider", "ProviderKey"), 
    CONSTRAINT fk_identityuserlogin_applicationuser_userid FOREIGN KEY ("UserId") 
     REFERENCES public."AspNetUsers" ("Id") MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
); 

CREATE TABLE public."AspNetUserRoles" (
    "UserId" character varying(450) NOT NULL, 
    "RoleId" character varying(450) NOT NULL, 
    CONSTRAINT pk_identityuserrole PRIMARY KEY ("UserId", "RoleId"), 
    CONSTRAINT fk_identityuserrole_applicationuser_userid FOREIGN KEY ("UserId") 
     REFERENCES public."AspNetUsers" ("Id") MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT fk_identityuserrole_identityrole_roleid FOREIGN KEY ("RoleId") 
     REFERENCES public."AspNetRoles" ("Id") MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
); 
+0

スクリプトのおかげで、私は...それはSqlServerのプロバイダに起こるようにテーブルが自動的に作成されるべきだと思う – v1n1akabozo

+0

しかし、それはどのように私が作成し、それを強制しないしないのですか? –

+0

EFが自動的にDBを作成したいのですか?ときには、自動移転を使用するのは(少なくとも私にとって)不快なこともありますが、必要に応じて対応することができます。 SqlServerでそれを行う方法についてはたくさんの情報がありますが、Postgresでは特定のプロバイダを追加する必要があります。 Postgresは大文字と小文字を区別し、プロパティ 'SomeProp'では' 'SomeProperty''(引用符付き)をsqlクエリに書く必要があることに注意してください。 – user3272018

関連する問題