代码之家  ›  专栏  ›  技术社区  ›  Hrishikesh

实体框架核心或普通Sql命令对象

  •  3
  • Hrishikesh  · 技术社区  · 7 年前

    我必须在Asp.net核心中创建一个解决方案,并且必须使用基于存储过程的方法。那么应用程序使用实体框架核心是否可行呢? 因为数据是从存储过程返回的,而不是在实体核心中声明的对象

    2 回复  |  直到 7 年前
        1
  •  2
  •   Pranav Singh    7 年前

    了解需要什么是重要的。 实体框架和;使用普通的SQl命令,两者都有其优点;欺骗。

    基本要点是:

    1. 如果应用程序使用两个或多个数据库(如SQL server),则可以充当不同数据库的ORM;神谕。几乎可以使用相同的代码。此外,从一个db切换到另一个db也更容易。

    2. EF有代码优先和;db first,还维护连接;查询生成不太关心SQL注入&更快的变化

    3. 但是,如果您的团队有许多开发人员频繁提交EF更改,则很难合并EF的内部层代码冲突。

    SQL命令对象

    1. 由于在EF中生成的查询在运行时很难分析,因此对SQL的控制更大;优化索引,&执行计划。

    2. 需要注意sql注入、参数嗅探问题。

    3. 在大型开发团队协商完成数据库设计之前,代码合并没有任何问题。

    4. SQL命令对象更易于调试;由于您不需要更新整个EF文件,因此在维护中进行分析,而在更改中花费较少的精力;相关代码。

    拥有专业DBA和;大型数据库服务器选择SQL命令,小型敏捷团队选择全栈开发和强大中间件的团队通常选择EF。

    它们都适用于某些用例&它们都不是万能的。

        2
  •  4
  •   AmirNorouzpour    7 年前

    EF Core提供以下方法来执行存储过程:

    1. DbSet<TEntity>.FromSql()

    2. DbContext.Database.ExecuteSqlCommand()

      var data = context.DbSet<TEntity>.FromSql("SPName").ToList();

      var rowsAffected = context.Database.ExecuteSqlCommand("sql command");

    有关详细信息: entityframeworktutorial

    对于模型中不存在的use字段,可以在model中声明这些字段并使用 NotMapped 属性。 NotMapped Attribute

    流利地映射存储过程 看看这个 link