6

有没有办法在 ASP.NET MVC 4 项目中删除对 Entity Framework 的默认依赖,并用另一种类似技术(如Dapper )替换它

4

1 回答 1

13

如果您创建一个新的 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

于 2013-03-29T22:29:40.250 回答