EF浅析及示例分析2

2024-05-25 20:58
文章标签 分析 示例 浅析 ef

本文主要是介绍EF浅析及示例分析2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

          上一篇博客我们提到了EntityFrameWork的使用好处和创建方法,这篇博客,继续讨论EntityFrameWork的使用。我们从EntityFrameWork的结构和使用两方面来讨论。

         我们使用mvc模式来完成示例代码。上篇博客使用DBfirst生成模型结构如下图:


       使用DBFirst生成的实体模型是一个以.edmx结尾的文件,展开这个文件,会看到一下这张图的四个文件。.Context.tt文件中存放的是整个实体的信息。


Blog.tt文件中存放的是模型中各个子实体的内容。如下图所示:


            好了,现在使用创建的这个实体模型,写个小Demo,实现几个基本操作。

          先做查询,我们现在要将BlogArticle中所有的内容显示出来。示例代码如下:

           Controller代码:

<pre name="code" class="csharp">public class HomeController : Controller{// 实例化实体模型,可以减少代码中的命名空间的重复。OumindBlogEntities db = new OumindBlogEntities();public ActionResult Index(){//1 查询 数据库里的 文章数据(通过执行  EF)//1.1 第一种方式,使用SQO(标准查询运算符),查询所有未软删除的数据//直接将返回的DBQuery转换成List<T> 集合,也就是理解查询数据库,并且返回查询的结果//List<Models.T_News> list = db.T_News.Where(d => d.AIsDel == false).ToList();// 1.2 第二种方式:使用linq语句List<Models.BlogArticle> list = (from b in db.BlogArticle where b.AIsDel ==false select b).ToList ();ViewData["DataList"] = list;// 3 加载视图return View();} }

代码说明:使用泛型集合存储查询到的内容,使用linq表达式查询未软删除的数据,使用ViewData获取,并且显示数据。

View代码:

	@{ViewBag.Title = "Index";}<h2>Index</h2><html><head><meta name="viewport" content="width=device-width" /><title>Index</title></head><body><table><tr><th>id</th><th>标题</th><th>分类</th><th>状态</th><th>时间</th><th>操作</th></tr><!--遍历Action方法设置给 ViewData的集合数据,生成HTML代码-->>@foreach (BlogArticle  a in ViewData["DataList"] as List<BlogArticle >){<tr><td>id</td><td>@a.AId</td><td>@a.ATitle </td><td>@a.BlogArticleCate.Name</td><td>@a.Enumeration.e_cname  </td><td>@a.AAddtime </td></tr>}</table></body></html>
 

删除示例代码(接上例):

<span style="white-space:pre">	</span>public ActionResult Del(int id){try{//1 创建要删除的对象BlogArticle modledel = new BlogArticle(){AId = id};// 2 将对象添加到  EF  管理容器db.BlogArticle.Attach(modledel);//3  将对象包装类的状态  改为删除db.BlogArticle.Remove(modledel );// 4 更新到数据库db.SaveChanges();// 5 更新成功,浏览器重定向到 /Home/Index方法return RedirectToAction("Index","Home");}catch (Exception ex){return Content("删除失败~~~" + ex.Message );}} 

说明:页面显示中,我们在删除时,传入一个主键id,作为删除标识,删除时,根据id删除记录。

更新示例代码:更新分为两部分,第一部分,首先需要将需要修改的内容重新显示为一个页面,然后在新的页面进行修改,提交,利用重载方法实现。

修改页面代码:

	public ActionResult Modify(int id){// 1 根据id 获得数据库数据,返回的集合中取出第一个实体对象BlogArticle art = (from a in db.BlogArticle where a.AId == id select a).FirstOrDefault();//2 生成文章分类列表集合<option value="1">文本</option>IEnumerable <SelectListItem > listItem = (from c in db.BlogArticleCate where c.IsDel == false select c).ToList().Select( c=> new SelectListItem { Value = c.Id.ToString(), Text = c.Name });//将listItem使用viewbag传递到前台ViewBag.CateList = listItem;// 3 将art试图传递给界面 //方法1 ViewBag//方法2 ViewData//方法3 “加载”时,使用视图的构造函数,将数据传递给 名为model的属性return View(art);} 
更新操作:public ActionResult modify(BlogArticle model){try{ //将实体对象放入EF容器中,并获取伪包装类对象DbEntityEntry<BlogArticle> entry = db.Entry<BlogArticle>(model);//将对象状态设置为为改变,后边需要单独改变entry.State = System.Data.EntityState.Unchanged;//设置被改变属性的状态entry.Property(a => a.ATitle).IsModified = true;entry.Property(a => a.AContent).IsModified = true;entry.Property(a => a.ACate).IsModified = true;//提交到数据库,完成修改db.SaveChanges();// 5 更新成功,浏览器重定向到 /Home/Index方法return RedirectToAction("Index", "Home");}catch (Exception ex){return Content("修改失败~~~" + ex.Message);}} 

    删除和更新时,使用了EF管理容器。EF会为每个实体对象创建一个代理包装类对象,它会跟踪每个实体对象的状态和每个属性的状态,我们使用容器的功能来实现对象或者属性的操作。删除操作使用对象容器,通过修改对象状态,实现删除操作;更新操作中,使用容器跟踪对象属性的状态,通过更新属性状态,实现属性的更新操作。

        通过使用EntityFrameWork实现了程序和数据库的解耦,程序员用处理对象的方式来操作数据,这样就可以节省更多的时间用来处理系统逻辑,为软件开发带来了便利。




这篇关于EF浅析及示例分析2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002606

相关文章

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

高度内卷下,企业如何通过VOC(客户之声)做好竞争分析?

VOC,即客户之声,是一种通过收集和分析客户反馈、需求和期望,来洞察市场趋势和竞争对手动态的方法。在高度内卷的市场环境下,VOC不仅能够帮助企业了解客户的真实需求,还能为企业提供宝贵的竞争情报,助力企业在竞争中占据有利地位。 那么,企业该如何通过VOC(客户之声)做好竞争分析呢?深圳天行健企业管理咨询公司解析如下: 首先,要建立完善的VOC收集机制。这包括通过线上渠道(如社交媒体、官网留言

53、Flink Interval Join 代码示例

1、概述 interval Join 默认会根据 keyBy 的条件进行 Join 此时为 Inner Join; interval Join 算子的水位线会取两条流中水位线的最小值; interval Join 迟到数据的判定是以 interval Join 算子的水位线为基准; interval Join 可以分别输出两条流中迟到的数据-[sideOutputLeftLateData,

打包体积分析和优化

webpack分析工具:webpack-bundle-analyzer 1. 通过<script src="./vue.js"></script>方式引入vue、vuex、vue-router等包(CDN) // webpack.config.jsif(process.env.NODE_ENV==='production') {module.exports = {devtool: 'none

【Unity Shader】Alpha Blend(Alpha混合)的概念及其使用示例

在Unity和图形编程中,Alpha Blend(也称为Alpha混合)是一种用于处理像素透明度的技术。它允许像素与背景像素融合,从而实现透明或半透明的效果。Alpha Blend在渲染具有透明度的物体(如窗户、玻璃、水、雾等)时非常重要。 Alpha Blend的概念: Alpha值:Alpha值是一个介于0(完全透明)和1(完全不透明)的数值,用于表示像素的透明度。混合模式:Alpha B

OSG学习:阴影代码示例

效果图: 代码示例: #include <osgViewer/Viewer>#include <osg/Node>#include <osg/Geode>#include <osg/Group>#include <osg/Camera>#include <osg/ShapeDrawable>#include <osg/ComputeBoundsVisitor>#include

OSG学习:转动的小汽车示例

由于只是简单的示例,所以小汽车的模型也比较简单,是由简单的几何体组成。 代码如下: #include <osg\ShapeDrawable>#include <osg\AnimationPath>#include <osg\MatrixTransform>#include<osgDB\ReadFile>#include<osgViewer\Viewer>osg::MatrixTr

OSG学习:使用已有回调示例

回调的类型有很多种,一般很容易就想到的是UpdateCallBack,或者EventCallBack,回调的意思就是说,你可以规定在某件事情发生时启动一个函数,这个函数可能做一些事情。这个函数就叫做回调函数。 #include<osg\MatrixTransform>#include<osg\PositionAttitudeTransform>#include<osg\Geode>#

线性回归(Linear Regression)原理详解及Python代码示例

一、线性回归原理详解         线性回归是一种基本的统计方法,用于预测因变量(目标变量)与一个或多个自变量(特征变量)之间的线性关系。线性回归模型通过拟合一条直线(在多变量情况下是一条超平面)来最小化预测值与真实值之间的误差。 1. 线性回归模型         对于单变量线性回归,模型的表达式为:         其中: y是目标变量。x是特征变量。β0是截距项(偏置)。β1

LoRaWAN在嵌入式网络通信中的应用:打造高效远程监控系统(附代码示例)

引言 随着物联网(IoT)技术的发展,远程监控系统在各个领域的应用越来越广泛。LoRaWAN(Long Range Wide Area Network)作为一种低功耗广域网通信协议,因其长距离传输、低功耗和高可靠性等特点,成为实现远程监控的理想选择。本文将详细介绍LoRaWAN的基本原理、应用场景,并通过一个具体的项目展示如何使用LoRaWAN实现远程监控系统。希望通过图文并茂的讲解,帮助读