这篇博客我本来想总结一下用EF删除的使用,但是我还想写一写EF是怎样操作实体的,因为增删改查都是对实体进行操作,操作实体的步骤明白了,其它得都大同小异了。
EF操作数据库的方法是操作实体,我们将数据库中的表映射到成实体后,我们在VS直接操作实体就可以操作数据库,那EF是怎样操作实体的哪? 下面以查询为例子。
先写一段查询的代码,查询出来的数据是用一个实体返回的。
Model.BlogArticle modelNew = db.BlogUser.Where(a => a.AId == model.AId).FirstOrDefault();
一、查询详细步骤如下
1、查询数据库中的数据;
2、将查询出来的数据转化成Model(User)对象;
3、将User对象装入“包装类”对象中;
4、将Model返回。
二、图解
三、有了查询的详解过程,删除该登场了,删除操作实体的具体的过程如下。
1、创建要删除的对象
2、将对象添加到EF管理容器中
3、将对象包装类的状态标识为删除状态
4、更新到数据库
第一步 将待删除记录的ID传给JS代码
@foreach (BlogArticle a in ViewData["DataList"] as List<BlogArticle>)
{
<tr>
<td>@a.AId</td>
<td>@a.ATitle</td>
<td>@a.BlogArticleCate.Name</td>
<td>@a.Enumeration.e_cname</td>
<td>@a.AUpdatetime</td>
<td>
<a href="javascript:del(@a.AId)">删</a> //将待删除记录的ID传给JS代码
<a href="javascript:(@a.AId)">改</a> //将待修改记录的ID传给JS代码
</td>
</tr>
}
第二步:用JS获取要删除记录的ID
<script type="text/javascript">
function del(id) {
if (confirm("小子,你要删除这条记录???")) {
window.location = "/home/del/" + id; //定位到HomeController的Del()方法 这里的id就是传递过来的参数
}
}
</script>
第三步:在HomeControl中添加删除代码
public ActionResult Del(int id)
{
try
{
//1、创建要删除的对象
BlogArticle modelDel = new BlogArticle() { AId = id };
//2、将对象添加到EF管理容器中
db.BlogArticles.Attach(modelDel);
//3、将对象包装类的状态标识为删除状态
db.BlogArticles.Remove(modelDel);
//4、更新到数据库
db.SaveChanges();
return RedirectToAction("Index", "Home");//重新定向到HomeController的Index()方法,就是重新加载一下数据
}
catch (Exception ex)
{
return Content("删除失败!!!" + ex.Message);
}
}
小结
好了,删除完了,查询的步骤是查询到数据,将数据转化为Model对象,将Model装入包装类中,再将Model返回。而删除是先找到将要删除的对象(具体的Model),将Model对象装入包装类对象中,然后更改包装类对象的状态标识符,最后执行操作。这两个过程都用到了将我们待操作的实体放入包装类对象中,我们可已经这个包装类对象看成数据库与用户的桥梁。