ASP .NET MVC ORM 数据库优先

来源:互联网 发布:白贺翔 java架构师 编辑:程序博客网 时间:2024/06/07 02:27

1.概述

 “Database First”称为“数据库优先”,即先创建数据库,后生成数据模型。该模式的使用前提
是数据库已经存在并正常工作。然后使用VistualStudioEF模型设计器,根据数据库生成数据模型。
使用EF模型设计器可以随时修改数据模型并更新数据库


  在ASP.NET MVC应用程序中,所有数据模型相关的类,均默认放置于/Models目录


2.建模操作步骤

 注意: 需要指定Models文件夹
    1.创建ASP.NET MVC应用程序后,按下“Shift+Ctrl+A”快捷键,打开“添加新项”对话框,选择“数据”,
并选择“ADO.NET实体数据模型”,打开EF向导


    2.点击“添加”按钮,在“实体数据模型向导”对话框,选择“从数据库生成”


    3.点击“下一步”,在“实体数据模型向导”对话框,创建数据库连接,连接到数据库,EF向导自动生成连接串


    4.讲连接串保存到Web.Config 点击“下一步”,选择数据表


    5.点击“完成”,VisualStudio 创建出数据模型关系图


    6.EF向导自动生成的meixinEntities类,称为“数据库上下文操作类”,位于/Models/Model1.Context.cs。
同时生成的类,称为“业务实体类”

    VisualStudioEF模型设计器为我们的数据库创建了模型,并在Models目录生成.edmx文件,
    .edmx文件是一个XML文件,它用于定义概念模型、存储模型以及这些模型之间的映射。
    .edmx文件还包含ADO.NET实体数据模型设计器(实体设计器),用于以图形方式呈现模型的信息。
    .edmx文件即实体数据模型。使用EF模型设计器修改模型时,会更改.edmx文件文件。
    默认情况系,.edmx文件文件使用EF模型设计器打开还可以通过以下方式,使用XML打开


    1.确保项目在VS中打开
    2.在“解决方案资源管理器”中右击.emdx文件,然后选择“打开方式”
    3.选择“XML编辑器”,然后单机“确定”。




    使用.edmx文件创建数据模型概念
    1.SSDL:存储模型,指数据库中的实体
    2.CSDL:概念模型。以程序语言的角度来定义模型
    3.映射:将概念模型和存储模型连接起来,以便执行操作,即实体,数学对应实体,字段


    更新数据模型
    如果要在数据库中添加新的数据表,或希望在数据模型中加入新的模型内容,我们可以继续用EF向导,
更新现有的数据模型。

    1.打开VS 开启EF模型设计器,右键点击EF设计器的空白处,选择“从数据库更新模型”
    2.打开“更新向导”,选择“数据表”
    3.点击“完成”,自动添加模型

 3. 实现功能

    1.关联数据库连接字符串。连接字符串默认保存于Web.config文件


    2.OnModelCreating方法是用于在上下文对象初始化后执行相关的配置操作


    3.在数据库上下文类,通常会定义多个DbSet<T>类型的对象属性,表示“业务实体集”对象。
    其中,“T”代表业务实体对象,映射的是数据库中的数据表。




    //添加
    当需要像数据库中添加信息时,首页构建对象,然后填充其属性,然后用Add方法将对象添加到Set<T>集合中,
然后调用SaveChanges()保存到数据库


    //查询
    先通过Entities类打开数据库连接,然后使用Find()方法,然后将查询结果赋值给var类型 ,最后通过ViewBag
将属性传给视图
    DbSet<T>.Find()方法是通过主键来查找对应的实体对象。


    //更新数据
    先通过Find()方法查询,然后修改对象,最后SaveChanges()保存到数据库


    //删除数据
    先通过Find()方法查询,获取对象,然后删除




    访问单数据表
    使用EF操作数据库,在控制器代码中需要引用数据模型的命名空间,即写入“using DataAccess.Models;”
    “数据库上下文类”(Entities类)和“业务实体类”(字段类)默认位于该命名空间。
    “数据库上下文类”(Entities类)由EF基于数据库自动生成,文件默认位于“/Models/名称.Context.cs”

4.代码实例

  public ActionResult Index()        {            //创建对象            guser user = new guser() { uname = "123", upwd = "123" };            //using 会自动释放对象            using (GOODsEntities1 db = new GOODsEntities1())            {                //添加对象                db.guser.Add(user);                //保存                db.SaveChanges();            }            return View();        }        public ActionResult About()        {            //查询            using (GOODsEntities1 db = new GOODsEntities1())            {                // DbSet<T>.Find()方法是通过主键来查找对应的实体对象。                var admin = db.guser.Find(1);                admin.upwd = "5555";                db.SaveChanges();                admin = db.guser.Find(1);                ViewBag.Name = admin.uname;                ViewBag.Pwd = admin.upwd;            }            return View();        }        public ActionResult Contact()        {            using (GOODsEntities1 db = new GOODsEntities1())            {                // DbSet<T>.Find()方法是通过主键来查找对应的实体对象。                var admin = db.guser.Find(1);                db.guser.Remove(admin);                db.SaveChanges();            }            return View();        }


0 0
原创粉丝点击