EF的使用<三>
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的使用<三>的更多相关文章
- %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 ...
- 你必须知道的EF知识和经验
注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...
- 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)
前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...
- 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- EntityFramework之DetectChanges's Secrets(三)(我为EF正名)
前言 对于应用程序开发者来说,通常不需要考虑太多对于Entity Framework中的变更追踪(change tracking),但是变更追踪和DetectChanges方法是栈的一部分,在这其中, ...
- ASP.NET从零开始学习EF的增删改查
ASP.NET从零开始学习EF的增删改查 最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...
- 使用EF CodeFirst 创建数据库
EntityFramework 在VS2015添加新建项时,选择数据->ADO.NET 实体数据模型,有一下选项 来自数据库的EF设计器,这个就是我们最常用的EntityFramework设计模 ...
- EF上下文对象线程内唯一性与优化
在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,这也加是很多人的代码中习惯在使用上下文对象时,习惯将对象建立在using中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...
- EF里Guid类型数据的自增长、时间戳和复杂类型的用法
通过前两章Lodging和Destination类的演示,大家肯定基本了解Code First是怎么玩的了,本章继续演示一些很实用的东西.文章的开头提示下:提供的demo为了后面演示效果,前面代码有些 ...
- 模仿EF,我们用JS开发的HTML5 SQLite 访问库
今天终于有空把demo放到了RunJS上面去.请使用google chrome观看在线演示: http://sandbox.runjs.cn/show/pekbd9zb 这个库本来是我们开发的phon ...
随机推荐
- SQLiteOpenHelper+ContentProvider的使用
效果图: PetDbHelper package com.example.admin.pets; import android.content.Context;import android.datab ...
- MyBatis基础:MyBatis关联查询(4)
1. MyBatis关联查询简介 MyBatis中级联分为3中:association.collection及discriminator. ◊ association:一对一关联 ◊ collecti ...
- BEX5下新建任务到待办任务
List<OrgUnit> list = new ArrayList<OrgUnit>(); // 1.查询出执行者 String sql = "select t.f ...
- Elasticsearch6.x和Kibana6.x的安装
Elasticsearch6.x的安装(centos6.x下) Elasticsearch6.x目前需要至少jdk8的支持,关于如何安装jdk不在讲述.Oracle的推荐安装文档可以在Oracle的网 ...
- BZOJ3498PA2009 Cakes——三元环
题目描述 N个点m条边,每个点有一个点权a.对于任意一个三元环(j,j,k)(i<j<k),它的贡献为max(ai,aj,ak) 求所有三元环的贡献和.N<100000,,m< ...
- JS流程控制
1.if...else... //if 语句:只有当指定条件为 true 时,该语句才会执行代码. //语法 if (condition) { 当条件为 true 时执行的代码 } //if...el ...
- <Android基础> (五) 广播机制
1)接收系统广播:a.动态注册监听网络变化 b.静态注册实现开机启动 2)发送自定义广播:a.发送标准广播 b.发送有序广播 3)使用本地广播 第五章 5.1 广播机制 Android中的每个程序都可 ...
- 【POJ 1740】A New Stone Game
这真是一道博弈论的好题啊 还是采用OI届的惯用套路,从简单想起 如果只有一堆石子,那么一定先手必胜 如果有两堆石子,那么我们考虑如下两种情况 2.1 两堆石子数量相同,那么无论先手怎么拿,后手都有一种 ...
- python实现加密
1.md5加密 hashlib 库中包括如SHA1.SHA224.SHA256.SHA384.SHA512和MD5算法等 >>> import hashlib>>> ...
- 使用mysqlbinlog对主库binlog进行同步
#!/bin/bash BASEDIR="/usr/local/mysql" BIN="$BASEDIR/bin" MYSQLBINLOG="$BIN ...