【原文地址】Free ASP.NET MVC eBook Tutorial
【原文发表日期】 Tuesday, March 10, 2009 2:54 PM
对即将发布的新ASP.NET MVC框架(说真的,随时都会发布 -- 请静候宣布),社区里到处洋溢着兴奋。就象对任何新的东西,大家也开始征询更多的教程/例程/文档,以了解如何起步和用它来建造应用。
在过去的几个月内,我一直在给Scott Hanselman, Rob Conery, 和 Phil Haack 为Wrox出版社写作的一本ASP.NET MVC方面的书帮着贡献章节。该书目前正在制作过程中,不久就会在书店发行(你今天就可以在亚马逊书店预订)。
我撰写了该书的第一章,是个185页的教程,从头开始按部就班地建造起一个小型但完整的ASP.NET MVC应用。我与Wrox出版社的协议是,我为他们免费撰写这个教程,作为回报,他们将提供免费的PDF下载。
我非常兴奋地宣布,你现在可以 下载这个免费的教程章节了(14M的PDF文件),该教程是在“Creative Commons Attribution No Derivatives”许可下发布的,意味着你可以共享,发布,打印或者发给任何人。
NerdDinner ASP.NET MVC 教程
该教程从在Visual Studio中使用“文件->新项目”命令开始,创建一个崭新的ASP.NET MVC项目,然后逐步添加功能和特性,在过程中,它讨论了如何:
- 创建数据库
- 建造带有验证和业务规则的模型
- 使用控制器和视图实现数据列表和细节界面
- 实现CRUD(创建,读取,更新,删除)数据表单输入
- 使用ViewModel模式将信息从控制器中传给视图
- 使用用户控件和母版页在网站上重用界面
- 实现高效数据分页
- 使用认证和授权实现应用安全
- 使用AJAX实现动态更新
- 使用AJAX添加可交互性地图支持
- 执行自动化的单元测试(包括依赖注入和mocking)
该教程建造的应用名为“NerdDinner”,提供了一个简易的方式来在线组织,主持和查询基于新主题的晚餐活动:
Scott Hanselman 已经主持NerdDinners多年, 是他出主意来建造一个方便这个活动的应用的教程,他还在www.nerddinner.com提供了该应用的定制了皮肤的上线版本。
下载链接
希望本文对你有所帮助,
Scott
【附注】 该书刚进入制作过程,尚处于非编辑状态(意即专业编辑人员还没开始编辑),一旦最终文字出来,我们会更新PDF版本。
【附注二】 是的,这是我的博客过去几个月一直很冷清的原因之一,待我复原之后,请再次期待更多的博客帖子,:-)。
【原文地址】May 20th Links: ASP.NET, ASP.NET AJAX, .NET, Visual Studio, Silverlight, WPF
【原文发表日期】 Tuesday, May 20, 2008 10:02 PM
很抱歉,过去的几个星期贴子稀少,最近这里工作和生活都很忙。为活跃一下气氛,下面是我链接系列的新贴子。也请参阅我的ASP.NET 技巧,诀窍和教程网页和Silverlight 教程网页 (中文版)里我以前写的众多很受欢迎的文章的链接。
ASP.NET
ASP.NET AJAX
.NET
Visual Studio
Silverlight
WPF
希望本文对你有所帮助,
Scott
【原文地址】ASP.NET Dynamic Data Preview Available
【原文发表日期】Thursday, April 10, 2008 12:44 AM
几个月前,我们推出了ASP.NET 3.5 Extensions的预览版,该版本内含一堆今年稍后会发布的新特性(包括ASP.NET AJAX方面的改进,ASP.NET MVC,ASP.NET Silverlight支持,以及ASP.NET动态数据)。
该预览版中的ASP.NET动态数据(Dynamic Data)支持对一个很酷的新特性提供了初览,该特性允许你很快地建造使用LINQ to SQL或LINQ to Entities对象模型的数据驱动的网站。 ASP.NET动态数据允许你自动地根据你的ORM数据模型的元数据动态地生成功能完整的数据输入和报表网页。除了支持动态渲染模式外,它还允许你使用任何你想要的HTML或代码来覆盖和定制任何视图模板(给你完整的体验控制)。
ASP.NET动态数据预览
今天,我们发布了ASP.NET动态数据的更新版,你可以在这里了解相关详情和下载。
这个新的动态数据预览版现在可以与标准的内置ASP.NET数据控件(包括GridView,ListView,FormView,DetailsView等)协作了,动态数据支持允许这些控件自动地处理外键关系。例如,在一个GridView上,你现在将得到外键字段值的友好名称的自动显示,以及在编辑模式下这些值的自动下拉框选择支持:
新的动态数据支持还能根据你在数据模型类上设置的约束提供自动的UI验证支持(同时支持客户端和服务器端)。例如,如果数据库中的一个字段在大小上限于50个字符,并且被标记为不能为空,ASP.NET动态数据就会自动地将合适的UI控件校验器加到UI页上以强制这个约束。如果你在LINQ to SQL或LINQ to Entities数据模型类里改变了约束,UI就会自动地反应这些变动,并且在下一个web请求中强制新的约束。
除了标准的数据模型元数据外,你还可以声明自定义的元数据以进一步控制验证和对象界面的默认显示。
你既能在LINQ to SQL中,也能在LINQ to Entities中使用上面所有的特性。
Visual Studio动态数据项目向导(Project Wizard)
除了核心的ASP.NET动态数据运行时支持外,VS web工具开发团队今天还发布了新的动态数据项目向导的第一个预览版,该向导允许你很快地开始一个数据驱动的网站。该向导允许你选择数据库,然后选择你想用来建造 LINQ to SQL数据模型的数据表,视图和存储过程:
在创建数据模型之后,该向导允许你轻松地选择动态数据驱动的模板网页来建造界面:
然后你能选择每个网页上支持的数据插入、编辑、更新界面的类型:
在你点击“完成”之后,它会用你的数据模型类和数据界面网页配置生成一个项目。你可以在这里了解该向导的有关详情,以及观看一个实战示范的screencast。
如何入门
你可以在 这里了解这个新的动态数据预览版的详情以及下载它在本地运行。
你可以观看David Ebbo在MIX 08上做的动态数据讲座以了解其工作原理的细节。也看一下Scott Hunter这里的screencast,以及Brad Millington这里的screencast。 David这里还有一个贴子,讨论十二月份预览版与今天的预览版本之间的变动。
你可以在www.asp.net上这里的论坛上问问题或提交反馈。
希望本文对你有所帮助,
Scott
【原文地址】March 14th Links: ASP.NET, ASP.NET AJAX, ASP.NET MVC and .NET
【原文发表日期】 Friday, March 14, 2008 12:06 AM
我正从上个星期的MIX大会的主题演讲慢慢复原过来,一直在清理过去的几天积压的电邮。这个周末,我会尝试,赶着完成对博客上的评语的回复 - 对你们的一些问题的答复的迟滞,我表示歉意。
为重启博客,我想我应该发一个链接系列的新贴子。今天的贴子主要着重于ASP.NET和跟web相关的链接。不久我会发更多Silverlight 和 WPF方面的贴子。
ASP.NET
ASP.NET AJAX
ASP.NET MVC
.NET
希望本文对你有所帮助,
Scott
【原文地址】Feb 17th Links: ASP.NET, ASP.NET AJAX, Visual Studio, .NET
【原文发表日期】 Sunday, February 17, 2008 11:01 AM
这是我的链接系列的最新篇。也请参阅我的ASP.NET 技巧,诀窍和教程网页里我以前写的众多很受欢迎的文章的链接。
ASP.NET
ASP.NET AJAX
Visual Studio
.NET
希望本文对你有所帮助,
Scott
【原文地址】Jan 24th Links: ASP.NET, ASP.NET AJAX, Visual Studio, .NET, IIS
【原文发表日期】 Thursday, January 24, 2008 11:08 PM
才从亚洲回来,决定发一链接系列之新贴以示庆祝(因为我还没适应时差,无法入眠)。也请参阅我的ASP.NET 技巧,诀窍和教程网页里我以前写的众多很受欢迎的文章的链接。
ASP.NET
ASP.NET AJAX
Visual Studio
.NET
IIS
希望本文对你有所帮助,
Scott
【原文地址】Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)
【原文发表日期】 Monday, January 07, 2008 11:02 PM
LINQ (语言级集成查询)是VS 2008 和 .NET 3.5中提供的一个新特性。LINQ使得数据查询的概念成为.NET中的一等编程概念,允许你在你喜欢的编程语言中有效地表达查询。
LINQ的一个好处是,它允许你使用 VB 和 C#. 编写类安全的查询。这意味着,对你的代码,你会得到对LINQ查询的编译时检查,以及完整的intellisense和重构支持:
类安全的查询可用于大多数的场景,但也有些情形,你需要能在运行时动态构建查询的灵活性。例如,你也许要在应用中提供商业智能的界面,允许业务分析员用户使用下拉框在数据之上构造和表达他们自己的自定义查询/视图。
按惯例,这类动态查询场景经常是通过把字符串连接起来构建成动态SQL查询的方式来处理的。最近有几个人通过电邮问我该如何使用LINQ来处理这类场景。下面的贴子内容将描述如何使用LINQ开发团队提供的“动态查询库(Dynamic Query Library)”来动态地构建LINQ查询。
下载LINQ动态查询库
VS 2008样例下载网页上包括了指向一个VB和C#样例包的链接,该样例包内含一个很酷的动态查询LINQ辅助库。该动态查询库(以及相关文档)的直接链接如下:
VB和C#的DynamicQuery例程都包括了一个辅助库的源码实现,该辅助库允许你使用接受字符串参数(而不是类安全的语言运算符)的扩展方法来表示LINQ查询。你可以把C#或VB的DynamicQuery库的实现拷贝到你自己的项目中,然后在适当的地方根据用户的输入用它来动态地构建LINQ查询。
动态查询库的简单示例
你可以将DynamicQuery库用于任何LINQ数据provider,这些provider包括LINQ to SQL, LINQ to Objects, LINQ to XML, LINQ to Entities, LINQ to SharePoint, LINQ to TerraServer等等。动态查询库不是使用语言级的运算符或类安全的 lambda 扩展方法来构建LINQ查询,而是提供给你基于字符串的扩展方法,你可以用这些方法来传递任何字符串表达式。
例如,下面是用VB编写的一个标准的类安全LINQ to SQL查询,从 Northwind 数据库中获取数据,然后在一个ASP.NET GridView 控件中做显示:
使用LINQ DynamicQuery库,我可以将上面的查询表达式重写成:
注意,其中的条件式 where 子句和排序的 orderby 子句现在接受字符串表达式,而不是代码表达式。因为它们是后期绑定字符串,我可以动态地构建它们。例如,我可以提供界面给业务分析员用户,允许他们自己构建查询(包括任意的条件子句)。
动态查询库文档
在上面的 VB 和 C# 动态查询例程中还有一些HTML文档,详细描述了如何使用动态查询库中的扩展方法。如果你想要更深入地使用这个辅助库的话,这些文档绝对是值得一读的:
下载和运行动态查询库的样例
你可以下载和运行我编写的 VB 和C# 基本例程,在其中我示范了在一个ASP.NET 网站项目中使用动态的LINQ库对Northwind数据库进行LINQ to SQL查询:
你可以使用免费的Visual Web Developer 2008 Express版或者VS 2008打开运行这些项目。
构建动态LINQ查询的其他方法
动态查询库简单易用,在那些查询是完全动态,你要提供界面给用户,助他们构建这些动态查询的场景下尤其有用。
在将来的贴子里,我将对构建动态LINQ查询做深入探讨,讨论如何使用类安全的predicate方法来对你的代码进行结构化(《C# 3.0 In a Nutshell 》一书的作者Joseph 和 Ben Albahari,对此有个很精彩的贴子,在 这里)。
希望本文对你有所帮助,
Scott
【原文地址】New ASP.NET Dynamic Data Support
【原文发表日期】 Friday, December 14, 2007 12:41 AM
上个周末发布的ASP.NET 3.5 Extensions CTP预览版包括了一堆很棒的新特性。
其中一个新特性是我们称之为“ASP.NET Dynamic Data Support(动态数据支持)”的东西。简单地说,这个东西允许你极其快速地建造可以使用LINQ to SQL(在将来LINQ to Entities)对象模型的数据驱动的网站,还允许你不用手工建造任何网页。
看它在实战中的例子的最佳方式是观看David Ebbo的精彩的17分钟屏播:
你也可以按下面的步骤来轻松上手,开始使用动态数据支持:
第一步: 创建ASP.NET动态数据网站
在安装ASP.NET 3.5 Extensions CTP预览版之后,你可以使用VS 2008或免费的Visual Web Developer 2008 Express版来创建启用ASP.NET动态数据支持的新网站项目或新Web应用项目:
这会创建一个可用的新网站,其中包括了一些默认的模板文件,以及你可以用来定制模板文件观感(look and feel)的CSS样式表:
第二步: 添加LINQ to SQL数据模型
LINQ to SQL是.NET 3.5中内置的O/RM(对象关系映射器),它允许你使用.NET类来对关系数据库建模。然后你可以使用LINQ来对数据库进行查询,以及在其中更新、插入和删除数据。 LINQ to SQL完全支持事务,视图和存储过程。它还提供了简易方式来将数据验证和业务逻辑规则集成进你的数据模型。
开始使用ASP.NET动态数据网站的最简便的方式是向你的项目中添加一个新的LINQ to SQL数据模型(右击->添加新项->LINQ to SQL类)。这会调出LINQ to SQL类设计器。从你的服务器管理器中把数据库数据表拖拉到设计器表面,为你的数据库数据定义(schema)来建立一些类(包括其间的关系):
第三步: 在项目中启用动态模板
在默认情形下,ASP.NET动态数据项目提供了内置支持,为你的LINQ to SQL和LINQ to Entities数据模型创建自动的“scaffolding(脚手架)”视图。动态数据项目包括了一些模板页和用户控件,可以自动地创建内置的浏览、编辑、选择和删除数据的用户界面,这些界面是根据你加到项目里的LINQ to SQL或者LINQ to Entities数据模型,在运行时动态构建的。
为启用这个自动scaffolding的支持,打开你项目的web.config文件,找一下其中的dynamicData节,把它的enableTemplates属性设为true:
注: 这个自动scaffolding特性在默认情形下为安全的原因是关掉的(我们要你明确地设置来启用这个特性)。
注: 就象你在上面看到的那样,ASP.NET动态数据配置节还提供了可选的URL映射支持,该支持允许你将你的动态scaffold网页定制成你想要的任何URL格式。
第四步: 运行你的网站
按F5运行你的项目,默认情形下,你会被转到default.aspx网页,上面列出了你数据模型中的所有数据表对象:
注: default.aspx主页是项目中的一个文件,如果你不喜欢这个网页的样子,你可以打开它,编辑成你想要的样子。
点击上面列表中的任何数据表名称,会把你转到一个动态数据网页,其上列出了对应数据表中的数据:
默认的数据视图网页自动创建了有效的数据导航界面,这些界面包括了内置的数据分页和编辑支持(其中启用了ASP.NET AJAX):
数据视图网页自动推断出关联对象间的关系,提供了自动的过滤支持:
数据视图网页还自动地显示你的对象间的关系,允许用户轻松地在其间导航。例如,注意,产品的Category字段允许我转到特定产品的分类细节网页上去:
数据视图网页还提供了自动选择,编辑和删除支持。注意下面,在行内编辑模式下,他们会自动推断出友好的外键名称(允许你编辑“Category”,从下拉框中挑一个名称,而不是指定一个“CategoryID”整数):
所有这些都是自动工作的,而不用创建任何自定义的.aspx 网页或者编写任何自定义代码。所有的web用户界面都是根据你的LINQ to SQL或LINQ to Entities数据模型动态生成的。
第五步: 进一步定制网站
对你的ORM数据模型现成提供上面所有的功能,对让你的网站很快开始运作大有好处。在实现基本的网站体验之后,你可以进行完全的定制,无论是数据验证/业务逻辑层次还是用户界面层次。
你可以添加标准的LINQ to SQL数据模型和业务验证规则到你的数据模型中,以执行约束条件。动态数据网页会自动执行这逻辑,提供基于这逻辑的适当的错误信息和验证用户界面。
你也可以定制任何数据网页中的用户界面,动态数据项目允许你定制网站上所有数据网页的默认观感,以及定制用在网站上的所有字段类型的默认观感。你可以通过对创建新的动态数据项目时加到“/App_Shared”文件夹中的默认模板文件做编辑来实现这2种定制:
只要编辑上面的任何文件就可定制默认的数据网页视图或默认的数据字段的外观。
然后,你还可以通过在项目中明确地添加一个映射到某个特定数据视图网页的.aspx网页,来覆盖对应的用户界面。例如,我可以往项目中加一个 \Products\ListDetails.aspx 来覆盖默认产品的 ListDetails 行为:
然后,你可以往网页上添加任何标准的ASP.NET数据控件。你还可以在网页上使用ASP.NET 3.5 Extensions CTP预览版中发布的有动态数据意识的ASP.NET数据控件。这些控件允许你完全定制用户界面的观感,同时还使用新的动态元数据提供器(dynamic meta-data provider)来推断你的数据模型类间的关系和的元数据,以提供默认行为。
有关详情
上面的示范只涉及了你可以通过ASP.NET动态数据项目来实现的几个场景和功能。要了解详情的话:
- 观看David的网播
- 看一下ASP.NET动态数据的快速上手文档
- 订阅David Ebbo, Scott Hunter, 和Marcin Dobosz的博客
- 访问ASP.NET动态数据论坛问问题
想了解有关LINQ to SQL,以及如何创建数据模型类的详情,参阅我以前写的下列博客帖子(【译注】博客园的韩现龙已经完成了其中的8篇,不久会在这里贴出来):
你还可以观看www.asp.net网站上此处的精彩LINQ和 LINQ to SQL “How do I?(该如何做)” 录像。
希望本文对你有所帮助,
Scott
【原文地址】Visual Studio 2008 and .NET 3.5 Released
【原文发表日期】 Monday, November 19, 2007 10:34 AM
今天我们发布了 Visual Studio 2008 和 .NET 3.5。你可以使用下面的链接下载其最终版:
-
如果你是MSDN订阅者,你可以在MSDN订阅网站下载(注:其中一些版本才上传完毕,如果你还没看到的话,过一会儿再来看一下)。
-
如果你没有订阅MSDN,你可以在这里下载Visual Studio 2008 Team Suite的90天免费试用版本。Visual Studio 2008 专业版的90天试用版本(下载大小稍微小点)将于下个星期推出。Team Foundation Server的90天免费试用版本可以在这里下载。
-
如果你想使用免费的 Visual Studio 2008 Express 版本(下载大小更小一些,而且是完全免费的),你可以在这里下载。
-
如果你只想安装 .NET Framework 3.5运行时,你可以在这里下载。
一些新特性之快速指南
Visual Studio 2008 和 .NET 3.5 内含成堆的新功能和改进。想了解详情的话,下面是一些我以前写的相关博客贴子的链接,以及你可以观看的录像的链接:
VS 2008的多定向支持
VS 2008允许你构建针对多个.NET框架版本的应用。这意味着你可以使用VS 2008打开,编辑,和编译现有的.NET 2.0和ASP.NET 2.0应用(包括使用了ASP.NET AJAX 1.0的ASP.NET 2.0应用),继续在.NET 2.0机器上部署这些应用。你可以从下面的博客贴子里进一步了解其中的工作原理:
ASP.NET AJAX和JavaScript支持
ASP.NET AJAX已经成为.NET 3.5的一部分,不再需要单独下载了。除了包括ASP.NET AJAX 1.0的所有功能外,ASP.NET 3.5现在还包括下面这些丰富的支持: 集成了WebParts的UpdatePanel,与象<asp:menu> and <asp:treeview>这样的控件的 ASP.NET AJAX 集成,WCF对JSON的支持,以及许许多多AJAX方面的改进。
VS 2008 和 Visual Web Developer 2008 在将JavaScript和AJAX集成进你的应用方面还有特别棒的支持。你可以在我这里的贴子里了解相关详情:
你可以在这里观看一些讨论ASP.NET AJAX 和 Visual Studio 2008支持的录像。
我高度推荐这本佳作:ASP.NET AJAX in Action以进一步了解ASP.NET AJAX(客户端和服务器端)。
VS 2008 Web设计器和CSS支持
VS 2008包含一个显著改进的HTML web设计器(是Expression Web产品中的同一个设计器)。该设计器提供了分割视图编辑,嵌套母板页,以及出色的CSS集成。下面是我对此作了详述的2篇文章:
ASP.NET还提供了一个新的<asp:ListView>控件,该控件对数据场景提供了非常丰富的支持,允许对输出的标识做完全的控制,与VS 2008中的新CSS支持还有良好的协作,你可以在我这里的贴子里了解有关详情:
你可以在这里观看一些讨论Visual Studio 2008 新web设计器和新的ListView/DataPager控件的录像。
编程语言方面的改进和LINQ
VS 2008中新的VB和C#编译器对这些语言做了显著的改进。两者都添加了对函数式编程概念的支持,允许你编写更干净,更简洁,更具有表达性的代码。这些特性还促成了我们称之为LINQ(语言级集成查询)的新编程模型,使得查询和操作数据成为.NET中的一等编程概念。
下面是我撰写的一些讨论这些新语言特性的文章(用C#作为示例):
这里是我撰写的其他几个贴子,展示了一些新的VS 2008代码编辑支持和使用这些新的语言特性的一些很酷的方式:
Visual Basic开发团队还录制了一些很棒的讨论LINQ的免费录像,你可以在这里观看。
LINQ to SQL中的数据访问改进
LINQ to SQL是.NET 3.5中内置的OR/M (对象关系映射器)。它允许你使用.NET 对象模型对关系数据库进行建模。然后你可以使用LINQ对数据库进行查询,以及更新、插入,删除数据。LINQ to SQL完整支持事务,视图和存储过程。它还提供了一个把业务逻辑和验证规则结合进你的数据模型的简易方式。下面是一些我讨论如何使用LINQ to SQL的文章:
我认为你会发现LINQ 和 LINQ to SQL极大地方便你建造极其干净的数据模型,编写极其干净的数据代码。我在今后还会撰写更多LINQ to SQL的系列文章(一直没空写完,我非常抱歉,要做的事情太多,可惜时间太少了!)。
Scott Stanfield 正在为www.asp.net网站录像一些非常棒的LINQ to SQL录像,这些录像是基于我上面的系列文章的(录像有VB和C#版本)。你可以在这里观看其中的前四集。
使用Visual Studio浏览.NET Framework库源码
在几个星期前我在博客里提到, 我们将在这个发布里同时发布 .NET框架库源码的引用版本。Visual Studio 2008有内置的调试器支持,自动按需调试进入代码(VS 2008可以自动为你下载适当的.NET框架库文件)。
我们正在部署这些源码服务器,在几个星期里将发表启动这个功能的步骤。
说不尽的其他改进
上面的列表只是所做改进的一小部分。针对客户端开发,VS 2008 包含了对WPF设计器和项目的支持。ClickOnce 和WPF XBAPs现在在FireFox中也工作了。WinForms和WPF项目现在也能使用ASP.NET 应用服务(成员,角色和用户数据)来漫游用户数据了。
办公开发也更加丰富了,包括对Office 2007 Ribbon和Outlook的集成支持。Visual Studio办公工具支持现在也成为Visual Studio的一部分了(对,不用再购买另外的产品了)。
新的WCF和Workflow项目和设计器现在也包括在VS 2008中了。单元测试的速度大为提高,而且单元测试的支持现在包括在VS Professional版本(而不仅仅是VSTS版了)中了。连续集成支持现在也内置于TFS中了。AJAX web测试(单元和压力)现在也由VS Test产品支持了。还有许许多多多的改进,这里无法一一提及了。
安装建议
很多人问我该如何从Visual Studio 2008的早期beta版升级的问题。一般来说,我建议你先卸载Beta2。作为卸载的一部分,你应该卸载Visual Studio 2008 Beta2,.NET Framework Beta2以及Visual Studio Web Authoring Component ,这些是分开的安装,需要分别卸载。之后,我通常建议在卸载后,重新启动机器,以确保在你安装新东西之前,机器处于干净的状态。然后,你就可以在机器上安装VS 2008 和.NET 3.5的最终版了。
安装完毕后,我通常建议你运行 工具->引入和输出设置 菜单选项,选择“重置设置”选项,然后重新选择你喜欢的配置。这有助于确保去掉Beta2版本的老配置(有时还会有助于改进性能)。
注,VS 2008可以和VS 2005 并行,所以完全可以在同一台机器上同时安装它们,不会有任何问题的。
Silverlight工具和VS Web部署项目插件
可在VS 2008最终版下工作的2个非常受欢迎的Visual Studio插件尚未推出。它们是Visual Studio Silverlight 1.1工具 Alpha和Visual Studio Web部署项目插件。 我们希望在下2个星期内推出可在VS 2008最终版下工作的更新版本。如果你在使用VS 2008 Beta2 做Silverlight 1.1开发的话,你最好还是继续使用VS 2008 Beta2 ,直到这个插件的更新版推出为止。
希望本文对你有所帮助,
Scott
【原文地址】Using LINQ to SQL (Part 1)
【原文发表日期】 Saturday, May 19, 2007 12:41 AM
在过去的几个月中我写了一系列涵盖了VS和.NET Framework Orcas版中的一些新特性的帖子,下面是这些帖子的链接:
以上的语言特性帮助数据查询成为一等编程概念。我们称这个总的查询编程模型为“LINQ”--它指的是.NET语言级集成查询。
开发者可以在任何的数据源上使用LINQ。他们可以在他们选择的编程语言中表达高效的查询行为,选择将查询结果转换或构形成他们想要的任何格式,然后非常方便地操作这个结果集。有LINQ功能的语言可以提供完全的类型安全和查询表达式的编译时检查,而开发工具则可以提供在编写LINQ代码时完全的智能感知,调试,和丰富的重构支持。
LINQ支持一个非常丰富的的扩展性模型,该模型将有助于对不同的数据源生成不同的高效运算因子(domain-specific operators)。.NET Framework的Orcas版本将发布一些内置库,这些库提供了针对对象(Objects),XML,和数据库的LINQ支持。
什么是LINQ to SQL?
LINQ to SQL 是随.NET Framework Orcas版一起发布的O/RM(对象关系映射)实现,它允许你用.NET 的类来对一个关系型数据库建模。然后你可以用LINQ对数据库进行查询,以及进行更新/插入/删除数据的操作。
LINQ to SQL完全支持事务,视图和存储过程。它还提供了一种把数据验证和业务逻辑规则结合进你的数据模型的便利方式。
使用LINQ to SQL对数据库建模:
Visual Studio Orcas版中提供了一个LINQ to SQL设计器,该设计器提供了一种简易的方式,将数据库可视化地转换为LINQ to SQL对象模型。我下一篇博客将会更深入一些来介绍怎么使用该设计器(你可以观看我一月份时录制的这个关于如何从头开始创建LINQ to SQL模型的录像)。
通过LINQ to SQL设计器,我可以方便地设计出如下所示的Northwind数据库的示例模型:
上图定义了四个实体类:Product, Category, Order 和 OrderDetail。每个类的属性都映射到数据库中相应表的字段,类实体的每个实例代表了数据表中的一行记录。
在上图中,四个实体类间的箭头代表了不同实体间的关联/关系。它们主要是根据数据库中的主键/外键关系生成的。设计器上的箭头的指向表明了该关系是一对一还是一对多的关系。基于此,强类型的属性将会被加入到实体类中。例如,上边的Category类和Product类之间有一个“一对多”的关系。这意味着Category类将有一个"Products"属性,该属性代表了在该类中所有的产品对象的集合。而Product类将会有一个"Category"属性来指向一个Category类的实例,该Category类的实例表明了了产品所属的类别。
上图中LINQ to SQL设计器的右侧列出了与我们的数据库模型交互的存储过程。在上边的例子中,我添加了一个“GetProductsByCategory”存储过程。它有一个categoryID作为输入参数,返回一个产品实体序列作为结果集。下面的代码将展示如何调用该存储过程。
理解DataContext类
当你点击LINQ to SQL设计器上的“保存"按钮时,Visual Studio将会保存我们建立的代表了实体和数据库关系的各个类。针对加入到我们的解决方案的每一个LINQ to SQL设计器文件,同时也会生成一个自定义的DataContext类。这个DataContext类是我们从数据库中查询实体或者进行更改操作的主要渠道。生成的DataContext类将含有一些属性,对应于我们在数据库中建了模的每个数据表,以及一些方法,对应于我们添加的每个存储过程。
例如,下图就是基于我们上边设计的模型而生成的的NorthwindDataContext类:

LINQ to SQL 代码例子
用LINQ to SQL 设计器对我们的数据库建模之后,我们就可以很方便地编写代码对数据库进行操作了。下边是一些展示了常见的数据库操作的代码例子:
1) 从数据库中查询Products
下面的代码用LINQ to SQL 查询语法来获取Product对象的IEnumerable序列。注意代码是如何通过Product/Category关系来仅查出那些类别是"Beverages"的产品的:
C#:
VB:
2) 更新数据库中的一条产品记录
下面的代码示范了如何从数据库中查询出单一的一条产品记录,更新它的价格,然后将改动保存至数据库:
C#:
VB:
注意:VB在Orcas Beta1中尚不支持Lambda。但是在Beta2中,它就会支持了--那时代码就会能写得更为简洁一些。
3) 向数据库中插入一条新的Category和两条新的Products
下面的代码示范了如何生成一个新的分类,然后生成两条和该分类相关联的产品,然后将这三条记录保存到数据库中。
注意下边,我不用手工去维护主/外键关系,取而代之的是,我只向分类对象的“Products”集合中添加了两个Product记录,然后把该Category对象添加到DataContext的“Categories”集合中,LINQ to SQL将知道自动为我持久适当的PK/FK的关系。
C#
VB:
4) 从数据库中删除Products
下面的代码示范了如何从数据库中删除所有的玩具产品:
C#:
VB:
5) 调用存储过程
下面的代码示范了如何不使用LINQ查询语法,而是通过调用我们在上面向数据模型中添加的“GetProductsByCategory”存储过程来查询Product实体。注意,一旦我查询出了Product结果集,我可以更新/删除它们,然后再调用 db.SubmitChanges()来将这些更新提交到数据库。
C#:
VB:
6) 在服务器端分页查询Products
下面的代码示范了如何通过LINQ查询语法实现高效的服务器端数据库分页查询。通过使用下面的Skip()和Take()操作符,我们从数据库中只查询出从200行开始的10条记录:
C#:
VB:
总结
LINQ to SQL提供了一种很棒的、干净利索的方法来为你的应用程序来建立数据层。一旦你定义了数据模型,你就可以方便而且有效地对它进行查询,插入,更新和删除。
希望以上的介绍和代码例子刺激了你的胃口,希望了解到更多东西。在接下来的几周里我会在该系列中更具体地探讨LINQ to SQL。
希望本文对你有所帮助,
Scott
(博客园 韩现龙译)