EF的操作
1.添加操作
方法一:
var db = new Context(); //数据库上下文
User user = new User(); //实例化一个类
...... //给user赋值
db.Set<User>().Attach(user);
db.Entry<User>(user).State = EntityState.Added;
db.SaveChanges();
方法二:
var db = new Context(); //实例化上下文
User user = new Web.User();
...... //给user赋值
db.User.Add(user);
db.SaveChanges();
2.删除操作:
方法一:
var db = new Context();
......//查找user
db.User.Remove(list);//list为查找出来的user,用remove进行删除
db.SaveChanges();
方法二:
var db = new Context();
...... //实例化一个类,并给类的ID(主键)赋值,主键是必须赋值,其他属性可以不赋值
db.Set<User>().Attach(list);//list为实例化的类即user
db.Entry<User>(list).State = EntityState.Deleted;
db.SaveChanges();
3.修改操作:
方法一:
var db = new Context();
...... //先查找出来,然后修改属性
db.SaveChanges();//进行保存
方法二:
var db = new Context();
....... //先实例化,然后修改属性值
db.Set<User>().Attach(list);
db.Entry<User>(list).State = EntityState.Modified;
db.SaveChanges();
如果有导航属性时,在主表savechanges之前,Attach从表
多对多数据的修改:(根据A的ID修改关系表)
var oldrole= ........ //查找关系表中的数据,(事实上关系表是不被上下文管理的)如果是两个表没有外键(A,B表),都设置导
航属性时,要用include链接查询
List<string> oldids = new List<string>();
foreach (var item in A.B)
{
oldids.Add(item.id);//将与B中的id都取出来放到集合中
}
//要删除的数据的ID
var delete = oldids.Except(ids);
//要添加的数据的ID
var add = ids.Except(oldids);
oldrole.B.RemoveAll(x => delete.Contains(x.ID));
oldrole.B.AddRange(db.B.Where(x => add.Contains(x.ID)));
db.SaveChanges();