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

一、创建程序集

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

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

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

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

image

二、使用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(这个值跟数据库中映射列的长度一致)。

这样就创建完了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

设计好的模型如下图:

21

写在后边的话

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

 

 

 

 

作者: 田念明 发表于 2011-08-16 20:45 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"