zoukankan      html  css  js  c++  java
  • Entity Framework 4 in Action读书笔记——第二章:开始Entity Framework之旅(2)

    这一篇我们就来构建我们的应用程序。

    一、创建程序集

    1.在VS2010中,创建一个空的解决方案,命名为OrderIT。

    2.在解决方案中添加一个类库项目,命名为OrderIT.Model,同时添加引用System.Data.Entity。

    3.在解决方案中再添加一个ASP.NET MVC 3应用程序项目,添加OrderIT.Model的应用。

    完成上面的步骤,最后的效果如下图:

    二、使用database-first方法设计实体

    开始之前,先准备好程序所用的数据库。

    数据库脚本下载

    在数据库中新建一个名为OrderIT的数据库,然后执行上面的脚本即可。

    导入数据库

    1.在OrderIT.Model中添加一个新项,选择ADO.NET Entity Data Model,命名为Model.edmx,点击下一步。

    2.选择Generate from Database,下一步。

    3.选择一个连接或者新建一个连接,下一步。

    4.选择如下面图所示的表,点击完成。

    详细步骤如下图所示:

    2

    3

    4

    5

    最后效果如下图:

    12

    从头开始创建实体

    1.删除Company实体,会有一个询问对话框,选择“NO”,这样虽然实体被删除了,但是数据库的信息还保存在EDMX文件中。

    2.在设计器中右击,选择Add > Entity。

    3.在弹出的Add Entity中填入Entity name为Company,Entity Set为Companies,Property name为CompanyId,点击“OK”,如下图中所示。

    6

    4.Company实体出现在了设计器中,右击Company实体,选择Properties,在属性窗口中设置Abstract为True

    5.右击Company实体,选择Add > Scalar Property,键入Name,回车。这样就在Company类中加入了Name属性。

    6.在Name属性上右击,选择Properties,在属性窗口中设置Max Length为30(这个值跟数据库中映射列的长度一致)。

    7.同样添加Version属性,属性窗口中Type设为Binary,StoreGeneratedPattern设置为Computed。

    这样就创建完了Company实体

    在创建Customer实体之前,先创建AddressInfo

    1.在设计器的空白处右击,选择Add > Complex Type。

    2.Model Browser窗口打开,键入AddressInfo,回车。

    3.在AddressInfo上右击,选择Add >Scalar Property > String,键入Address,回车。

    4.在Address属性上右击,选择Properties,修改Max Length为20。

    5.重复3-4步,添加City, Country,和ZipCode属性。如下图所示:

    7

    下面创建Customer实体和Supplier实体

    1.在设计器空白处右击,选择Add > Entity。

    2.在Add Entity中填写Entity name为Customer,Base type选择刚才创建的Company,然后点击“OK”。

    3.右击实体,选择Add > Complex Property,键入BillingAddress,回车。

    4.右击BillingAddress,选择Properties,在属性窗口中选择Type为AddressInfo。

    5.根据上一篇中的分析,在Customer中还要加入名为ShippingAddress的Complex Property,Username,Password,WSEnabled的Scalar Property,不要忘了设置Max Length,还有WSEnabledType属性为Boolean。

    6.创建Supplier实体,加入名为PaymentDays和IBAN的Scalar Property,PaymentDays的Type属性为Int16,设置IBAN的Fixed Length为True,Max Length为27。

    下面创建映射

    1.右击Company实体,选择Table Mapping。

    2.在Mapping Details窗口中,选择Company表。当属姓名匹配列名时,映射自动完成,不匹配的话就要手动完成。

    9

    3.右击Customer实体,选择Table Mapping。

    4.在Mapping Details窗口中,选择Company表。在右边一列中选择跟表列相匹配的属性。如下图:

    10

    5.点击Add a Condition,选择Type,在Value/Property输入C,如上图。

    6.Supplier操作跟Customer一样,如下图:

    11

    修改实体

    Order类不用大的改动,只要把与地址有关的属性删除,添加一个AddressInfo类型,即删除ShippingAddress,ShippingCity,ShippingCountry,ShippingZipCode,添加一个ShippingAddress。然后再修改映射就可以了。

    修改Product和Shoe,Shirt的继承关系。

    1.右击Product和Shoe之间的关联,选择Delete。

    2.右击Product,选择Add > Inheritance。

    3.设计器弹出一个对话框,选择Product为base entity,Shoe为derived entity。

    14

    4.删除Shoe实体中的ProductId属性。

    5.选择Shoe实体,打开Mapping Details对话框,映射ProductId列到ProductId继承属性。

    6.对Shirt做上面同样地步骤。

    设计关系

    1.右击Customer实体,选择Add > Association。

    2.在弹出的Add Association对话框中,按图中选择。

    15

    3.点击OK后,在两个实体之间出现的关联线上双击,在出现的参照约束对话框中,从Principal下拉列表中选择Customer,它代表关系中的主实体。在下面的表格中,选择Order实体的CustomerId属性作为外键。这表示关系的另一边(Order)通过CustomerId属性关联到主键。如下图:

    16

    4.右击上面的关联线,选择Properties,设置End1 on Delete属性为Cascade。

    上面的步骤只适合一对多的关系,对于多对多的关系,利用下面的方法。

    1.创建Product和Supplier实体间的关联。

    2.右击两个实体之间的关联线,选择Table Mapping。

    3.在Mapping Details窗口中,映射关联到ProductSupplier表。

    4.ProductId自动映射,给Supplier选择SupplierId,如下图:

    17

    设计好的模型如下图:

    写在后边的话

    现在模型已经设计好了,但是还有问题需要回答。设计类的代码在哪里?怎样自定义产生的代码?怎样访问数据库?下一篇解决这些问题。

     

  • 相关阅读:
    一千行 MySQL 学习笔记
    linux学习(二)
    linux学习(二)
    内联元素
    内联因素1.默认内容撑开盒子大小
    定位absolute使内联支持宽高(块属性变为内联,内容默认撑开)margin auto 失效
    over
    float浮动问题:会造成父级元素高度坍塌;
    float的元素脱离文档流,但不完全脱离,只是提升了半层;
    float了的元素和内联元素不支持margin:auto
  • 原文地址:https://www.cnblogs.com/nianming/p/2141489.html
Copyright © 2011-2022 走看看