Entity Framework 普通操作(复习用)——感觉有点不对,需要撸代码验证

方式一,使用Attach,并更新某个属性的值(注意,不是所有的属性都作修改)

using (var context = new EFContext())
{
//方式一
var entity = context.Citys.Find(4);
context.Citys.Attach(entity);
entity.Name = "肇庆";
context.SaveChanges();
}

将一个entity标记为System.Data.Entity.EntityState.Modified更新时会更新所有的列(而不仅是修改了列),实际该使用哪种方式视场合而定。model对象可以不是从数据库获取的

using (var context = new EFContext())
{
    //方式二
    var model = context.Citys.Find(5);
    model.Name = "潮州";
    context.Entry(model).State = System.Data.Entity.EntityState.Modified;
    context.SaveChanges();
}

普通方式,全字段更新

 using (var db = new DBModel())
        {
            var student = db.students.FirstOrDefault(s => s.name == "萝莉");
            student.age = 13;   //将萝莉的年龄改为13岁
            db.SaveChanges();
        }

普通方式删除

 using (var db = new DBModel())
        {
            var student = db.students.FirstOrDefault(s => s.name == "萝莉");    //查找萝莉
            db.students.Remove(student);    //删除萝莉
            db.SaveChanges();
        }

在ef中使用sql语句

using (var db = new DBModel())  //创建数据库上下文
{
    //同步的方式执行SQL,并返回受影响的行数
    int result = db.Database.ExecuteSqlCommand(@"CREATE TABLE `test`.`test` (
                 `id` INT NOT NULL,
                 PRIMARY KEY(`id`)); ");

    //使用SqlParameter传值可以避免SQL注入
    var p_name = new SqlParameter("@name", "萝莉");
    var p_age = new SqlParameter("@age", 13);

    //如果使用的是MySql数据库 需要SqlParameter把替换为MySqlParameter
    //var p_name = new MySqlParameter("@name", "萝莉");
    //var p_age = new MySqlParameter("@age", 13);

    //更改学生年龄
    result = db.Database.ExecuteSqlCommand(@"UPDATE `test`.`student`
                                           SET `age` = @age
                                           WHERE `name` = @name;", p_age, p_name);

    //异步的方式执行SQL,并返回受影响的行数
    Task<int> result2 = db.Database.ExecuteSqlCommandAsync("DROP TABLE `test`.`test`;");
}
using (var db = new DBModel())  //创建数据库上下文
{
    //查询叫萝莉的学生信息,并修改她的年龄
    student result1 = db.students.SqlQuery("SELECT  * FROM test.student WHERE name = '萝莉'").FirstOrDefault();
    result1.age = 13;   //通过实体集合下.SqlQuery查询到的数据,修改之后是可以保存到数据库的
    student result2 = db.Database.SqlQuery<student>("SELECT  * FROM test.student WHERE name = '旺财'").FirstOrDefault();
    result2.age = 21;   //因为使用的是.Database.SqlQuery查询到的,所以这里的修改不会保存到数据库
    //如果希望.Database.SqlQuery下查出的数据在修改后也能保存到数据库
    student result3 = db.Database.SqlQuery<student>("SELECT  * FROM test.student WHERE name = '小明'").FirstOrDefault();
    result3.age = 36;
    db.Entry<student>(result3).State = System.Data.Entity.EntityState.Modified; //通知数据上下文,这条记录也被修改了
    db.SaveChanges();
}
原文地址:https://www.cnblogs.com/KQNLL/p/9420904.html