有没有办法消除 MVC 4 中对实体框架的默认依赖?

2024-04-17

有没有办法删除 ASP.NET MVC 4 项目中对实体框架的默认依赖关系,并将其替换为其他类似的技术,例如Dapper https://code.google.com/p/dapper-dot-net/


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法消除 MVC 4 中对实体框架的默认依赖? 的相关文章

  • 根据 MVC 中的文化的日期时间格式

    我有一个 MVC 视图 其中列出了一个名为 CreatedOn 的日期时间类型列 值的格式如下 日 月 年 时 分 秒 当我单击编辑链接修改值时 我获得相同的格式 当我修改编辑值时 出现验证错误 字段 CreatedOn 必须是日期 我的
  • 实体框架 - 查询可为空列时出现问题

    我在从具有可为空的tinyint 列的表中查询数据时遇到问题 问题似乎是查询生成为 AND CAST Extent1 PositionEffect AS int p linq 3 gt p linq 3 NULL 如果我手动运行该查询 它不
  • Web API 的 ASP.NET MVC Core 控制器 PATCH 方法

    给定一个数据库表 Person 包含 3 列 Id 名字和姓氏 使用真实的 DbContext 时 ASP NET Core Web API MVC 控制器方法 PATCH 仅修改姓氏 看起来如何 我根本不知道如何实现它 并且找不到相关教程
  • 如何将字符串解析为 UNIQUEIDENTIFIER?

    我正在编写一个实体框架 LINQ 查询 其中我想将字符串解析为 UNIQUEIDENTIFIER 又名 GUID 作为WHERE clause public IEnumerable
  • 发布数据时维护 ViewBag 值

    我有一个逻辑问题需要回答 这是一个场景 在控制器中 ViewBag Name aaaa 在视野中 ViewBag Name 在我的控制器中 我为 ViewBag 设置了值 并从 VIew 中的 ViewBag 检索了值 现在在 View 中
  • EF6 Code First 支持表值函数吗?

    是否可以在 EF6 Code First 中调用 TVF 我首先使用 EF6 数据库启动了一个新项目 EF 能够将 TVF 导入到模型中并调用它就好了 但是 对于我一直在处理的没有 RI 的大型只读数据库 更新模型变得非常耗时并且存在问题
  • Automapper实体框架外键为空

    我正在尝试使用实体框架更新数据库 我使用自动映射器将实体映射到视图模型 并以相同的方式将其映射回来 HttpPost ValidateAntiForgeryToken public ActionResult Edit FromJson My
  • 将 dapper.net 的存储过程输出转换为列表

    我是 Dapper net 的新手 我正在尝试使用 Dapper Net 执行存储过程 我有一个模特班StoredProcedureResult 与存储过程的输出相关 public StoredProcedureResult public
  • 如何绕过 ASP.NET Web API 中发现多个操作的异常

    当试图找到以下问题的解决方案时 默认操作的 MVC Web Api 路由不起作用 https stackoverflow com questions 11724749 mvc web api route with default actio
  • 与 Entity Framework Core 2.0 的一对零关系

    我正在使用 C 和 NET Framework 4 7 将 Entity Framework 6 1 3 Code First 库迁移到 Entity Framework Core 我一直在用 Google 搜索 Entity Framew
  • 如何使用 linq 查询连接两个不同 edmx 中的两个表

    如何使用 linq 查询连接两个不同 edmx 中的两个表 有没有办法同时从 2 个不同的 edmx 进行查询 Thanks Update 根据您的评论 EF 无法解析跨 2 个不同上下文的组合表达式树 如果表中的记录总数相对较小 或者您可
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • Entity Framework 6(代码优先)实体版本控制和审计

    我正在考虑将 Entity Framework 6 1 1 与 SQL Server 2008 R2 一起使用 目前 我正在使用代码优先的 EF 功能创建模型和数据库 我的基本用例是创建一个特定实体的所有更改的日志 ID是关键栏 以帮助审核
  • 运行更新数据库时出错

    我在运行时遇到以下错误Update Database Verbose 使用启动项目 WebApplication 使用 NuGet 项目 Web应用程序 指定 Verbose 标志来查看 SQL 应用于目标数据库的语句 目标数据库是 星冰乐
  • 在同一项目中同时使用 AddDbContextFactory() 和 AddDbContext() 扩展方法

    我正在尝试使用新的DbContextFactory中讨论的模式EF Core 文档的 DbContext 配置部分 https learn microsoft com en us ef core dbcontext configuratio
  • 缺少 EF ObjectContext.SaveChanges

    我正在一个新项目中使用实体框架 我从一年前就开始使用 EF 今天 我尝试使用 Visual Studio 2008 SP1 和 2010 生成实体数据模型 它正在生成对象上下文属性和实体集 但尚未生成 SaveChanges 方法 我什至尝
  • 将 MVC 站点部署到 IIS 会导致找不到默认共享部分视图

    我有一个可以在本地 IIS 上完美运行的网站 我的所有页面都使用默认的共享部分视图 这称为预期 Layout cshtml 该视图放置在我的共享文件夹中 这可以在这里看到 正如我所期望的那样 这非常有效 不过 我现在发布了我的网站 然后 我
  • 如何处理 ASP.net MVC Ajax 加载页面上的 jQuery 事件?

    我有一个问题 我是 jQuery Mobile 领域的新手 对于 ASP Net MVC 部分我有点迷失 这是我的问题 在我的移动网站中 我想更改导航栏 我使用的更像是应用程序栏 按钮 而我位于编辑页面或主页等 因此 这些页面 编辑 显示
  • Entity Framework 6 多对多想要插入重复行

    不应该这么难 我准备放弃EF了 我的模型有周刊版本 每个版本可以有许多分类广告 每个分类可以出现在一个或多个版本中 我的模型 public class Classifieds Key DatabaseGenerated DatabaseGe

随机推荐