ASP.NET 4.0 与 Entity Framework 4-第一篇-采用Model-First 开发方式创建数据库


LloydSheng 写于 2010年04月16日上午 10:37 | 评 论一下

本文是《ASP.NET 4.0与Entity Framework 4》系列文章的第一篇,该系列将向你介绍如何采用Entity Framewok4开发ASP.NET程序。文章会一步一步的教您使用Entity Framewok4创建数据库。创建好的数据库将会在以后该系列文章中使用。

摘要

已经发布的Visual Studio 2010 中包含了Entity Framewok4,它是微软发布的第二版Entity Framewok(以下简称EF)。它在EF 1的基础上,根据开发者的建议,进行了非常多的改进,包含了与NHibernate之类O-R Mapping 工具类似的功能。O-R Mapping工具给我们生成了用于检索和持久化数据的繁琐代码。我们只需要用可视化的工具创建类与表,表关系,存储过程和其他数据库对象的映射。EP4 最大的一个新功能是:允许我们创建一个ADO.NET 实体对象模型,然后根据这个模型来产生数据库。以前一般的做法是,先创建数据库,后产生实体模型。当然,EF4还是支持一般的数据库设计,但可以使用 Visual Studio 基于对象模型设计数据库,已经是改进了许多。

本文的目的是介绍如何如何通EF4创建一个ADO.NET 实体数据模型。采用的工具是Visual Studio 2010 Beta 2,可能会与最终发布的版本操作有所不同。以后的文章将会基于该应用逐步深入的讲解如何采用EP4查询展示数据,调用存储过程,对EF4产生的类进行自定 义等等。

采用Model-First方式创建数据库

步骤1:创建解决方案

1.运行Vistual Studio 2010 Beta2。

2.在开始页面上点击“new project”。

3.点击C#节点,可以看到已经安装的项目模板。

4.在模板列表中选择ASP.NET Web Application。

5.输入项目名“OrderSystem”,点击“ok”。

这时,VS会在你指定的目录,创建一个解决方案,在该目录的子文件下创建一个网站项目。

步骤2:创建ADO.NET 实体对象模型

下面就是创建ADO.NET 生实体模型了。对于本程序来说,我们有Users和Addresses两个概念模型。一个user可能有多个address,在模型中要体现这个关系。

1.在OrderSystem上右键,选择Add,点击New Item..(或者使用快捷键Ctrl+Shift+A)。

2.点击C#节点下面的Data子节点。

3.选择ADO.NET Entity Data Model 模板。

4.将名字改为“OrderDB.edmx”,点击“Add”按钮。

ASP.NET 4.0 与 Entity Framework 4-第一篇-采用Model-First 开发方式创建数据库 - 天新 - 天新的博客

5.VS将会显示Entity Data Model Wizard.你可以选择模型的来源。

6.选择“Empty Model”,点击“Finish”按钮。

ASP.NET 4.0 与 Entity Framework 4-第一篇-采用Model-First 开发方式创建数据库 - 天新 - 天新的博客

OrderDB.edmx将会添加到你的项目中,同时会显示Entity Framework 设计器。

ASP.NET 4.0 与 Entity Framework 4-第一篇-采用Model-First 开发方式创建数据库 - 天新 - 天新的博客

 

步骤3:创建实体关系

下面将会创建user实体已经它与addresses实体的关系,首先创建user实体。

1.在Entity Framework 设计器右键,Add->Entity。

2.你会看到“Add Entity”对话框,输入实体名。需要注意的是,当你输入实体名时,系统会自动产生实体集合的名称(实体名是一个代表一条纪录的类的名称,实体集后则是 一个代表一组纪录的类的名称)。

3.VS默认会产生一个名为Id的主键。如果把你不想产生主键,不要选择“Create key property”。本例中需要主键,所以保持选择状态。

4.点击“OK”,UserAccout实体将会添加到实体图表中。

5.接下来是给实体添加属性。这些属性将会映射到数据表中的字段。我们将会添加FirstName和LastName属性。

6.在UserAccount上右击。选择Add->Scalar property。

7.将属性名改为FirstName。

8.在属性窗口中,将最大长度设为50,数据类型不用改,默认是String.

