如果您创建一个新的 ASP.NET MVC 4 Web 应用程序并选择“Internet 应用程序”作为项目模板,您将注意到实体框架被引用并用作 SimpleMembership 的一部分。但是,对实体框架的依赖非常小,可能不值得删除它。
实体框架似乎仅用于 2 个小任务
使用实体框架的第一种方法是创建存储成员资格数据所需的数据库架构。 Dapper 不会为您创建数据库架构,如果您删除实体框架,您将必须手动管理对成员资格模型/数据库的更改。
使用实体框架的第二种方式是在默认“AccountController”内名为“ExternalLoginConfirmation”的单个方法中,作为其 OAuth 集成的一部分。它用于注册已通过外部提供商(如 Facebook)身份验证的新用户。
我们可以说 SimpleMembership 使用 SQL 命令而不是实体框架 [1]。
由于 SimpleMembership 使用 SQL 命令而不是实体框架,因此它应该与用于此任务的类似 Dapper 解决方案一样快。此外,SimpleMembership 的这种配置已经过 Microsoft 和社区的广泛测试。出于这些原因,我不会管它。涉及安全的代码应留给经过认证的安全专家 [2]。
如何从新的 ASP.NET MVC 4 Web 应用程序中删除实体框架
如果您确实愿意,那么依赖关系很容易删除(我假设您的会员数据库已经创建并正在运行)。
=====>Step 1
在 Visual Studio 解决方案资源管理器中打开“引用”文件夹。
右键单击“EntityFramework”并选择“删除”。
=====>Step 2
Open 过滤器/InitializeSimpleMembershipAttribute.cs
删除以下内容:
using System.Data.Entity.Infrastructure;
and
Database.SetInitializer<UsersContext>( null );
and
using ( var context = new UsersContext() ) {
if ( !context.Database.Exists() ) {
// Create the SimpleMembership database without Entity Framework migration schema
( ( IObjectContextAdapter ) context ).ObjectContext.CreateDatabase();
}
}
=====>Step 3
Open: 模型/AccountModels.cs
删除以下内容:
public class UsersContext : DbContext {
public UsersContext()
: base( "DefaultConnection" ) {
}
public DbSet<UserProfile> UserProfiles {
get;
set;
}
}
=====>Step 4
Open: 控制器/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,您应该能够完全删除此方法和其他方法。
瞧瞧;)
[1]“一切都以 SQL 调用的形式实现,而不需要存储过程、视图、代理和更改通知。”
乔恩·加洛韦,微软 http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx
[2]“让我对您使用自己的加密算法和安全系统提出我所有的标准警告:不要。创建几乎但不完全安全的安全系统非常非常容易。一个安全系统可以为您提供错误的安全感比没有安全系统更糟糕!”
埃里克·利珀特,传奇人物 http://blogs.msdn.com/b/ericlippert/archive/2005/01/28/you-want-salt-with-that-part-one-security-vs-obscurity.aspx