zoukankan      html  css  js  c++  java
  • ASP.NET_4.0_与_Entity_Framework_4-第一篇-采用Model-First_开发方式创建数据库

    本文是《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”按钮。

     

     

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

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

     

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

     

     

    步骤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。

     

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

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

     

    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,其他几个属性都是必填的。

     

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

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

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

     

    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”。

     

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

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

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

     

    8.点击“Finish”按钮。

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

    view source

    print?

    01 SET QUOTED_IDENTIFIER OFF;
    02 SET ANSI_NULLS ON;

    03 GO
    04 USE [OrderSystem]

    05 GO
    06 IF SCHEMA_ID(N'dbo') IS NULL EXECUTE(N'CREATE SCHEMA [dbo]')

    07 GO
    08 -- --------------------------------------------------

    09 -- 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

     

     

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

     

    小结

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

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

  • 相关阅读:
    tomcat配置多实例
    内存溢出的三种情况及解决办法分析
    se最佳设置
    Squid 3.1.7通过mysql_auth方式认证
    java在linux下显示中文解决方法
    AD域批量的导入导出账号 转
    JSP技术分享:常用禁止缓存的四种方法
    大幅优化myeclipse的速度&关闭自动更新
    迷你图标集大集合:5000+ 30套免费的图标(不得不下,设计必备)
    【转】开发实战:舍得网44587行代码开发经验
  • 原文地址:https://www.cnblogs.com/yuanye0918/p/3443552.html
Copyright © 2011-2022 走看看