EF的增删改查
创建上下文对象:WordBoradEntities db = new WordBoradEntities();
添加://1.1创建实体对象
User uObj = new User()
{
uName = "刘德华",
uLoginName = "aaa",
uPwd = "asdfasdfasdfsadf",
uIsDel = false,
uAddtime = DateTime.Now
};
//1.2通过EF新增到数据库
//1.2.1将对象加入到数据上下文的 User集合中
db.Users.Add(uObj);
//1.2.2调用数据上下文的保存方法,将对象存数数据库
db.SaveChanges();
查询:List<User> list = db.Users.Where(u => u.uName == "刘德华").ToList();
连接查询:linq连接查询: from a in db.User join b in db. UsersAddresses on a.Id equals b.udid
EF连接查询:IQueryable<UsersAddress> addrs = db.User.Include("UsersAddresses").Where(a => a.Id == 1);
另一种连接查询:var list=db.User.Join(db. UsersAddresses,c=>c.Id,g=>g.udid,(c,g)=>new{Name=c.Name,GroupName=g.GroupName});
删除:EF中实现删除有三种方式
注:版本一、二都是根据主键删除,版本三是根据任意条件到数据库查询然后再根据查询的结果进行删除,实际上版本三也是根据查询出来的结果中的主键进行删除。
版本一:根据主键删除
//实例化一个Users对象,并指定Id的值
Users user = new Users() { Id = 1 };
//将user附加到上下文对象中,并获得EF容器的管理对象
var entry = db.Entry<User>(user);或者 var entry=db.Entry(user);
//设置该对象的状态为删除
entry.State = EntityState.Deleted;
//保存修改
db.SaveChanges();
Console.WriteLine("删除成功!");
版本二:根据主键删除
//实例化一个Users对象,并指定Id的值
Users user = new Users() { Id = 1 };
//将user附加到上下文对象中
db.Users.Attach(user);
//删除user对象
Db.Users.Remove(user);
//保存修改
db.SaveChanges();
Console.WriteLine("删除成功!");
版本三:根据条件先查询出来然后再删除
var list= db.Users.Where(u => u.Name ==”张三”);
if(list!=null&&list.Any())
{
Foreach(User item in list)
{
db.User.Remove(item);
}
}
db.SaveChanges();
修改:
1.官方推荐的修改方式(先查询,再修改)
//将Id为2的Users数据取出
var user = db.Users.Where(u => u.Id == 2).FirstOrDefault();
Console.WriteLine("修改之前:" + user.UserName);
//修改UserName属性
user.UserName = "222222222222222";
//保存修改
db.SaveChanges();
Console.WriteLine("修改之后:" + user.UserName);
2.自己优化的修改方式
//1.创建出一个要修改的对象
User use = new User() { uId = 8,uName="小白~~~"};
//2.将对象加入 EF容器,并获取当前实体对象的状态管理对象
DbEntityEntry<User> entry = db.Entry<User>(user);
//3.设置该对象为未被修改过
entry.State = System.Data.EntityState.Unchanged;
//4.设置该对象的 uName属性为修改状态,同时 entry.State 被修改为 Modified 状态
entry.Property("uName").IsModified = true;
//5.关闭EF实体合法性检查(如果创建出来的要修改的数据有的字段没有赋值则关闭实体合法性检查,如果所有字段都赋值了则不用关闭EF实体合法性检查)
db.Configuration.ValidateOnSaveEnabled = false;
//6.重新保存到数据库 -- ef 上下文会根据实体对象的状态,根据 entry.State =Modified 的值生成对应的 update sql 语句.
db.SaveChanges();
Console.WriteLine("修改成功:");