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

  • 相关阅读:
    ac与ap同步分析
    ipsec原理(转载)
    Sublime Text自定制代码片段(Code Snippets)
    IPsec分析/测试/
    jQuery 学习
    windows pip 安装 转载
    转载 pep8安装
    转载别人的ftp,觉得目录结构不错,学习
    博客园 CSS 代码定制
    AC自动机
  • 原文地址:https://www.cnblogs.com/zhaow/p/9754012.html
Copyright © 2011-2022 走看看