是否有一种方法可以消除MVC 4中对实体框架的默认依赖



是否有一种方法可以在ASP中删除对实体框架的默认依赖?NET MVC 4项目,并将其替换为另一种类似的技术,如Dapper

如果你创建一个新的ASP。NET MVC 4 Web应用程序,并选择"Internet应用程序";作为项目模板,你会注意到实体框架被引用并作为simplemember的一部分使用。然而,只有一个非常小的依赖实体框架,它可能不值得删除它。

实体框架似乎只用于2个次要任务

使用实体框架的第一种方式是创建存储成员数据所需的数据库模式。数据库模式创建不是Dapper会为你做的事情,如果你删除实体框架,你将不得不手动管理会员模型/数据库的更改。

使用实体框架的第二种方式是在一个名为"externalloginconfirmation"的方法中。在默认的"AccountController"作为OAuth集成的一部分。它用于注册已从外部提供者(如Facebook)进行身份验证的新用户。

我们可以说SimpleMembership使用SQL命令而不是Entity Framework[1]。

因为SimpleMembership使用SQL命令而不是实体框架,它应该和类似的Dapper解决方案一样快。此外,simplemember的这种配置已经被微软和社区广泛地测试过。基于这些原因,我不会去管它。处理安全的代码应该留给合格的安全专家[2]。

如何从新的ASP中删除实体框架。. NET MVC 4 Web应用

如果你真的想,依赖关系是很容易删除的(我假设你的成员数据库已经创建并工作)。

= = = = =比;步骤1

在Visual Studio解决方案资源管理器中打开"参考资料"。文件夹。

右键单击"EntityFramework"并选择"删除"。

= = = = =比;步骤2

打开过滤器/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();
    }
}

= = = = =比;步骤3

打开

: 模型/AccountModels.cs

删除以下内容:

public class UsersContext : DbContext {
    public UsersContext()
        : base( "DefaultConnection" ) {
    }
    public DbSet<UserProfile> UserProfiles {
        get;
        set;
    }
}

= = = = =比;步骤4

打开

: 控制器/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调用,而不需要存储过程、视图、代理和更改通知。"
Jon Galloway, Microsoft

[2] "让我给你我所有的标准警告关于滚动你自己的加密算法和安全系统:不要。创建安全系统是非常非常容易的,它几乎是安全的,但不是很安全。一个给你一种虚假安全感的安全系统比根本没有安全系统还要糟糕!
Eric Lippert, Legend

最新更新