有没有办法在 ASP.NET MVC 4 项目中删除对 Entity Framework 的默认依赖,并用另一种类似技术(如Dapper )替换它
1 回答
如果您创建一个新的 ASP.NET MVC 4 Web 应用程序并选择“Internet 应用程序”作为项目模板,您会注意到实体框架被引用并用作 SimpleMembership 的一部分。但是,对实体框架的依赖非常小,可能不值得删除它。
实体框架似乎仅用于 2 个小任务
使用实体框架的第一种方法是创建存储成员数据所需的数据库模式。Dapper 不会为您创建数据库模式,如果您删除实体框架,您将不得不手动管理对您的成员模型/数据库的更改。
第二种使用实体框架的方法是在默认“AccountController”中名为“ExternalLoginConfirmation”的单个方法中,作为其 OAuth 集成的一部分。它用于注册已从外部提供商(如 Facebook)认证的新用户。
我们可以说 SimpleMembership 使用 SQL 命令而不是实体框架 [1]。
因为 SimpleMembership 使用 SQL 命令而不是实体框架,所以它应该与用于此任务的可比较的 Dapper 解决方案一样快。此外,SimpleMembership 的这种配置已经过微软和社区的广泛测试。出于这些原因,我将不理会它。处理安全问题的代码应该留给经过认证的安全专家 [2]。
如何从新的 ASP.NET MVC 4 Web 应用程序中删除实体框架
如果你真的想要,这个依赖很容易移除(我假设你的会员数据库已经创建并且正在工作)。
=====>第 1 步
在 Visual Studio 解决方案资源管理器中打开“参考”文件夹。
右键单击“EntityFramework”并选择“删除”。
=====>第二步
打开过滤器/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();
}
}
=====>第三步
打开:模型/AccountModels.cs
删除以下内容:
public class UsersContext : DbContext {
public UsersContext()
: base( "DefaultConnection" ) {
}
public DbSet<UserProfile> UserProfiles {
get;
set;
}
}
=====>第四步
打开:控制器/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] "Let me give you all my standard caution about rolling your own cryptographic algorithms and security systems: don't. It is very, very easy to create security systems which are almost but not quite secure. A security system which gives you a false sense of security is worse than no security system at all!"
Eric Lippert, Legend