• 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

  • 相关阅读:
    站立会议11(冲刺二)
    站立会议10(冲刺二)
    站立会议09(冲刺二)
    站立会议08(冲刺二)
    每日站立会议(一)
    四则运算--单元测试
    四则运算安卓版
    返回二维数组最大联通子数组的和
    团队项目成员和题目
    第五周学习进度
  • 原文地址:https://www.cnblogs.com/zhaow/p/9754012.html
Copyright © 2020-2023  润新知