質問: ASP.NET MVC 4プロジェクト内でEntity Frameworkの既定の依存関係を削除し、 Dapperなどの別の類似のテクノロジで置き換える方法はありますか
回答: 新しいASP.NET MVC 4 Webアプリケーションを作成し、プロジェクトテンプレートとして「インターネットアプリケーション」を選択すると、Entity Frameworkが参照され、SimpleMembershipの一部として使用されます。ただし、Entity Frameworkへの依存度はごくわずかであり、おそらくそれを削除する価値はありません。 **Entity Frameworkはわずか2つの小さなタスクで使用されるようです** Entity Frameworkを使用する最初の方法は、メンバーシップデータを格納するために必要なデータベーススキーマを作成することです。データベーススキーマの作成は、Dapperが行うことではなく、Entity Frameworkを削除すると、メンバーシップモデル/データベースの変更を手動で管理する必要があります。 Entity Frameworkが使用される第2の方法は、OAuth統合の一環として、デフォルトの "AccountController"内の "ExternalLoginConfirmation"という名前の単一のメソッド内にあります。外部プロバイダ(Facebookなど)から認証された新規ユーザを登録するために使用されます。 SimpleMembershipがEntity FrameworkではなくSQLコマンドを使用すると言うことができます[1]。 SimpleMembershipはEntity FrameworkではなくSQLコマンドを使用するため、このタスクに対応するDapperソリューションと同じくらい速くなければなりません。さらに、SimpleMembershipのこの構成は、マイクロソフトとコミュニティによって広範にテストされています。そのような理由から、私はそれを残しておきます。セキュリティを扱うコードは、認定されたセキュリティ専門家に委ねられるべきである[2]。 **Entity Frameworkを新しいASP.NET MVC 4 Webアプリケーションから削除する方法** あなたが本当にしたいのであれば、依存関係は非常に簡単に削除できます(あなたのメンバーシップデータベースが既に作成され、動作していると仮定しています)。 =====> **ステップ1** Visual Studioのソリューションエクスプローラで、 "References"フォルダを開きます。 「EntityFramework」を右クリックし、「削除」を選択します。 =====> **ステップ2** *フィルタを*開く*/ InitializeSimpleMembershipAttribute.cs* 以下を削除してください: ``` using System.Data.Entity.Infrastructure; ``` そして ``` Database.SetInitializer( null ); ``` そして ``` using ( var context = new UsersContext() ) { if ( !context.Database.Exists() ) { // Create the SimpleMembership database without Entity Framework migration schema ( ( IObjectContextAdapter ) context ).ObjectContext.CreateDatabase(); } } ``` =====> **ステップ3** 開く: *モデル/ AccountModels.cs* 以下を削除してください: ``` public class UsersContext : DbContext { public UsersContext() : base( "DefaultConnection" ) { } public DbSet UserProfiles { get; set; } } ``` =====> **ステップ4** 開く: *Controllers / AccountController.cs* "ExternalLoginConfirmation"という名前のメソッドを探します。 次のものを交換してください: ``` using ( UsersContext db = new UsersContext() ) { UserProfile user = db.UserProfiles.FirstOrDefault( u => u.UserName.ToLower() == model.UserName.ToLower() ); // Check if user already exists if ( user == null ) { // Insert name into the profile table db.UserProfiles.Add( new UserProfile { UserName = model.UserName } ); db.SaveChanges(); ``` あなたの同等のコードでは、コードコメントは何を実装する必要があるかを示します。 OAuthを使用していない場合は、この方法と他の方法をすべて削除する必要があります。 Et Voila;) > [1] "すべてがストアドプロシージャ、ビュー、エージェント、および変更通知を必要とするのではなく、SQL呼び出しとして実装されています。 > Jon Galloway、Microsoft > > [2] "私はあなた自身の暗号アルゴリズムとセキュリティシステムを動かすことについて私が標準的に注意していることはありますか?そうではありません。セキュリティの誤った感覚は、全くセキュリティシステムがない場合よりも悪いです! > Eric Lippert、伝説 > >