EF多种方式实现增删改查

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaouncle/article/details/82904420

以下内容是针对EntityFramework6.0及以上版本写的示例,若发现代码无法运行的情况,请先检查当前EF的版本。

一、非Sql增删改查单个对象

[HttpPost]
public ActionResult Index(int id, string name)
{
    #region 增加一个对象
    using (NHibernateContext nhibernate = new NHibernateContext())
    {
        Sys_User user = new Sys_User()
        {
            Id = id,
            Name = "CCC",
            Phone = "18233177777",
            Address = "克里姆林宫",
            CreateDate = DateTime.Now
        };        
        //nhibernate.Sys_User 等价于 nhibernate.Set<Sys_User>()
        nhibernate.Sys_User.Add(user);
        nhibernate.Set<Sys_User>().Add(user);
        nhibernate.SaveChanges();
    }
    #endregion

    #region 删除一个对象
    using (NHibernateContext nhibernate = new NHibernateContext())
    {
        //若查询的数据不存在,则抛出System.InvalidOperationException异常
        //Sys_User user = nhibernate.Sys_User.Where(a => a.Id == id).First();
        //若查询的数据不存在,则返回null
        //建议使用FirstOrDefault()
        Sys_User user = nhibernate.Sys_User.Where(a => a.Id == id).FirstOrDefault();
        nhibernate.Sys_User.Remove(user);
        nhibernate.SaveChanges();
    }
    #endregion

    #region 修改一个对象(更新整个对象)
    using (NHibernateContext nhibernate = new NHibernateContext())
    {
        //若查询的数据不存在,则返回null
        Sys_User user = nhibernate.Sys_User.Where(a => a.Id == id).FirstOrDefault();
        user.Name = name;
        nhibernate.SaveChanges();
    }    
    #endregion

    #region 修改一个对象(更新某几个字段)
    using (NHibernateContext context = new NHibernateContext())
    {
        Sys_User user = new Sys_User()
        {
            Id = id
        };
        user = context.Sys_User.Attach(user);
        user.Name = name;
        context.SaveChanges();                
    }
    #endregion

    #region 查询一个对象
    using (NHibernateContext nhibernate = new NHibernateContext())
    {
        //若查询的数据不存在,则返回null
        Sys_User user = nhibernate.Sys_User.Find(id);
        //若查询的数据不存在,则抛出System.InvalidOperationException异常
        user = nhibernate.Sys_User.Where(a => a.Id == id).First();
        //若查询的数据不存在,则返回null
        user = nhibernate.Sys_User.Where(a => a.Id == id).FirstOrDefault();
        nhibernate.SaveChanges();
    }
    #endregion

    return View("Index");
}

二、非Sql增删改查多个对象

1、插入操作

public ActionResult Index()
{
    #region 增加多个对象(插入1w条数据需100s)
    DateTime start = DateTime.Now;
    using (NHibernateContext nhibernate = new NHibernateContext())
    {
        IList<Sys_User> userList = new List<Sys_User>();
        for (int i = 0; i < 10000; i++)
        {
            userList.Add(new Sys_User()
            {
                Name = "name" + i,
                Phone = "18233399999",
                Address = "西山一号",
                CreateDate = DateTime.Now
            });
        }
        nhibernate.Sys_User.AddRange(userList);                
        nhibernate.SaveChanges();
    }
    DateTime end = DateTime.Now;
    #endregion

    #region SqlBulkCopy增加多个对象
    using(NHibernateContext context = new NHibernateContext())
    {
        DateTime start = DateTime.Now;
        DataTable dt = new DataTable();
        dt.Columns.Add("Id");
        dt.Columns.Add("Name");
        dt.Columns.Add("Phone");
        dt.Columns.Add("Address");
        dt.Columns.Add("CeateDate");
        DataRow row = null;
        for (int i = 0; i < 10000; i++)
        {
            row = dt.NewRow();
            row["Name"] = "托尼贾";
            row["Phone"] = "17233311111";
            row["Phone"] = "燕西别墅区" + i;
            row["CeateDate"] = DateTime.Now;
            dt.Rows.Add(row);
        }
        SqlBulkCopy bulkCopy = new SqlBulkCopy(context.Database.Connection.ConnectionString);
        bulkCopy.BatchSize = 100;
        bulkCopy.DestinationTableName = "Sys_User";
        bulkCopy.WriteToServer(dt);
        DateTime end = DateTime.Now;
    }
    #endregion	

    return View("Index");
}

2、删除操作

public ActionResult Index(int id)
{
    #region 删除多个对象
    using (NHibernateContext context = new NHibernateContext())
    {
        DateTime start = DateTime.Now;
        List<Sys_User> userList = context.Sys_User.Where(a => a.Id > id).ToList();
        context.Sys_User.RemoveRange(userList);
        context.SaveChanges();
        DateTime end = DateTime.Now;
    }
    #endregion

    #region Z.EntityFrameWork.Plus.EF6删除多个对象
    using (NHibernateContext context = new NHibernateContext())
    {
        //可以不设置BatchSize
        context.Sys_User.Where(a => a.Id > id).Delete(a => a.BatchSize = 1000);
        context.SaveChanges();
    }
    #endregion

    return View("Index");
}

