ExecuteSqlCommand与SqlQuery

在数据上下文DBModel的实例中有个Database属性,其中有两组方法.ExecuteSqlCommand()和.SqlQuery()。它们都可以执行SQL语句,只不过.ExecuteSqlCommand()是不返回结果的,只返回受影响的行数,所以.ExecuteSqlCommand()更适合执行创建、更新、删除操作。.SqlQuery()则会返回查询到的结果,并将结果保存在数据实体中,所以更适合执行查询操作。

一:使用EF生产的类,其中test表中UserId与user中id是主外键关系

    public partial class test
{
public int Id { get; set; }
public int Num { get; set; }
public Nullable<int> UserId { get; set; }
public virtual user user { get; set; }
} public partial class user
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public user()
{
this.test = new HashSet<test>();
} public int Id { get; set; }
public string UserName { get; set; }
public Nullable<int> Age { get; set; }
public byte[] Image { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<test> test { get; set; }
} public partial class user_address
{
public int Id { get; set; }
public int UserId { get; set; }
public string Address { get; set; }
}

二:添加数据

 方法一:    using (ef_testEntities ef = new ef_testEntities())
{
user u = new user();
u.Age = ;
u.UserName = "小花-11";
u.test = new List<test>()
{
new test() { Num = ,user = u}
};
ef.user.Add(u);
ef.SaveChanges();
}
方法二:     using (ef_testEntities ef = new ef_testEntities())
{ MySqlParameter[] paramers = { new MySqlParameter { ParameterName = "@userid", Value = }, new MySqlParameter { ParameterName = "@address", Value = "杭州" } };
MySqlParameter[] paramers = { new MySqlParameter("@userid", ), new MySqlParameter("@address", "beijing") };
ef.Database.ExecuteSqlCommand("INSERT into user_address (UserId,Address)VALUES(@userid,@address);", paramers);
}
                //执行存储过程
方法三: using (var cmd = ef.Database.Connection.CreateCommand())
{
MySqlParameter[] paramers = { new MySqlParameter { ParameterName = "@puserId", Value = }, new MySqlParameter { ParameterName = "@paddress", Value = "qinghua" } };
cmd.CommandText = "address_add";//存储过程名
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(paramers);
if (cmd.Connection.State != ConnectionState.Open) cmd.Connection.Open();
cmd.ExecuteNonQuery();
}

三:修改数据

方法一:    using (ef_testEntities ef = new ef_testEntities())
{
var entity = (from d in ef.user where d.Id == select d).Single();
var tmodel = new test();
tmodel.user = entity;
tmodel.Num = ;
tmodel.UserId = entity.Id;
entity.test.Add(tmodel);//添加一条外键数据
ef.SaveChanges();
}
方法二:       using (ef_testEntities ef = new ef_testEntities())
{
var entity = ef.user.FirstOrDefault(a => a.Id == );
entity.UserName = "mysql数据库";//修改字段数据
ef.SaveChanges();
}
.为避免先查询数据库,可以直接将 被修改的实体对象 添加到 EF中管理(此时为附加状态Attached),并手动设置其为未修改状态(Unchanged),
同时设置被修改的实体对象的包装类对象 对应属性为修改状态。 方法三: using (ef_testEntities ef = new ef_testEntities())
{
user us = new user();
us.Id = ;
us.UserName = "中文简体";
us.Age = ;
ef.Entry<user>(us).State = EntityState.Modified;
ef.SaveChanges();
}
方法四:    using (ef_testEntities ef = new ef_testEntities())
{
MySqlParameter[] paramers = { new MySqlParameter { ParameterName = "@userid", Value = },
new MySqlParameter { ParameterName = "@id", Value = }, new MySqlParameter { ParameterName = "@address", Value = "铜牛文化产业园" } };
ef.Database.ExecuteSqlCommand("UPDATE user_address SET UserId=@userid,Address=@address where id=@id;", paramers);
}

四:删除数据

方法一: using (ef_testEntities ef = new ef_testEntities())
{
user_address us = new user_address();
us.Id = ;
ef.Entry<user_address>(us).State = EntityState.Deleted;//通知上下文这条数据被修改了
ef.SaveChanges();
}
方法二:  using (ef_testEntities ef = new ef_testEntities())
{
var pp = ef.user.FirstOrDefault(a => a.Id == );
ef.user.Remove(pp);
ef.SaveChanges();
}
方法三   using (ef_testEntities ef = new ef_testEntities())
{
ef.Database.ExecuteSqlCommand("delete from user_address where id=11; "); }

五:查询数据

       ef_testEntities ef = new ef_testEntities();
