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. 其他综合-fdisk一键分区操作-无需脚本

    fdisk一键操作分区-无需脚本(根据自己的实际环境操作) 为了让在系统里能够显示新添加的硬盘已知有两种操作方法 : 1.重启 2.输入echo "- - -" > /sys ...

  2. ubuntu only enable left click

    xmodmap -e "pointer = 1 0 0 0 0 0 0 0 0 0"

  3. html5 基础入门

    html5 基础入门 前言介绍 HTML5草案的前身名为 Web Applications 1.0,于2004年被WHATWG提出,于2007年被W3C接纳,并成立了新的 HTML工作团队. 如果从狭 ...

  4. H5下拉刷新和上拉加载实现原理浅析

    前言 在移动端H5网页中,下拉刷新和上拉加载更多数据的交互方式出现频率很高,开源社区也有很多类似的解决方案,如iscroll,pulltorefresh.js库等.下面是对这两种常见交互基本实现原理的 ...

  5. 【bfs】麻将游戏

    题目 来自:yinzm的blog 在一种"麻将"游戏中,游戏是在一个有W*H格子的矩形平板上进行的.每个格子可以放置一个麻将牌,也可以不放(如图所示).玩家的目标是将平板上的所有可 ...

  6. 计算机基础理论知识梳理篇(一):数据类型长度、内存页、IPC

    字长与数据类型长度 字长指CPU在同一时间能够处理二进制数据的位数,是由其外接数据总线(地址总线决定了CPU的寻址空间,如16位微型机的地址总线为20位,其可寻址空间为220 = 1MB)的条数决定的 ...

  7. 信号(1): signal

    1. 头文件#include <signal.h> 2. 功能设置某一信号的对应动作 3. 函数原型void (*signal(int signum,void(* handler)(int ...

  8. Dynamics CRM 日常使用JS整理(一)

    整理下平时CRM开发中用到的一些基本的js操作 取值: var oResult = Xrm.Page.getAttribute(sFieldName).getValue(); var oResult ...

  9. [物理学与PDEs]第1章第2节 预备知识 2.2 Ampere-Biot-Savart 定律, 静磁场的散度与旋度

    1. 电流密度, 电荷守恒定律 (1) 电荷的定向移动形成电流. (2) 电流密度 ${\bf j}$, 是描述导体内一点在某一时刻电流流动情况的物理量, 用单位时间内通过垂直于电流方向的单位面积的电 ...

  10. Flink学习(三)状态机制于容错机制,State与CheckPoint

    摘自Apache官网 一.State的基本概念 什么叫State?搜了一把叫做状态机制.可以用作以下用途.为了保证 at least once, exactly once,Flink引入了State和 ...