3、修改操作

public ActionResult UpdateSome(int id, string name)
{
    #region 修改多个对象
    using (NHibernateContext context = new NHibernateContext())
    {
        Sys_User first = context.Sys_User.Find(1);
        Sys_User second = context.Sys_User.Find(2);
        if (first != null) first.Name = "first";
        if (second != null) second.Name = "second";
        context.SaveChanges();
    }
    #endregion

    #region Z.EntityFrameWork.Plus.EF6修改多个对象
    using (NHibernateContext context = new NHibernateContext())
    {
        context.Sys_User.Where(a => a.Id > id).Update(a => new Sys_User()
        {
            Name = name
        });
        context.SaveChanges();
    }
    #endregion

    return View("Index");
}

4、查询操作

public ActionResult GetSome(int id)
{
    #region 查询多个对象
    using (NHibernateContext context = new NHibernateContext())
    {
        IList<Sys_User> userList = context.Sys_User.Where(a => a.Id > 5)
                                                   .Where(a => a.Name.Contains("con"))
                                                   .ToList();
        context.SaveChanges();
    }
    #endregion

    #region 分页排序查询多个对象
    using (NHibernateContext context = new NHibernateContext())
    {
        //每页5条数据,查询第3页的内容
        //OrderBy()是按升序排序,OrderByDescending()是按降序排序
        IList<Sys_User> userList = context.Set<Sys_User>().Where(a => a.Id > 5)
                                                          .Where(a => a.Name.Contains("con"))
                                                          .OrderBy(a => a.CeateDate)                                                                  
                                                          .Skip((3 - 1) * 5)
                                                          .Take(5)
                                                          .ToList();
        context.SaveChanges();
    }
    #endregion

    return View("Index");
}

三、Sql语句实现增删改查

1、插入操作

public ActionResult ExecuteInsertSql(int id, string name)
{
    using (NHibernateContext context = new NHibernateContext())
    {
        string sql = "insert into Sys_User(Name, Phone, Address, CeateDate) values(@Name,@Phone,@Address,getdate());"+
                     "insert into Sys_User(Name, Phone, Address, CeateDate) values(@Name,@Phone,@Address,getdate());";
        SqlParameter[] parameters = new SqlParameter[] 
        {                    
            new SqlParameter("@Name",name),
            new SqlParameter("@Phone","15133311111"),
            new SqlParameter("@Address","安曼酒店")
        };
        //此处count值为2
        int count = context.Database.ExecuteSqlCommand(sql, parameters);
    }
    return View("Index");
}

2、删除操作

public ActionResult ExecuteDeleteSql(int id, string name)
{
    using (NHibernateContext context = new NHibernateContext())
    {
        string sql = "delete from Sys_User where Id>@Id and Name like @Name";
        SqlParameter[] parameters = new SqlParameter[]
        {
            new SqlParameter("@Id",id),
            new SqlParameter("@Name","%"+name+"%")
        };
        //此处count值为5
        int count = context.Database.ExecuteSqlCommand(sql, parameters);
    }
    return View("Index");
}

3、修改操作

public ActionResult ExecuteUpdateSql(int id, string name)
{
    using (NHibernateContext context = new NHibernateContext())
    {
        string sql = "update Sys_User set Name=@NewName,Phone=@Phone where Id>@Id and Name like @Name";
        SqlParameter[] parameters = new SqlParameter[]
        {
            new SqlParameter("@Id",id),
            new SqlParameter("@Phone","15133322222"),
            new SqlParameter("@NewName","新名字"),
            new SqlParameter("@Name","%"+name+"%")
        };
        //此处count值为5
        int count = context.Database.ExecuteSqlCommand(sql, parameters);
    }
    return View("Index");
}

4、查询操作

public ActionResult ExecuteSelectSql(int id, string name)
{
    using(NHibernateContext context = new NHibernateContext())
    {
        string sql = "select * from Sys_User where Id>@Id and Name like @Name";
        SqlParameter[] parameters = new SqlParameter[] 
        {
            new SqlParameter("@Id",id),
            new SqlParameter("@Name","%"+name+"%")
        };
        List<Sys_User> userList = context.Database.SqlQuery(typeof(Sys_User), sql, parameters).Cast<Sys_User>().ToList();
    }
    return View("Index");
}

四、事务操作

public ActionResult ExecuteTrans(int id)
{
    #region Z.EntityFrameWork.Plus.EF6删除多个对象
    using (NHibernateContext context = new NHibernateContext())
    {
        DbContextTransaction transaction = context.Database.BeginTransaction();
        try
        {
            //可以不设置BatchSize
            context.Sys_User.Where(a => a.Id > id).Delete(a => a.BatchSize = 1000);
            context.SaveChanges();
            transaction.Commit();
        }
        catch (Exception ex)
        {
            transaction.Rollback();
            throw;
        }
    }
    #endregion

    return View("Index");
}

猜你喜欢

转载自blog.csdn.net/xiaouncle/article/details/82904420