C# MVC3 Razor Entity Framework & LINQ Custom Membership Provider with Custom Role Provider
This C# project demonstrates how to create an MVC3 Razor Entity Framework & LINQ Custom Membership Provider with Custom Role Provider. Perhaps you are working with a legacy database or you prefer working with a database that uses numeric identity keys instead of Guids. The example UserProfile table in this project uses an integer UserId as the primary key and various other fields that aren't in the default ASP.NET User table. Use the Log On Link in the project and the Register link to create your own account.
Source Code is here for
ShiningStarMVC3WebApplication.zip
The SSS.ShiningStarModel contains the Entity data model. It
has been setup to use the
ADO.NET Poco Entity Generator
by right-clicking the model surface and selecting "Add Code
Generation Item." I use this because
it supports
Compiled Queries, which you may wish to use in the future.
The SSS.MemberProviders project contains our
SSSMembershipProvider and SSSRoleProvider classes. This will
replace the built-in providers. These allow you to use all
.NET functionality with your data model. These providers
utilize the Entity model and LINQ commands. Not all methods
are implemented in these providers, but the main methods
required for the LogOn, Register, and ChangePassword are.
The defaultProviders must be setup in the web.config:
<membership
defaultProvider="SSS.MemberProviders.Providers.SSSMembershipProvider">
<providers>
<clear/>
<add
name="SSS.MemberProviders.Providers.SSSMembershipProvider"
type="SSS.MemberProviders.Providers.SSSMembershipProvider"
connectionStringName="ApplicationServices"
enablePasswordRetrieval="false" enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
description="Entity Framework MVC3 Custom Membership
Provider by
Nannette Thacker http://www.shiningstar.net Shining Star
Services LLC"
writeExceptionsToEventLog="false"
applicationName="/" />
</providers>
</membership>
Also add the role provider to the web.config
<roleManager
defaultProvider="SSS.MemberProviders.Providers.SSSRoleProvider">
<providers>
<clear/>
<add
name="SSS.MemberProviders.Providers.SSSRoleProvider"
type="SSS.MemberProviders.Providers.SSSRoleProvider"
connectionStringName="ApplicationServices"
applicationName="/" />
<!--<add name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="ApplicationServices"
applicationName="/" />-->
<add name="AspNetWindowsTokenRoleProvider"
type="System.Web.Security.WindowsTokenRoleProvider"
applicationName="/" />
</providers>
</roleManager>
The ShiningStarMVC3Website was created from the MVC3 Razor
template. The Account LogOn, Register, and ChangePassword
views are according to code generation. The AccountModels.cs
is also according to code generation.
A ShiningStarMVC2012_2.sql file is included to generate the
demo database and example records for the list values. Be
sure to search for 00.00.00.00 and update the IP address in
the Web.config and App.Config files to your database IP
address.
Please check the References. When a project requires the
EntityFramework reference, right click the Reference
directory, select Manage NuGet Packages. Do an online search
for EntityFramework and click to install it.
The ListSet and ListValue tables contain data that is used
to populate comboboxes and lists. In our situation, it
contains the possible User Roles. The SSS.GlobalListValues
project contains Enumerations from the ListSet and ListValue
tables so you can work with the values programmatically.
The SSS.GlobalUtilities project contains a CryptoProvider
for hashing the password. In the Web.config, setup a Salt
value for your database: <add key="SaltValue"
value="*!ShiningStar!*" />. This will work fine for a new
database, but if you are trying to connect to a legacy
database you will need to incorporate your current method of
password hashing / encrypting, etc.
I've also included Menu tables for future development. I may
add more screens for CRUD operations on the List and Menu
tables in the future. The current project does not support
those however.
[SIGNATURE]