zoukankan      html  css  js  c++  java
  • Entity Framework(EF的Model First方法)

    EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架。同其它ORM(如,NHibernate,Hibernate)一样,

    一是为了使开发人员以操作对象的方式去操作关系型数据表。

    二是为了屏蔽底层不同厂商的数据库,开发人员面向ORM框架编写数据的CRUD(Create,Retrieve,Update,Delete)操作,再由ORM框架将这些操作翻译成不同数据库厂商的语言。

    从EF 4.X开始支持三种构建方法:1. Database First方法。2.Model First方法。3.Code First 方法。

    本次测试以Visual Studio2013 / MS Sql Server2012 / Entity Framework 6.X 测试EF 

    Model First Demo (Models修改了,中间不能直接映射数据库)

    【Model First 导航属性:不需要自己创建,是表之间有了关联之后,自己就会创建出来】

    //注意:更新Model到数据库时会删除原来表格和数据,再创建新的表格

    关键:关系的创建

    1: 创建空模型的实体数据模型,

    2: 创建实体、关系

    3: 关系包括:1:1,1:n,m:n (建议不要使用1:1,性能低(不会延迟加载,添加时必须同时创建两个对象),可以使用1:m的方式进行代替处理)

      关系m:n,有一张中间表,左:1:m 关系,右:1:n 关系,在数据库中存在这张中间表,在edmx中不存在(可以使用导航属性操作m:n关系)

    4: 可以生成导航属性,也可以不生成

    1:打开SQLServer2012,使用下面SQL文本创建MyFirstModelFirstEF数据库(Model First EF不会帮我们创建数据库,只会帮我们创建表。所以我们要事先把数据库建立好)

    create database MyFirstModelFirstEF
    on primary
    (
        name='MyFirstModelFirstEF.mdf',
        --修改为自己电脑上SQL DB路径
        filename='D:yangZ_MSSQLMyFirstModelFirstEF.mdf',
        size=5mb,
        maxsize=100mb,
        filegrowth=10%
    )
    log on
    (
        name='MyFirstModelFirstEF_log.ldf',
        --修改为自己电脑上SQL DB路径
        filename='D:yangZ_MSSQLMyFirstModelFirstEF_log.ldf',
        size=2mb,
        maxsize=100mb,
        filegrowth=5mb
    )
    go

    2:新建ConsoleApplication应用程序

     

    3:在EFDataBaseFirstDemo上 右键-->新建-->新建项-->数据-->ADO.NET实体数据模型,选择空模型,然后点击完成

    4:此时会自动打开**.edmx设计界面(若没有打开,直接在项目解决方案中,双击**.edmx文件)

      

    5:通过edmx设计界面, 我们把上次Database First Demo中的CustomerInfo/OrderInfo表格生成出来,如下图所示,并导入数据库

    6:在edmx设计页面,一种可以通过工具箱,拖拽设计页面,另外一种直接右键-->新增来设计表格,本次直接通过右键-->新增来设计表格

    6.1:设计CustomerInfo表格,在**.edmx设计界面空白处,直接右键-->新增-->实体,填写相关内容(在这里可以设置主键id为Identity,默认为自增长为1,这个在Model First设计界面没办法修改默认自增长值)

     

    此时,选中id属性,鼠标右键-->属性(或者直接F4),可以打开属性界面,在属性界面可以继续修改刚刚创建的字段

    6.2:继续新增customerName string类型/customerDate datetime类型

    选中CustomerInfo设计界面,右键-->新增-->标量属性,修改name==customerName,选中刚刚新增的customerName字段,修改属性(F4)

    关于MSSQL Server数据类型介绍参考:http://www.cnblogs.com/Dr-Hao/p/5197238.html

     

    6.3:新增customerDate datetime类型字段,右键-->新增-->标量属性,修改name==customerDate,选中刚刚新增的customerDate字段,修改属性(F4)

    关于MSSQL Server数据类型介绍参考:http://www.cnblogs.com/Dr-Hao/p/5197238.html

       

    至此CustomerInfo数据库字段已经创建完毕,OrderInfo表格和字段(id[int],orderName[nvarchar(100)],customerId[int,foreign key])创建类似

    6.4:把CustomerInfo和OrderInfo表格建立关联关系(在**.edmx空白处,右键单击-->新增-->关联)

     

    最后整体**.edmx实体图显示如下:

     7:此时,数据库中没有数据表。我们在edm设计器上空白地方,右键-->根据模型生成数据库

    [Model First EF不会帮我们创建数据库,只会帮我们创建表。所以我们要事先把数据库建立好]

    点击下一步,如下图,生成对应的SQL文本

    点击完成(有可能出现下面的警告),点击确定之后,如下图所示:

    当连接服务器成功以后,点击:执行脚本。则会在数据库MyFirstModelFirstEF中生成相应的数据表

        

    最后ModelFirstEFDemo整体结构如下所示:

    最后在ConsoleApplication中做一个增加数据的Demo

    DbContext context = new Model1Container();
    
    //使用导航属性 新增CustomerInfo和OrderInfo数据
    CustomerInfo customer = new CustomerInfo()
    {
        customerName = "ModelFirstTestOne",
        customerDate = DateTime.Now
    };
    customer.OrderInfo.Add(new OrderInfo()
    {
        orderName = "ModelFirstTestTwo"
    });
    context.Set<CustomerInfo>().Add(customer);
    context.SaveChanges();

    此时数据库数据如下所示:

    参考文章:

    ASP.NET MVC EF直接更新数据(不需查询):http://www.cnblogs.com/Dr-Hao/p/5255630.html

    ASP.NET EF(LINQ/Lambda查询):http://www.cnblogs.com/Dr-Hao/p/5356928.html

    ASP.NET EF 使用LinqPad 快速学习Linq:http://www.cnblogs.com/Dr-Hao/p/5357112.html

     Ps:使用EF Model First时,若修改Model结构,或者字段,需要在**.edmx中做如下操作

    重复第7步骤:此时,数据库中没有数据表。我们在edm设计器上空白地方,右键-->根据模型生成数据库 [Model First EF不会帮我们创建数据库,只会帮我们创建表。所以我们要事先把数据库建立好]

    注意:更新Model到数据库时会删除原来表格和数据,再创建新的表格

    即为:原来表格中的数据都会删除掉,然后重新创建新的表格(对于数据量比较大的表格,不能这样操作),可以通过【手动修改数据库和edmx文件】

  • 相关阅读:
    (4.3)ODBC/OLE DB/ADO概念与使用情况
    查找至少连续出现三次的所有数字/连续3天的日期【LeetCode】
    javascript 事件触发
    document.referrer
    创业公司
    关于javascript 回调函数
    promise
    javascript deferred
    document.readystate
    window---->load, document------DOMContentLoaded
  • 原文地址:https://www.cnblogs.com/DrHao/p/5367196.html
Copyright © 2011-2022 走看看