//1、查询一条数据
var entity = ef.user.FirstOrDefault(a => a.Id == );
var tests = entity?.test; //2.查询一条数据
var model = ef.Database.SqlQuery<user>("select * from user where id=37").FirstOrDefault();
      var testModel = model?.test; //3、关联表查询[从表数据可以有多条]
      var model1 = (from d in ef.user where d.Id == 37 select d).Single();
      ef.Entry(model1).Collection(a => a.test).Load();
      foreach (var item in ef.test.Local)
      {
          Console.WriteLine(item.Id + "&" + item.Num + "*" + item.UserId);
      } //4.分页查询
       var list = ef.user.OrderBy(a => a.Id).Skip(2).Take(3).ToList();

EF的使用<三>的更多相关文章

  1. %E3%80%90%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E3%80%91

    "%3Cdiv%20class%3D%22htmledit_views%22%20id%3D%22content_views%22%3E%0A%20%20%20%20%20%20%20%20 ...

  2. 你必须知道的EF知识和经验

    注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...

  3. 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)

    前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...

  4. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

  5. EntityFramework之DetectChanges's Secrets(三)(我为EF正名)

    前言 对于应用程序开发者来说,通常不需要考虑太多对于Entity Framework中的变更追踪(change tracking),但是变更追踪和DetectChanges方法是栈的一部分,在这其中, ...

  6. ASP.NET从零开始学习EF的增删改查

           ASP.NET从零开始学习EF的增删改查           最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...

  7. 使用EF CodeFirst 创建数据库

    EntityFramework 在VS2015添加新建项时,选择数据->ADO.NET 实体数据模型,有一下选项 来自数据库的EF设计器,这个就是我们最常用的EntityFramework设计模 ...

  8. EF上下文对象线程内唯一性与优化

    在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,这也加是很多人的代码中习惯在使用上下文对象时,习惯将对象建立在using中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...

  9. EF里Guid类型数据的自增长、时间戳和复杂类型的用法

    通过前两章Lodging和Destination类的演示,大家肯定基本了解Code First是怎么玩的了,本章继续演示一些很实用的东西.文章的开头提示下:提供的demo为了后面演示效果,前面代码有些 ...

  10. 模仿EF,我们用JS开发的HTML5 SQLite 访问库

    今天终于有空把demo放到了RunJS上面去.请使用google chrome观看在线演示: http://sandbox.runjs.cn/show/pekbd9zb 这个库本来是我们开发的phon ...

随机推荐

  1. c语言第三次课

    一.const的使用1)const声明变量为只读 ; a = ; //error ] = "abcdef"; const char *p = buf; char const *p ...

  2. IE 11 flex布局兼容性问题 ---- 不支持min-height 和flex:1

    由于最近项目要嵌入其它平台,所以要做IE11 的兼容,那就用IE11打开网页看一看,一看吓一跳,页脚直接到了页眉的下面,并把主要内容覆盖了,也就是stick footer 布局失效了,我写了一个简易的 ...

  3. Zookeeper 启蒙

    2018-12-14 关键词: Zookeeper入门介绍 . Zookeeper是什么.Zookeeper架构解析.Zookeeper应用场景.Zookeeper有什么用 本篇文章系笔者依据当前所掌 ...

  4. python学习day10 函数Ⅱ(参数&作用域)

    函数Ⅱ(参数&作用域) 知识小结: py2与py3的区别 逻辑运算()>not>and>or 字符串翻转切片翻转 is与==区别 git相关 数据类型判断 操作系统:cent ...

  5. c 判断文件或文件夹是否存在,多种方法, 为什么从一开始就不直接来个统一的呢?

    具体内容,请看: https://blog.csdn.net/u012494876/article/details/51204615 判断文件或文件夹是否存在,竟然有这么多方法: GetFileAtt ...

  6. CMDB服务器管理系统【s5day92】:服务器管理回顾

    一.服务器管理回顾 1.requests 发送: requests.post(url='',data=,json=) requests.get() Django接受: request.POST, co ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树+LCA)

    https://nanti.jisuanke.com/t/31462 题意 一个N*M的矩形,每个格点到其邻近点的边有其权值,需要构建出一个迷宫,使得构建迷宫的边权之和最小,之后Q次查询,每次给出两点 ...

  8. HDU 1584(蜘蛛牌 DFS)

    题意是在蜘蛛纸牌的背景下求 10 个数的最小移动距离. 在数组中存储 10 个数字各自的位置,用深搜回溯的方法求解. 代码如下: #include <bits/stdc++.h> usin ...

  9. 第四节:跨域请求的解决方案和WebApi特有的处理方式

    一. 简介 前言: 跨域问题发生在Javascript发起Ajax调用,其根本原因是因为浏览器对于这种请求,所给予的权限是较低的,通常只允许调用本域中的资源, 除非目标服务器明确地告知它允许跨域调用. ...

  10. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法

    一. 背景 上一个章节,介绍了EF调用两类SQL语句,主要是借助 ExecuteSqlCommand  和 SqlQuery 两个方法来完成,在本章节主要是复习几类存储过程的写法和对应的EF调用这几类 ...