zoukankan      html  css  js  c++  java
  • MVC4学习要点记四

    一、使用原生SQL
    使用EF的一个优点就是自动帮我们生成SQL,这在常规情况下很方便,但有些情况下用EF却不适合。
    另外还有些特别复杂的语句,利用EF很难生成。
    所以,EF提供一组方法用来执行原生的SQL。有以下三种:
    1.DbSet.SqlQuery
    2.Database.SqlQuery
    3.Database.ExecuteSqlCommand
    下面分别说明其用法。

    1、DbSet.SqlQuery
    DbSet.SqlQuery查询并返回Entities

    方框中的和注释掉的内容SysUser sysUser=db.SysUsers.Find(id)完全一样。

    2、Database.SqlQuery
    Database.SqlQuery 返回其他类型
    例如:
    string query = "select loginName from SysUser";
    var names=db.Database.SqlQuery<string>( query).ToList();

    以上会返回一个System.Collections.Generic.List<string>类型。
    这种方式和第一种情况最大的区别就是返回non-entity 类型。
    我们可以根据需要,自己构建需要的类型。

    我们也可以自定义一个entity type让它返回,例如类似我们上一个例子:
    SysUser sysUser = db. Database.SqlQuery(query, paras).SingleOrDefault();
    这样也可以返回entity, 但要注意,这种方式将不会被context track, 返回后就没关系了,如果我们在View中用类似于Model.XXX导航属性获取其他关联数据就会报错。例如@foreach (var item in Model.SysUserRoles),这种情况下会报Model为null的错误。

    3、Database.ExecuteSqlCommand
    最后一个是更新的,直接看示例就明白了:
    context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
    存储过程用法类似。

    二、原生SQL使用总结
    1、原生SQL执行查询:
    需要返回实体模型,使用DbSet.SqlQuery (context会跟踪,等效于LINQ方式)
    需要返回其他类型,使用Database.SqlQuery(context不会跟踪

    2、原生SQL执行更新:
    使用Database.ExecuteSqlCommand

    内容来源:
    http://www.cnblogs.com/kevin2013/p/5239190.html

  • 相关阅读:
    node 安装及环境配置
    vue 多级嵌套组件的通信方式
    uniapp 直播(推流)
    css3 弹出层居中(防止穿透滚动)
    uniapp App打开没有关掉后台,去查看其它东西一段时候回来后,页面会变空白
    uniapp 根据给定的经纬度、地址address,调取地图导航
    208道面试题,答案
    十分钟了解单元测试
    异常处理的一些见解
    MySQL(MariaDB)常用DOM命令
  • 原文地址:https://www.cnblogs.com/zhaow/p/9754012.html
Copyright © 2011-2022 走看看