0

SQL クエリを監査した結果、最もコストのかかるクエリの一部が、関数が使用されている .net 認証フレームワークによって作成されていることに気付きましたLOWER(以下の例を参照)。

私たちのデータベースでは大文字と小文字が区別されないため、パフォーマンスが不必要に低下します。

これらのクエリを変更する最も簡単な方法を探しています。何らかのカスタム メンバーシップ プロバイダーを使用する必要があると思います。

SELECT TOP (1) 

1 AS [C1], 

[Extent1].[UserName] AS [UserName], 

[Extent1].[UserId] AS [UserId], 

[Extent2].[Email] AS [Email], 

[Extent2].[PasswordQuestion] AS [PasswordQuestion], 

[Extent2].[Comment] AS [Comment], 

[Extent2].[IsApproved] AS [IsApproved], 

[Extent2].[IsLockedOut] AS [IsLockedOut], 

[Extent2].[CreateDate] AS [CreateDate], 

[Extent2].[LastLoginDate] AS [LastLoginDate], 

[Extent1].[LastActivityDate] AS [LastActivityDate], 

[Extent2].[LastPasswordChangedDate] AS [LastPasswordChangedDate], 

[Extent2].[LastLockoutDate] AS [LastLockoutDate]

FROM   [dbo].[Users] AS [Extent1]

INNER JOIN [dbo].[Memberships] AS [Extent2] ON [Extent2].[UserId] = [Extent1].[UserId]

INNER JOIN [dbo].[Applications] AS [Extent3] ON [Extent3].[ApplicationId] = [Extent2].[ApplicationId]

WHERE ((LOWER([Extent3].[ApplicationName])) = @appName) AND ((LOWER([Extent1].[UserName])) 

= @userName)
4

1 に答える 1

1

単純かどうかはわかりませんが、ASP.NET MVC 4.0 の場合、IIdentify インターフェイスと IPrincipal インターフェイスを実装する独自のクラスを作成する必要があります。その後、web.config でそれらを参照します。これらのクラスでは、データを取得するために選択した手段 (つまり、カスタム クエリ、エンティティ フレームワークなど) を使用できます。

より完全なチュートリアルについては、この投稿を参照してください: https://codeutil.wordpress.com/2013/05/14/forms-authentication-in-asp-net-mvc-4/#mvc-implement-custom-IPrincipal-and- IIdentity

于 2015-12-13T08:41:09.377 に答える