9.以同样的方式添加另一个名为LastName的属性,最大长度也设为50。

ASP.NET 4.0 与 Entity Framework 4-第一篇-采用Model-First 开发方式创建数据库 - 天新 - 天新的博客

下面是添加纪录创建时间和更新时间属性。我个人比较倾向于在每个实体中添加创建时间和更新时间属性,这样可以方便以后审查。这两个属性将作为一个复 杂类型添加在每个实体中。复杂类型可以让你定义一组属性,满足各种实体的需求。

10.模型浏览窗口中,在Complex Types 节点上右击。有时可能要多点击几下才能选中,这可能是VS Beta2的bug。点中Coomplex Types后,在弹出的菜单中选择“Create Complex Type”。

ASP.NET 4.0 与 Entity Framework 4-第一篇-采用Model-First 开发方式创建数据库 - 天新 - 天新的博客

11.将复杂类型的名字改为 AuditFields。

12.右击模型浏览窗口的AuditFileds复杂属性,在弹出的菜单中,选择Add->Scalar Property->DateTime。

13.将名字改为“InsertDate”。

14.用同样的方式添加UpdateDate属性到该复杂类型中。

15.接下来你可以添加该复杂类型到UserAccount实体了,右击UserAccount实体,在弹出的菜单中选择 Add->Complex Property。

16.将名字改为“AuditFileds”,数据类型默认为AudtFields。

17.在设计器上右击,弹出的菜单中选择Add->Entity.

18.实体名字改为“Address”,点击“OK”。

19.给Address实体添加Address1,Address2,City,State和Zip属性,所有的属性都为String类型,数据长 度分别为:50,50,50,2和5。

20.在属性窗口中,将Address2的Nullable设置为True,其他几个属性都是必填的。

ASP.NET 4.0 与 Entity Framework 4-第一篇-采用Model-First 开发方式创建数据库 - 天新 - 天新的博客

21.同样,给Address实体添加AuditFileds属性。

下面就是建立UserAccount和Address实体之间的关系了。

22.右击UserAccount实体,弹出菜单中选择Add->Association。

ASP.NET 4.0 与 Entity Framework 4-第一篇-采用Model-First 开发方式创建数据库 - 天新 - 天新的博客

23.你会看到在Add Association窗口默认设置好了UserAcccount和Address一对多的关系,如果你要设置不同类型的关系,在Mutiplicity 下拉框中选择就可以了,本例中保持默认就可以。点击“OK”后,你会看到Address表多了一个UserAccountId属性。

 

步骤4:生成数据库

实体已经创建好了,下面是创建数据库了。在VS操作这些非常方便,它将会产生用来创建表,索引和表关系的DLL语句脚本。

1.在设计器上右击,选择Generate Database from Model.将会出现Generate Database Wizard窗口。

2.点击“New Connection”按钮。

3.输入Server name,选择Windows Authentication 或 SQL Server Authentication,这取决于你数据库系统的连接方式。

4.数据库名输入“OrderSystem”,点击“OK”。

ASP.NET 4.0 与 Entity Framework 4-第一篇-采用Model-First 开发方式创建数据库 - 天新 - 天新的博客

5.这时VS会提示你数据库不存在,问你是否新建一个数据库,点击“Yes”。

6.数据库“OrderSystem”创建好后,会返回到Generate Database Wizard窗口,点击“Next”。

7.用于创建数据库的DLL语句这时就生成了。

ASP.NET 4.0 与 Entity Framework 4-第一篇-采用Model-First 开发方式创建数据库 - 天新 - 天新的博客

8.点击“Finish”按钮。

