質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

3756閲覧

ssl通信を用いたASP.Net Coreでのスキャフォールディングでエラーが発生する

Shika_

総合スコア2

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2020/12/30 03:37

Heroku PostgresからASP.NET Coreのスキャフォールディングを実行しモデルクラスを生成したいです。

上記を行うために下記のシェルを作成し実行しましたが、
Heroku Postgresがssh通信のみを許可しているためsslmodeの設定を追加したところエラーが発生しました。

dotnet ef dbcontext scaffold "Server=[サーバー名];Port=5432;Database=[DB名];Username=[ユーザ名];Password=[パスワード];sslmode=require" \ Npgsql.EntityFrameworkCore.PostgreSQL \ --project ${PWD}/entity/mycocktails.library.entity/mycocktails.library.entity.csproj --context-dir ${PWD}/entity/mycocktails.library.entity/Models \ --output-dir ${PWD}/entity/mycocktails.library.entity/Models \ --context CocktailsDBContext

発生しているエラー

System.ArgumentException: Couldn't set sslmode (Parameter 'sslmode') ---> System.ArgumentException: Requested value 'require' was not found. at System.Enum.TryParseByName(RuntimeType enumType, String originalValueString, ReadOnlySpan`1 value, Boolean ignoreCase, Boolean throwOnFailure, UInt64& result) at System.Enum.TryParseInt32Enum(RuntimeType enumType, String originalValueString, ReadOnlySpan`1 value, Int32 minInclusive, Int32 maxInclusive, Boolean ignoreCase, Boolean throwOnFailure, TypeCode type, Int32& result) at System.Enum.TryParse(Type enumType, String value, Boolean ignoreCase, Boolean throwOnFailure, Object& result) at System.Enum.Parse(Type enumType, String value) at Npgsql.NpgsqlConnectionStringBuilder.set_Item(String keyword, Object value) --- End of inner exception stack trace ---

試したこと

  • sslmodeはrequire以外も試しましたがどれも同じエラーとなりました。
  • 別で立てているローカルのpostgresのDBからスキャフォールディングを行うことはできているのでssl周辺のエラーであることは間違い無いです。

以下使用バージョンです。

Heroku Postgres:12.5
Microsoft.EntityFrameworkCore.Design:5.0.1
Npgsql.EntityFrameworkCore.PostgreSQL:5.0.1

解決法等ご存知の方がおられましたら、ご助力のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/30 08:10 編集

Scaffold-DbContext EF Core パッケージマネージャーコンソール (PMC) ツールのコマンドを使っても同じですか? 同じ結果になるような気がしますが物は試しということで。 上記がどういうものか不明でしたら以下の記事を見てください。 http://surferonwww.info/BlogEngine/post/2020/03/16/create-controller-and-view-in-aspnet-core-mvc-using-scaffolding.aspx リバースエンジニアリング云々以前に、質問に書いてある接続文字列では接続できないことがそもそもの原因のような気がしますが、そのあたりは確認されているのでしょうか?
Shika_

2020/12/31 05:19 編集

ご回答ありがとうございます。PMCで試してみましたが結果は同じでした。 別DBを対象にsslmodeを抜いた ``` "Server=[サーバー名];Port=5432;Database=[DB名];Username=[ユーザ名];Password=[パスワード];" ``` で実行に成功しているのと、他のDBクライアントでは対象HerokuPostgresに接続ができているので、接続文字列は正しいと思っています。 Npgsql.EntityFrameworkCore.PostgreSQLのバージョンの問題なんでしょうか。。。?
退会済みユーザー

退会済みユーザー

2020/12/30 22:35 編集

> 別DBを対象にsslmodeを抜いた >"Server=[サーバー名];Port=5432;Database=[DB名];Username=[ユーザ名];Password=[パスワード];sslmode=require" 抜いてないように見えますけど??? 今問題になっている環境から質問に書いてある接続文字列の通り sslmode=require を入れて接続できるのでしょうか? できたとするとどのようにして試したのでしょうか? > Npgsql.EntityFrameworkCore.PostgreSQLのバージョンの問題なんでしょうか。。。? それは分かりません。その辺りを切り分けるためにも単純に ADO.NET + Npgsql だけで接続してみてはいかがですか。
guest

回答1

0

ベストアンサー

質問のコメント欄に書きました、

リバースエンジニアリング云々以前に、質問に書いてある接続文字列では接続できないことがそもそもの原因のような気がしますが、そのあたりは確認されているのでしょうか?

・・・ですが、エラーメッセージでググって調べた限りですが、その可能性が高そうに思えます。

以下の記事に "Below are the connection string parameters which Npgsql understands." と Npgsql 用の接続文字列と明記してあり、その Security and Encryption のセクションを見ると SSL Mode=Require とするとのことです。

Connection String Parameters
https://www.npgsql.org/doc/connection-string-parameters.html#security-and-encryption

また、以下の記事の Npgsql のセクションの SSL activated の接続文字列のサンプルを見ると SSL=true;SslMode=Require; とするとのことです。

PostgreSQL connection strings
https://www.connectionstrings.com/postgresql/

どっちが本当か分かりませんが、質問に書いてあった sslmode=require ではないようで、後者の記事によるとそれは PostgreSQL ODBC Driver (psqlODBC) 用のようです。

これも質問のコメントに書きましたが、問題を切り分けるためにも単純に ADO.NET + Npgsql だけで、質問に書いてあった接続文字列での接続を試してみてはいかがですか。

リバースエンジニアリング云々以前の接続文字列の問題ならそれで問題が再現されるはずです。

同じ問題が出たら上に紹介した記事を参考に接続文字列を変更して試してみては? それで接続できれば、その接続文字列を使ってリバースエンジニアリングすれば目的は果たせるのではないかと思います。

投稿2020/12/31 00:56

編集2020/12/31 01:04
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Shika_

2020/12/31 06:19

ご回答ありがとうございます。 ADO.NET + Npgsqlでも同じエラーが再現しました。 SurferOnWwwさんのおっしゃる通り、リバースエンジニアリング云々以前に、質問に書いてある接続文字列では接続できないことがそもそもの原因でした。 SslMode=Requireのみ追記載したところエラーが変わりException while performing SSL handshakeによるものに変化したため起きていた問題は解決したものと思われます。 いまだにエラーが出ていますが、エラーが変わったのでもう少し自分で調べようと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問