首页 > 代码库 > EF简单增删改查

EF简单增删改查

一. 主要内容

1. 数据持久层框架:EF,NHibernate,ibaties(半开放的)。

2. 对象关系映射。

3. 生成外键对象。

4. T4模板。(VS里面需要装T4 Editor插件。)

5. EF上下文(EF容器)->.Context.cs。

6. EF简单的增删改查。

查询:利用部分类的特性重写方法来进行方法的扩展。

修改(SQL Serrver Profiler跟踪):

先查询,再修改,再保存更改。

7. 延迟加载(延时查询、按需加载)和即时查询。

延迟加载的用途一:

SQL语句条件不确定,所以不能立即进行查询,延迟加载以确定所有条件完成,等开始用的时候才开始查询。

延迟加载的用途二(外键延迟):

对于外键实体属性的延迟加载。

按需加载的缺点:

每次调用外键实体时,都会去查询数据库(EF小优化:相同的外键实体只查询一次),这时候用即使加载比较好。

8. 延迟加载二视频里面的:数据库改变,则EF实体不会对应改变,可以选择从数据库更新模型。

9. EF的连接查询

include(“User”),通过include方法,可以告诉EF连接查询哪个外键属性。

10. EF容器(EF数据上下文)

       修改时,不用Attach方式,使用Entry方式。

11. 批处理

12. MODELFirst(实体优先)

