n層ソリューションでEntityFramework 6とEntityFramework Coreの両方を並列実装する

asp.net-core entity-framework-6 entity-framework-core

質問

ASP.NET CoreおよびEntity Framework 6の入門からの抜粋です:

ASP.NET Core 1.0アプリケーションでEntity Framework 6を​​使用するには、EF6コンテキストとモデルクラスをフルフレームワークを対象とするクラスライブラリプロジェクト(.csprojプロジェクトファイル)に配置することをお勧めします。 ASP.NET Coreプロジェクトから。

私の目標: EntityFramework 6とEntityFramework Coreの両方をn層ソリューションに並べて実装することです。

溶液:

  • 個々のユーザーアカウント認証を使用するASP.NETコアWebアプリケーション(.NET Framework)
  • BLLとDALを含むWindowsクラスライブラリ(.dll)

EF 6とEFコアを並行して実装する理由は次のとおりです。

  • EF Core 1.x実装の問題(移行、多対多関係)
  • ASP.NETコアの個々のユーザーアカウント認証は、Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContextに依存します。
  • このユースケースは、現在Entity Framework 6に依存するBreezeJSを実装します

次のように、ASP.NET Core Webアプリケーションに移行を正常に追加できます。

PM> EntityFrameworkCore\Add-Migration InitialCreate

ただし、Windowsクラスライブラリに移行を追加しようとすると例外が発生します。

PM> EntityFramework\Add-Migration InitialCreate

"2"引数を持つ "SetData"を呼び出す例外: "アセンブリ 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation、Version = 14.1に「Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject」と入力します。 0.0、Culture =ニュートラル、PublicKeyToken = b03f5f7f11d50a3a 'はシリアル化可能としてマークされていません。 C:\ Src \ Hcs.NetCore \ packages \ EntityFramework.6.1.3 \ tools \ EntityFramework.psm1:720 char:5 + $ domain.SetData( 'startUpProject'、$ startUpProject)...

ASP.NET Core Webアプリケーションをアンロードすると、次の手順でEF6の移行をWindowsクラスライブラリに正常に追加できます。

PM> EntityFramework\enable-migrations
PM> EntityFramework\add-migration InitialCreate

今私は両方のプロジェクトで初期移行をしています。

しかし、ASP.NET Core Webアプリケーションを実行すると、いくつかの実行時例外が発生します。

System.Data.Entity.DbContextのカスタム実装でパラメータのないコンストラクタがある場合、次のランタイム例外が発生します。

System.Data.SqlClient.SqlExceptionがユーザーコードによって処理されませんでした。
メッセージ= SQL Serverへの接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認します。 (プロバイダ:SQLネットワークインターフェイス、エラー:26 - 指定されたサーバー/インスタンスの指定エラー)â€|

それは既定のコンストラクタを削除することで修正されました。

ユーザーを登録しようとすると、次の例外がスローされました。

System.Data.SqlClient.SqlException(0x80131904):ログインで要求されたデータベース "xxx"を開くことができません。ログインに失敗しました。ユーザーyyy \ zzz 'のログインに失敗しました。 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity ID、SqlConnectionString connectionOptions、SqlCredential資格情報、Object providerInfo、String newPassword、SecureString newSecurePassword、Boolean redirectedUserInstance、SqlConnectionString userConnectionOptions、SessionData reconnectSessionData、DbConnectionPoolプール、String accessToken、Boolean applyTransientFaultHandling)

Q - 正しい軌道にいるのですか?これは単にSQL Server認証の問題ですか?または、他の問題が関与していますか?

受け入れられた回答

“Exception "2"引数例外を持つ "SetData"を呼び出す:â€

“Exception calling "SetData" with "2" argument(s) exception:â€は、次のコマンドで-StartupProjectまたは-StartupProjectNameパラメータを渡すことで解決できます。

パッケージマネージャコンソールで、デフォルトプロジェクトをEF6コンテキスト(私の場合はDna.Net.Application.DAL.EF6)を含むクラスライブラリに設定し、次のコマンドを実行します。

PM> EntityFramework\enable-migrations -StartupProject Dna.Net.App.DAL.EF6
PM> EntityFramework\add-migration InitialCreate -StartupProjectName Dna.Net.App.DAL.EF6

"System.Data.SqlClient.SqlException(0x80131904):ログインで要求されたデータベース" xxx "を開くことができません。ログインに失敗しました。

" “System.Data.SqlClient.SqlException (0x80131904): Cannot open database "xxx†requested by the login. The login failed.â€新しいユーザーを保存するときに[Apply Migrations]ボタンをクリックすると、実行することで、デザイン時のアカウント、 またはUpdate-Database次のように:

パッケージマネージャコンソールで、デフォルトプロジェクトをEF6コンテキストを含むクラスライブラリに設定し、次を実行します。

PM> EntityFramework\Update-Database -StartupProject Dna.Net.Application.DAL.EF6

パッケージマネージャコンソールで、デフォルトプロジェクトをEFコアコンテキストを含むクラスライブラリに設定し、次を実行します。

PM> EntityFrameworkCore\Update-Database

この時点で、サーバーエクスプローラまたはSQL Serverオブジェクトエクスプローラを使用してデータベースを検査できます。

Update-Databaseコマンドは、EFCoreおよびEF6コンテキスト用の一意のデータベースを作成しました。

このソリューションは、 ASP.NET CoreおよびEntity Framework 6入門の「サンプルアプリケーション」セクションに含まれるガイドラインに従いますが、次の例外があります。

  • IDbContextFactoryを実装する必要はありませんIDbContextFactory

これで、次のテストを正常に実行できます。

  • ASP.NET Core MVC個別ユーザーアカウントスキャフォールディングを介してユーザーを追加します。
  • (ASP.NET Core MVC scaffolded)HomeController.About()をカスタムSystem.Data.Entity.DbContext実装に永続化して取得するように変更します。
  • 永続化されたカスタムエンティティを表示するには、About.cshtmlを変更します。

人気のある回答

EF6コマンドは、ASP.NET Coreプロジェクトでの作業方法を知らない(記述時に存在しない)。おそらくEF6コマンドを実行する前にこれらのプロジェクトをアンロードする必要があります。

問題を回避するEF6プロジェクトとして明示的に-StartupProjectを指定することもできます。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