版权声明:本文为博主原创文章,未经博主允许不得转载。 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");
}