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. 关于oracle sql语句查询时表名和字段名要加双引号的问题详解

    转自:http://www.2cto.com/database/201504/387184.html 作为oracle的初学者相信大家一定会遇到这个问题,如图: 明明就是navicat可视化创建了表, ...

  2. LODOP整页缩放,宽度、高度溢出缩放

    LODOP中,超文本超过打印项高度会自动分页,可以用语句进行缩放,让打印内容都在一页中.例如,整页缩放和高度溢出缩放.如下是三个语句及其效果,注意对内容缩放可能会导致变形哦,毕竟是不等比例缩放:LOD ...

  3. TP5.x——多数据库连接查询

    前言 需要到不同的数据库获取不同的表,看了下文档发现有这类方法,就记录下 文档 https://www.kancloud.cn/manual/thinkphp5_1/353998 步骤 配置文件 re ...

  4. P4610 [COCI2011-2012#7] KAMPANJA

    题目背景 临近选举,总统要在城市1和城市2举行演讲.他乘汽车完成巡回演讲,从1出发,途中要经过城市2,最后必须回到城市1.特勤局对总统要经过的所有城市监控.为了使得费用最小,必须使得监控的城市最少.求 ...

  5. Python3 与 C# 并发编程之~ 协程篇

      3.协程篇¶ 去年微信公众号就陆陆续续发布了,我一直以为博客也汇总同步了,这几天有朋友说一直没找到,遂发现,的确是漏了,所以补上一篇 在线预览:https://github.lesschina.c ...

  6. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一:建立MAVEN Web项目

    一:创建maven web项目er

  7. pthread_cond_wait学习笔记

    pthread_cond_wait学习笔记 近期学习了线程等待和激活的相关知识. 先介绍几个api: pthread_cond_t表示多线程的条件变量,用于控制线程等待和就绪的条件. 一:条件变量的初 ...

  8. redis源码解析(1):redisObject对象说明

    Redis在实现键值对数据库时,并没有直接使用数据结构,而是基于已有的数据结构创建了一个对象系统,每种对象至少包含一种数据结构. redis3.0 中对象结构: typedef struct redi ...

  9. 速查mysql数据大小

    速查mysql数据大小 # 1.查看所有数据库大小 mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data ...

  10. js值类型转换(boolean/String/number),js运算符,if条件,循环结构,函数,三种弹出框

    js值类型转换 number | string | boolean boolean类型转换 num = 0; var b1 = Boolean(num); console.log(b1) 转化为数字类 ...