6

ASP.NET MVC 4 プロジェクト内の Entity Framework への既定の依存関係を削除し、Dapperなどの別の同様のテクノロジに置き換える方法はありますか

4

1 に答える 1

13

新しい 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 のこの構成は、Microsoft およびコミュニティによって広範にテストされています。それらの理由から、私はそれを放っておくでしょう。セキュリティを扱うコードは、認定されたセキュリティの専門家に任せるべきです [2]。

新しい ASP.NET MVC 4 Web アプリケーションから Entity Framework を削除する方法

本当に必要な場合は、依存関係を簡単に削除できます (メンバーシップ データベースが既に作成され、機能していると想定しています)。

=====>ステップ 1

Visual Studio のソリューション エクスプローラーで、"References" フォルダーを開きます。

「EntityFramework」を右クリックし、「削除」を選択します。

=====>ステップ 2

Filters/InitializeSimpleMembershipAttribute.cs を開く

以下を削除します。

using System.Data.Entity.Infrastructure;

Database.SetInitializer<UsersContext>( null );

using ( var context = new UsersContext() ) {
    if ( !context.Database.Exists() ) {
        // Create the SimpleMembership database without Entity Framework migration schema
        ( ( IObjectContextAdapter ) context ).ObjectContext.CreateDatabase();
    }
}

=====>ステップ 3

開く: Models/AccountModels.cs

以下を削除します。

public class UsersContext : DbContext {
    public UsersContext()
        : base( "DefaultConnection" ) {
    }

    public DbSet<UserProfile> 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();

あなたのdapperと同等のコードを使用すると、コードコメントは実装する必要があるものを教えてくれます。

OAuth を使用していない場合は、このメソッドと他のメソッドを完全に削除できるはずです。

出来上がり;)

[1] 「ストアド プロシージャ、ビュー、エージェント、および変更通知を必要とするのではなく、すべてが SQL 呼び出しとして実装されています。」
ジョン・ギャロウェイ、マイクロソフト

[2] 「独自の暗号化アルゴリズムとセキュリティ システムを導入する際の私の標準的な注意事項をすべて説明させてください。そうしないでください。セキュリティ システムは非常に簡単に作成できますが、ほとんど安全ではありませんが、完全には安全ではありません。誤った安心感は、セキュリティ システムがまったくないよりも悪いことです。」
エリック・リッパート、レジェンド

于 2013-03-29T22:29:40.250 に答える