9.你会看到项目中多了一个OrderDB.edmx.sql文件,它里面包含用来创建数据库的DLL语句。文件内容如下:

  1. SET QUOTED_IDENTIFIER OFF;  
  2. SET ANSI_NULLS ON;  
  3. GO  
  4. USE [OrderSystem]  
  5. GO  
  6. IF SCHEMA_ID(N'dbo') IS NULL EXECUTE(N'CREATE SCHEMA [dbo]')  
  7. GO  
  8. -- --------------------------------------------------  
  9. -- Dropping existing FK constraints  
  10. -- --------------------------------------------------  
  11. IF OBJECT_ID(N'[dbo].[FK_UserAccountAddress]', 'F') IS NOT NULL  
  12.     ALTER TABLE [dbo].[Addresses] DROP CONSTRAINT [FK_UserAccountAddress]  
  13. GO  
  14. -- --------------------------------------------------  
  15. -- Dropping existing tables  
  16. -- --------------------------------------------------  
  17. IF OBJECT_ID(N'[dbo].[UserAccounts]', 'U') IS NOT NULL  
  18.     DROP TABLE [dbo].[UserAccounts];  
  19. GO  
  20. IF OBJECT_ID(N'[dbo].[Addresses]', 'U') IS NOT NULL  
  21.     DROP TABLE [dbo].[Addresses];  
  22. GO  
  23. -- --------------------------------------------------  
  24. -- Creating all tables  
  25. -- --------------------------------------------------  
  26. -- Creating table 'UserAccounts'  
  27. CREATE TABLE [dbo].[UserAccounts] (  
  28.     [Id] int  NOT NULL,  
  29.     [FirstName] nvarchar(50)  NOT NULL,  
  30.     [LastName] nvarchar(50)  NOT NULL,  
  31.     [AuditFields_InsertDate] datetime  NOT NULL,  
  32.     [AuditFields_UpdateDate] time  NOT NULL  
  33. );  
  34. GO  
  35. -- Creating table 'Addresses'  
  36. CREATE TABLE [dbo].[Addresses] (  
  37.     [Id] int  NOT NULL,  
  38.     [Address1] nvarchar(50)  NOT NULL,  
  39.     [Address2] nvarchar(50)  NULL,  
  40.     [City] nvarchar(50)  NOT NULL,  
  41.     [State] nvarchar(2)  NOT NULL,  
  42.     [Zip] nvarchar(5)  NOT NULL,  
  43.     [AuditFields_InsertDate] datetime  NOT NULL,  
  44.     [AuditFields_UpdateDate] time  NOT NULL,  
  45.     [UserAccountId] int  NOT NULL  
  46. );  
  47. GO  
  48. -- --------------------------------------------------  
  49. -- Creating all Primary Key Constraints  
  50. -- --------------------------------------------------  
  51.   
  52. -- Creating primary key on [Id] in table 'UserAccounts'  
  53. ALTER TABLE [dbo].[UserAccounts] WITH NOCHECK  
  54. ADD CONSTRAINT [PK_UserAccounts]  
  55.     PRIMARY KEY CLUSTERED ([Id] ASC)  
  56.     ON [PRIMARY]  
  57. GO  
  58. -- Creating primary key on [Id] in table 'Addresses'  
  59. ALTER TABLE [dbo].[Addresses] WITH NOCHECK  
  60. ADD CONSTRAINT [PK_Addresses]  
  61.     PRIMARY KEY CLUSTERED ([Id] ASC)  
  62.     ON [PRIMARY]  
  63. GO  
  64. -- --------------------------------------------------  
  65. -- Creating all Foreign Key Constraints  
  66. -- --------------------------------------------------  
  67. -- Creating foreign key on [UserAccountId] in table 'Addresses'  
  68. ALTER TABLE [dbo].[Addresses] WITH NOCHECK  
  69. ADD CONSTRAINT [FK_UserAccountAddress]  
  70.     FOREIGN KEY ([UserAccountId])  
  71.     REFERENCES [dbo].[UserAccounts]  
  72.         ([Id])  
  73.     ON DELETE NO ACTION ON UPDATE NO ACTION  
  74. GO  