二. 源代码

  1 using System;  2 using System.Collections.Generic;  3 using System.Data.Entity;  4 using System.Data.Entity.Infrastructure;  5 using System.Linq;  6 using System.Text;  7 using System.Threading.Tasks;  8   9 namespace EFTest 10 { 11     class Program 12     { 13         static LeaveWordBoardEntities db = new LeaveWordBoardEntities(); 14         static void Main(string[] args) 15         { 16             BatchAdd(); 17         } 18  19         static Program() 20         { 21             //取消自动验证所跟踪的实体 22             db.Configuration.ValidateOnSaveEnabled = false; 23         } 24  25         #region 1.0 新增 26         /// <summary> 27         /// 新增 28         /// </summary> 29         static void Add() 30         { 31             User uObj = new User() 32             { 33                 uName = "HUOAA11", 34                 uLoginName = "a11", 35                 uPwd = "a11", 36                 uIsDel = false, 37                 uAddTime = DateTime.Now 38             }; 39             //两种不同的新增方式:本质上都是把该对象标记为新增,让EF上下文来执行新增操作。 40             //db.Users.Add(uObj); 41             DbEntityEntry<User> entry = db.Entry<User>(uObj); 42             entry.State = EntityState.Added; 43             db.SaveChanges(); 44             Console.WriteLine("新增成功!"); 45         } 46         #endregion 47  48         #region 2.0 简单查询 49         /// <summary> 50         /// 简单查询 51         /// </summary> 52         static void Querry() 53         { 54             //1.1 延时查询一 55             //DbQuery<User> i = db.Users.Where(u => u.uLoginName == "HUOTENG").OrderBy(u => u.uId) as DbQuery<User>; 56             //User user01 = i.FirstOrDefault(); 57             //Console.WriteLine(user01.uName); 58  59             //1.2 延时查询二:针对于外键实体 60             //对于外键属性而言,EF会用这个外键属性时才去查询对应的表。 61             //IQueryable<UsersAddress> addrs = db.UsersAddresses.Where(a=>a.udUId==2);//真实返回的DBQuery对象,以接口方式返回 62             ////a. 此时只查询了地址表 63             //UsersAddress addr01 = addrs.FirstOrDefault(); 64             ////b. 查询地址对应的用户表 65             //Console.WriteLine(addr01.User.uName);  66             //c. 按需加载的缺点:会为每次调用外键实体时,都会去查询数据库。 67             //IQueryable<UsersAddress> addrs = db.UsersAddresses; 68             //foreach (UsersAddress add in addrs) 69             //{ 70             //    Console.WriteLine(add.udAddress+":userName="+add.User.uName); 71             //} 72             //1.3 连接查询,生成innner join 73             //IQueryable<UsersAddress> addrs = db.UsersAddresses.Include("User"); 74             //foreach (UsersAddress add in addrs) 75             //{ 76             //    Console.WriteLine(add.udAddress + ":userName=" + add.User.uName); 77             //} 78             IQueryable<Msg> msgs = db.Msgs.Include("User").Include("User1"); 79             foreach (Msg msg in msgs) 80             { 81                 Console.WriteLine(msg.mId + "," + msg.User.uName + "," + msg.User1.uName + "," + msg.mMsg); 82             } 83  84  85             //2. 变相的即时查询 86             //List<User> list = db.Users.Where(u => u.uName == "HUOAA").ToList(); 87             //list.ForEach(u => Console.WriteLine(u.ToString())); 88         } 89         #endregion 90  91         #region 3.0 先查询再修改 92         /// <summary> 93         /// 先查询再修改 94         /// </summary> 95         static void Edit() 96         { 97             User user = db.Users.Where(u => u.uId == 3).FirstOrDefault(); 98             user.uName = "nihaoa2"; 99             db.SaveChanges();100             Console.WriteLine("修改成功!");101         }102         #endregion103 104         #region 4.0 直接修改105         /// <summary>106         /// 直接修改107         /// </summary>108         static void Edit2()109         {110             ////1. 查询出一个要修改的对象,此时返回的是一个User类的代理类对象111             //User user = db.Users.Where(u => u.uId == 2).FirstOrDefault();112             //Console.WriteLine("修改前:"+user.ToString());113             ////2. 如果被修改,会在EF上下文容器中标记该属性为已修改114             //user.uName = "刘德华";115             ////3. EF上下文进行检查,找到标记修改的属性,生成对应的UPDATE语句进行修改116             //db.SaveChanges();117             //Console.WriteLine("修改后:"+user.ToString());118 119             //Entry方式修改120             User user = new User() { uId = 2, uName = "小白", uLoginName = "xiaobai", uPwd = "13", uAddTime = DateTime.Now, uIsDel = false };121             DbEntityEntry<User> entry = db.Entry<User>(user);122             entry.State = EntityState.Unchanged;123             entry.Property("uName").IsModified = true;124             db.SaveChanges();125             Console.WriteLine("修改成功!");126         }127         #endregion128 129         #region 5.0 删除130         /// <summary>131         /// 删除132         /// </summary>133         static void Del()134         {135             User u = new User() { uId = 4 };136             db.Users.Attach(u);137             db.Users.Remove(u);138             /*139              * 也可以用Entry来附加和修改140              * DbEntityEntry<User> entry = db.Entry<User>(u);141              * entry.State = EntityState.Deleted;142              */143             db.SaveChanges();144         }145         #endregion146 147         #region 6.0 批处理148         /// <summary>149         /// 6.0 批处理150         /// </summary>151         static void SaveBatched()152         {153             //6.1 新增154             //User u1 = new User()155             //{156             //    uName = "asd",157             //    uLoginName = "c",158             //    uPwd = "asdf",159             //    uIsDel = false,160             //    uAddTime = DateTime.Now161             //};162             //db.Users.Add(u1);163 164             //6.2 修改165             User u2 = new User() { uId = 8, uName = "小黑" };166             DbEntityEntry<User> entry = db.Entry<User>(u2);167             entry.State = EntityState.Unchanged;168             entry.Property("uName").IsModified = true;169 170             //6.3 删除171             //User u3 = new User() { uId=7};172             //db.Users.Attach(u3);173             //db.Users.Remove(u3);174 175             //6.4 进行统一的批处理176             db.SaveChanges();177             Console.WriteLine("批处理完成!");178         }179         #endregion180 181         #region 7.0 批处理添加大量数据182         /// <summary>183         /// 批处理添加大量数据184         /// </summary>185         static void BatchAdd()186         {187             for (int i = 0; i < 50; i++)188             {189                 User u = new User()190                 {191                     uName = "qwer" + i,192                     uLoginName = "qwer" + i,193                     uPwd = "qwer" + i,194                     uIsDel = true,195                     uAddTime = DateTime.Now196                 };197                 db.Users.Add(u);198             }199             db.SaveChanges();200             Console.WriteLine("批处理完成!~");201         } 202         #endregion203     }204 }
View Code

 

EF简单增删改查