ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:241.82KB ,
资源ID:16494292      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16494292.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(使用EF代码优先函数库操作现有数据库Word格式文档下载.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

使用EF代码优先函数库操作现有数据库Word格式文档下载.docx

1、后来我又写了第二篇自定义数据库结构映射的文章,讨论了覆盖默认的持久化映射规则,和自定义数据库结构的方法。今天的文章我将回答最近很多人问我的问题:“如何对现有的数据库使用EF代码优先类库?”使用EF“代码优先”类库操作现有数据库实际上,EF代码优先类库和现有的数据库工作的非常好,而且还是一个很好的编码至上的开发模式。特别是,你可以用“简单CLR对象”(即POCO)定义好模型对象,用默认的映射惯例,或用自定义的映射规则,从/往数据库里映射它们。下面分步示范了使用EF“代码优先”类库操作现有数据库的方法。第一步:创建一个新的ASP.NET Web应用程序项目让我们从创建一个新的ASP.NET Web

2、应用程序项目开始。我前两篇EF“代码优先”文章用的是ASP.NET MVC这篇文章我将用ASP.NET Web窗体(来实现)。请注意,不论你使用哪种类型的ASP.NET应用程序,背后的EF理念都是相同的。我们使用VS 2010(或者免费的Visual Web Developer 2010体验版)的“文件-新建项目”菜单,并选择“ASP.NET Web应用程序”项目模板来创建新的程序。VS 2010里新的“ASP.NET Web应用程序”项目是一个很好的初学者模板,它的默认母板布局页面设计使用的是CSS(我在以前的文章里提到了新的初学者项目模版)。当创建完毕以后,你可以看到它里面包含下面这些文件

3、:我们并不需要这些文件(实际上也可以使用“ASP.NET空Web应用程序”模版)但如果用它们的话,可以让我们的程序看起来更漂亮一些。第二步:添加对EF代码优先库的引用下一步将为我们的项目添加对EF代码优先类库的引用。在解决方案资源管理器上右击“引用”节点,并选择“添加引用”。你需要引用“Microsoft.Data.Entity.Ctp.dll”文件,你下载并安装EF代码优先类库后,它安装在“Program FilesMicrosoft ADO.NET Entity Framework Feature CTP4Binaries”文件夹里。添加完引用后,项目引用窗口类似下图:第三步:Northw

4、ind数据库如果你的SQL Server数据库已经安装了Northwind(或者其它的数据库),你可以跳过这一步。如果你尚未安装,可以在这里下载它。你既可以使用里面的.SQL文件来将它安装到SQL数据库里,也可以拷贝Northwind.mdf这个SQL Express文件到你应用程序的App_Data文件夹里:第四步:创建我们的模型层现在我们来写模型类,并使用EF“代码优先”类库将它们映射到我们的Northwind数据库。下面就是所有要写的代码就这些:下面是这些代码的详细工作原理:POCO模型类EF“代码优先”类库允许我们使用“简单CLR对象”(即POCO)来表现数据库里的实体。也就是说我们的

5、模型类不需要继承自一个基类,也不需要实现任何的接口或特性(attribute)。这样可以使我们的模型类型保持整洁并且“持久化无关”。前面我们定义了两个POCO类“Product” (产品)和“Category” (种类)用来表示Northwind数据库里的“Product” (产品)和“Category” (种类)表。两个类的属性分别对应表的各个列。“Product” (产品)或“Category” (种类)的实例分别对应表里的一行。可空列请注意“Product” (产品)类里有些属性被定义成可空属性(即Decimal?说明它是一个可空类型)。数据表的可空列(Nullable column)的

6、类型如果是值类型的话,在模型类里应该用可空属性表示:如果在模型类中,你不会访问可空列,你可以选择省略它。比如说,Northwind的“Product” (产品)表里的“QuantityPerUnit”是一个可空的nvarchar类型,而“UnitsOnOrder”列是一个可空的smallint型。我在定义上面的“Product” (产品)类时省略掉了这些属性。因为它们在数据库里是可空的,所以我在执行读取、插入、更新和删除操作时不会有任何问题。关联属性和延迟加载EF“代码优先”类库使应用数据库里的主键/外键关系时变得更容易,它们通过模型类的属性表示,我们可以通过遍历模型类来使用这些关系。前面我们

7、在“Product” (产品)类里定义了一个“Category” (种类)属性,在“Category” (种类)类里定义了一个“Product” (产品)属性。通过访问这些属性,可以让我们使用两个表之间的主键/外键关系,并获取相关模型实例的引用。注意,这些属性依然是“POCO”对象,不需要使用任何EF定义的集合类型来定义它们。标记为“virtual”的关联属性默认采用的是延迟加载技术。也就是说,如果你抓取的是“Product” (产品)实体,除非显式访问,则不会从数据库中加载它的“Category” (种类)方面的信息(除非当你在使用LINQ查询抓取Product对象时,显式指定获取Categ

8、ory的数据) 。EF 场景(Context)类一旦创建好了“Product” (产品)和“Category” (种类)POCO类,我们用EF“代码优先”类库来创建一个”场景(context)”类来从/往数据库映射我们的POCO模型类:上面的“Northwind”类是一个场景(Context)类,用来从/往数据库映射我们的POCO模型类。它从EF“代码优先”类库里的DbContext这个基类继承下来,通过两个属性来陈列数据库中相应的表。在这个示例中,我们用默认的“惯例高于配置”映射规则来从/往数据库映射类型。如果我们要让模型类的对象模型跟数据库的结构有些差异,我们也可以覆写“OnModelCr

9、eating”函数来指定自定义的映射规则。我前面的EF“代码优先”类库文章讲解了相关方法。第五步:配置数据库连接字符串我们已经写好了定义模型层的所有代码,在使用它之前最后一步是设置连接到数据库的连接字符串。在我的第一篇EF“代码优先”类库文章里,我介绍了EF“代码优先”类库提供的一个很酷的选项,就是它可以为你自动创建/重新创建数据库的结构。这个选项对新建应用系统开发的情况特别有用它允许你在项目早期只关注与模型层,而不需要在模型改动时,花时间更新你的数据库结构。更重要的是,这个数据库自动创建功能只是一个选项它不是必须的。如果你的数据库连接字符串指向的是一个已有的数据库,那EF“代码优先”类库不会

10、自动创建一个新的。而且这个自动创建选项只在你显式指明的情况下EF才会这样做因此你不必担心它会删除并重建你的数据库,除非你显式地告诉它应该这么做。在这篇文章里,我们不会自动创建数据库。而是通过在web.config文件里添加一个“Northwind”连接字符串指向我们已有的Northwind数据库: add name=Northwind connectionString=data source=.SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|northwind.mdf;User Instance=true

11、providerName=System.Data.SqlClient /connectionStringsEF“代码优先”类库在查找连接字符串时,按照惯例,根据场景(Context)类名来寻找。因为我们的场景(Context)类名字叫“Northwind”,所以默认寻找名为“Northwind”连接字符串。上面我们配置Northwind连接字符串使用本地的SQL Express数据库,你也可以指向一个远程的SQL服务器。第六步:使用我们的模型类现在让我们使用Northwind模型类写一个非常简单的页面,从数据库中显示一些数据。我们从向ASP.NET项目,右击web项目,然后选择“添加-新项”,

12、然后选择“使用母板的Web窗体(Web Form using Master Page)”文件模板。我们把这个页面命名为“Product.aspx”并且采用ASP.NET Web项目默认的初学者模板自带的“Site.master”母板页。我们将在Product.aspx页面添加一个控件。并配置它只显示Products(产品)的名称和价格:而在后台文件里,通过编写下列的LINQ查询从我们的模型类来获取数据库中所有有效的产品(Product),并将它们绑定到上面的GridView控件上:现在当我们运行项目并浏览Products.aspx页面时,我们可以得到类似下图的产品列表:现在我们已经有了一个简单

13、的应用程序,它基于现有数据库调用EF“代码优先”类库。下载示例代码你可以从这里下载完整的示例代码,它假设你已经安装了EF“代码优先”类库 CTP 4版本和SQL Express。其它代码示例下面的代码演示了使用Northwind模型的其它常见用法。跨关系查询下面的LINQ查询演示了基于产品种类(Category)的名称来获取产品(Product)对象序列。注意下图我们的LINQ查询跨越产品(Product)对象和与其相关的种类(Category)对象的属性的编写方式。实际的过滤过程是在数据库引擎里面做的中间层只需要返回产品(Product)对象集合(也就更有效率):使用Find方法获取单个产品

14、(Product)对象除了允许你编写上面的LINQ查询以外,EF“代码优先”类库还支持对DbSet集合调用“Find()”方法,这样你就可以用类似下面的代码根据ID获取单个实例了:插入一个新的种类(Category)下面的代码演示了往数据库中添加一个新的种类(Category)的方法:留意我们创建种类(Category)对象,给它的属性赋值,然后将它加到语境(Context)的Categories集合的方式。接着我们调用语境(Context)对象的SaveChanges()把改动保存到数据库中。添加一个新的种类(Category)和产品(Product)(并关联它们)下面的代码演示了创建一个新

15、的种类(Category)和一个新的产品(Product),并关联产品(Product)属于新建的种类(Category),最后将它们都保存进数据库:留意上面我们可以通过将新建种类(Category)的实例赋值给新建产品(Product)的“Category” (种类)属性, 将新建产品(Product)引用到新建种类(Category)实例。我们不需要显式地设置CategoryID外键属性这个会在保存进数据库时自动完成。EF使用一个叫做“工作单元”的模式它会跟踪语境(Context)里的多重改动,当“SaveChanges()”被调用时,它会将这些改动以原子事务的方式一并保存(要么全部成功保

16、存,要么全部失败)。这是保证你的数据库不会被污染(即有些保存了,有些却没有)的简便方法。在上面的代码中,种类(Category)和产品(Product)要么全保存了,要么全部没有(会扔出来有一个异常)。更新一个产品(Product)并保存下面的代码演示了获取和更新一个产品(Product),并保存回数据库的方式。前面我示例了使用Find()函数根据ProductID获取单个产品(Product)的方法。下面我们写一个根据ProductName获取特定产品(Product)的LINQ查询:我们可以做多次更改(任何对象,新建的对象也是)。当我们调用SaveChanges()时,会以一个事务的形式将

17、它们保存到数据库中。默认惯例 vs 自定义映射规则之前我们创建产品(Product)和种类(Category)类时,我们使用的是EF“代码优先”类库默认的惯例从/往数据库中映射类型。这让我们避免了自己指定映射规则,保持干净的代码。当然肯定也有你不喜欢数据库结构的时候,而希望有自己不同形状的模型类。参见我的自定义数据库结构映射文章来了解使用EF指定自定义映射规则的方法。这些方法也同样适用于已有的数据库。总结我的确很喜欢EF“代码优先”类库的功能,并认为它提供了极佳的编码至上的数据处理方式。它很好,很强大。我喜欢它是因为它让代码保持干净,可维护并且很简洁。希望这三篇文章能够让你一瞥它的功能 针对新的或已有的数据库(的功能)。你可以从这里下载EF“代码优先”类库 CTP 4版本。未尽事宜请参看ADO.NET团队的文章: EF CTP 4发布公报 EF CTP 4工作效率上的提高 EF CTP 4代码优先类库攻略 数据注解(DataAnnotation)和代码优先类库 代码优先类库的默认公约 Scott Hanselman的CTP 4攻略希望这能对您有所帮助。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1