SET QUOTED_IDENTIFIER OFF; SET ANSI_NULLS ON; GO USE [OrderSystem] GO IF SCHEMA_ID(N'dbo') IS NULL EXECUTE(N'CREATE SCHEMA [dbo]') GO -- -------------------------------------------------- -- Dropping existing FK constraints -- -------------------------------------------------- IF OBJECT_ID(N'[dbo].[FK_UserAccountAddress]', 'F') IS NOT NULL     ALTER TABLE [dbo].[Addresses] DROP CONSTRAINT [FK_UserAccountAddress] GO -- -------------------------------------------------- -- Dropping existing tables -- -------------------------------------------------- IF OBJECT_ID(N'[dbo].[UserAccounts]', 'U') IS NOT NULL     DROP TABLE [dbo].[UserAccounts]; GO IF OBJECT_ID(N'[dbo].[Addresses]', 'U') IS NOT NULL     DROP TABLE [dbo].[Addresses]; GO -- -------------------------------------------------- -- Creating all tables -- -------------------------------------------------- -- Creating table 'UserAccounts' CREATE TABLE [dbo].[UserAccounts] (     [Id] int  NOT NULL,     [FirstName] nvarchar(50)  NOT NULL,     [LastName] nvarchar(50)  NOT NULL,     [AuditFields_InsertDate] datetime  NOT NULL,     [AuditFields_UpdateDate] time  NOT NULL ); GO -- Creating table 'Addresses' CREATE TABLE [dbo].[Addresses] (     [Id] int  NOT NULL,     [Address1] nvarchar(50)  NOT NULL,     [Address2] nvarchar(50)  NULL,     [City] nvarchar(50)  NOT NULL,     [State] nvarchar(2)  NOT NULL,     [Zip] nvarchar(5)  NOT NULL,     [AuditFields_InsertDate] datetime  NOT NULL,     [AuditFields_UpdateDate] time  NOT NULL,     [UserAccountId] int  NOT NULL ); GO -- -------------------------------------------------- -- Creating all Primary Key Constraints -- --------------------------------------------------  -- Creating primary key on [Id] in table 'UserAccounts' ALTER TABLE [dbo].[UserAccounts] WITH NOCHECK ADD CONSTRAINT [PK_UserAccounts]     PRIMARY KEY CLUSTERED ([Id] ASC)     ON [PRIMARY] GO -- Creating primary key on [Id] in table 'Addresses' ALTER TABLE [dbo].[Addresses] WITH NOCHECK ADD CONSTRAINT [PK_Addresses]     PRIMARY KEY CLUSTERED ([Id] ASC)     ON [PRIMARY] GO -- -------------------------------------------------- -- Creating all Foreign Key Constraints -- -------------------------------------------------- -- Creating foreign key on [UserAccountId] in table 'Addresses' ALTER TABLE [dbo].[Addresses] WITH NOCHECK ADD CONSTRAINT [FK_UserAccountAddress]     FOREIGN KEY ([UserAccountId])     REFERENCES [dbo].[UserAccounts]         ([Id])     ON DELETE NO ACTION ON UPDATE NO ACTION GO 

需要注意的是,现在数据库还没有创建相应的表。要创建这些表,你可以打开OrderDB.edmx.sql文件,右击选择Execute SQL。这时VS会提示你连接到数据库系统,输入相关信息,点击“Connect”,登陆成功后,将会执行这些SQL语句,执行完后数据库的表就创建好 了。

ASP.NET 4.0 与 Entity Framework 4-第一篇-采用Model-First 开发方式创建数据库 - 天新 - 天新的博客

小结

以上就是采用Entity Framework的Model First方式创建数据库的的所有步骤了。相比以前的版本,有相当大的改进,现在你只需要设计对象模型,VS会自动帮你生成创建数据表,索引,表关系的语 句。

