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. 【转】How to create a new user and grant permissions in MySQL

    MySQL is one of the most popular database management systems. In this tutorial we will cover the ste ...

  2. python配置文件的加载

    背景: 微信机器人项目用到了mysql数据库配置,阿里云OSS上传文件配置:现在需要将这些配置参数统一写到一个配置文件中统一管理,而不是分散的写在代码中 1. 使用.ini文件作为配置文件 例如: s ...

  3. MySQL报错: SQLSTATE[HY000]: General error: 1030 Got error 28 from storage engine

    执行命令:df -h [root@iZ25z6qcmrhZ ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/xvda1 40G 38G ...

  4. apache Storm 学习笔记

    Storm流之FieldGrouping字段分组: https://blog.csdn.net/Simon_09010817/article/details/80092080

  5. LOJ #2719. 「NOI2018」冒泡排序(组合数 + 树状数组)

    题意 给你一个长为 \(n\) 的排列 \(p\) ,问你有多少个等长的排列满足 字典序比 \(p\) 大 : 它进行冒泡排序所需要交换的次数可以取到下界,也就是令第 \(i\) 个数为 \(a_i\ ...

  6. 【洛谷P1313 计算系数】

    题目连接 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio&g ...

  7. 异步请求之ajax

    一.初识ajax 1.下载引入jQuery <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"& ...

  8. MS SQL Server 数据库连接字符串详解

    MS SQL Server 数据库连接字符串详解 原地址:http://blog.csdn.net/jhhja/article/details/6096565 问题 : 超时时间已到.在从池中获取连接 ...

  9. ArcMap修改粘滞移动容差防止要素在选择时无意拖动移动

    粘滞移动容差将设置一个最小像素数,鼠标指针必须在屏幕上移动了此最小距离时,所选要素才会实际发生移动. 设置粘滞移动容差的结果是延迟移动所选要素,直到指针至少移动了这段距离.此方法可用于在使用“编辑”工 ...

  10. express + restful

    express http://www.expressjs.com.cn/ Express 是一个基于 Node.js 平台的极简.灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 ...