【原】EF简单使用
/// <summary> /// 数据上下文对象 /// </summary> static TestEntities te = new TestEntities(); static void Main(string[] args) { 执行方法(); Console.ReadKey(); } #region 新增 static void Add() { //创建实体对象 User uObj = new User() { UName = "刘涛", UPwd = "testpwd" }; //通过EF新增到数据库中 //将对象加入到数据上下文的users集合中 te.Users.Add(uObj); //调用 数据上下文的保存方法,将对象存储到数据库中 te.SaveChanges(); Console.WriteLine("保存成功!"); } #endregion #region 即时查询 static void Query() { List<User> list = te.Users.Where(u => u.UName == "刘涛"&&u.Uids==3).ToList(); list.ForEach(u => Console.WriteLine(u.ToString())); } #endregion #region 延时查询 static void Query1() { //集合的标准查询运算符方法,是来自于System.Linq.Enumerable里给IEnumerable接口添加的扩展方法 //EF上下文里的DBSet<T>里的标准查询运算符来自于System.Linq.Queryabl给IQueryable接口添加的扩展方法; //延时加载 //System.Data.Entity.Infrastructure.DbQuery<User> i = te.Users.Where(u => u.UName == "刘涛").OrderByDescending(u => u.UPwd) as System.Data.Entity.Infrastructure.DbQuery<User>; //User user1 = i.FirstOrDefault(); //延迟加载,针对于外键实体的延迟 IQueryable<UsersDetail> address = te.UsersDetails.Where(a => a.udUid == 2); //此时只查询了地址表 UsersDetail addr01 = address.FirstOrDefault(); //查询了地址对应的用户表 Console.WriteLine(addr01.User.UName); //按需加载的缺点,数据量大的时候会为每次调用外键实体时,都会去查询数据库,EF有小优化:相同的外键实体,只查一次; IQueryable<UsersDetail> addrs = te.UsersDetails; foreach (UsersDetail item in addrs) { Console.WriteLine(item.udAddress+":userName="+item.User.UName); } // Console.WriteLine(user1.UPwd.ToString()); } #endregion #region 修改 static void Edit() { //查询出一个要修改的对象 User usr = te.Users.Where(u => u.Uids == 1).FirstOrDefault(); //修改内容 Console.WriteLine("修改前" + usr.ToString()); usr.UName = "测试修改"; //重新保存到数据库 te.SaveChanges(); Console.WriteLine("修改后" + usr.ToString()); Console.WriteLine("修改内容成功!"); } #endregion #region 删除 static void Delete() { //创建要删除的对象 User u = new User(); u.Uids = 1; //附加到EF中 te.Users.Attach(u); //标记为删除 te.Users.Remove(u); //执行删除SQL te.SaveChanges(); Console.WriteLine("删除成功!"); } #endregion