本文是该系列文章的第一篇。以后的文章将会带你逐步深入到Entity Framework4和ASP.NET 4.0的世界。下一篇文章将会向你介绍如何呈现这些数据,以及采用Entity Framework4进行数据的增删改查,希望你能喜欢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FastReport.Net 4.0 是一款功能强大的报表生成工具,适用于 .Net 平台。它提供了丰富的报表设计功能和灵活的数据源支持,让开发人员能够快速轻松地生成各种复杂的报表。 首先,FastReport.Net 4.0 具备强大的报表设计功能。它提供了丰富的报表元素和控件,包括文本框、图像、表格、图表等。用户可以通过直观的拖放操作,将这些报表元素添加到报表中,并设置其属性和样式。同时,还可以对这些元素进行排列和布局,以满足各种不同的报表需求。此外,FastReport.Net 4.0 还支持自定义报表模板,用户可以根据特定的需求,设计出符合自己品牌形象和要求的报表模板。 其次,FastReport.Net 4.0 支持多种数据源。用户可以从各种数据源中获取数据,如数据库、XML 文件等。FastReport.Net 4.0 提供了内置的数据源控件和设计器,使用户能够方便地连接到数据源,并使用 SQL 查询语言或 LINQ 进行数据查询。同时,FastReport.Net 4.0 还支持数据过滤和排序,以及数据分组和汇总等高级数据处理功能,使用户能够更好地充分利用数据,生成更加准确和有用的报表。 最后,FastReport.Net 4.0 提供了多种报表输出格式的支持。用户可以将报表输出为 PDF、Excel、HTML、图片等多种格式,以方便地进行分享和传播。同时,FastReport.Net 4.0 还支持打印和预览功能,用户可以在设计和生成报表后,直接对其进行打印和预览,以确保报表的质量和准确性。 综上所述,FastReport.Net 4.0 是一款功能强大、易于使用的报表生成工具,它具备丰富的报表设计功能、灵活的数据源支持以及多种输出格式的选择。无论是企业还是个人,都可以通过 FastReport.Net 4.0 快速轻松地生成各种复杂的报表,提高工作效率和数据分析能力。 ### 回答2: FastReport.Net 4.0是一款.NET平台上的报表生成工具。它为开发人员提供了在应用程序中创建和生成定制化报表的功能。 FastReport.Net 4.0具有以下主要特点: 1.报表设计器:FastReport.Net 4.0提供了一个直观易用的报表设计器,开发人员可以使用设计器来创建报表模板,设计报表布局、添加数据源和字段。 2.数据源支持:FastReport.Net 4.0支持多种数据源,包括数据库、XML文件和对象集合等。开发人员可以轻松地将数据源与报表模板进行关联,并获取、处理和显示数据。 3.报表输出:FastReport.Net 4.0支持多种报表输出格式,包括PDF、Excel、HTML、Word和图像等。开发人员可以根据需求选择合适的输出格式,方便地将报表导出到不同的目标。 4.报表展示:FastReport.Net 4.0提供了详细的报表展示功能,可以在应用程序中显示和打印报表。开发人员可以自定义报表的展示方式和样式,以满足不同用户的需求。 5.数据处理:FastReport.Net 4.0提供了丰富的数据处理功能,开发人员可以对报表中的数据进行排序、过滤、分组和汇总等操作。这样可以从海量数据中提取需要的信息,并按照不同的维度进行分析。 综上所述,FastReport.Net 4.0是一款功能强大、易用灵活的报表生成工具,适用于.NET开发人员在应用程序中生成、展示和处理报表。它可以大幅提高开发人员的工作效率,同时满足不同用户对报表展示和数据处理的需求。 ### 回答3: FastReport.Net 4.0 是用于开发和设计报表的一个功能强大的工具。它提供了丰富的报表设计功能,可以与 .Net 平台完美集成。 FastReport.Net 4.0 支持多种数据源,包括数据库、XML 文件、JSON 数据和对象集合等。它可以轻松连接到不同类型的数据库,如 SQL Server、Oracle、MySQL 等,并且可以执行复杂的查询操作。它还支持与 LINQ 查询和 Entity Framework 的集成,方便了数据的筛选和排序。 FastReport.Net 4.0 提供了一套丰富的报表控件,如表格、图表、文本框、图片等。用户可以根据自己的需要进行布局和设计,实现复杂的报表展示效果。同时,它还支持报表的分页和分组,可以对数据进行更详细的分类和汇总。 FastReport.Net 4.0 还提供了强大的计算和数据处理功能。用户可以使用内置的函数和表达式进行数据计算和条件判断,支持各种数学运算、字符串操作和逻辑运算。此外,用户还可以自定义函数和变量,以满足特定的业务需求。 FastReport.Net 4.0 的设计界面简单直观,用户可以快速上手使用。它提供了丰富的报表设计器工具,包括对齐、调整大小、层叠排列等功能。用户可以通过拖拽控件和设置属性来设计自己的报表,实时预览效果。 总之,FastReport.Net 4.0 是一个功能强大、易于使用的报表工具,能够帮助开发人员快速设计和生成各种复杂的报表。无论是企业的经营报表、统计报表还是个人的数据分析报告,FastReport.Net 4.0 都能够满足需求,并提供高质量的输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值