<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>ASP.NET 3.5</title>
        <link>http://blog.entlib.com/EntLib/category/6.aspx</link>
        <description>讨论、分析、研究ASP.NET 3.5 新特性，如LINQ、ADO.NET Entity Framework等等。</description>
        <language>zh-CN</language>
        <copyright>EntLib.com</copyright>
        <managingEditor>entlib@hotmail.com</managingEditor>
        <generator>EntLib.com Blog Version 3.0.0.0</generator>
        <item>
            <title>业务逻辑层（ASP.NET 3.5 Enterprise Application Development）读书笔记</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/07/04/asp.net-3.5-enterprise-application-development-again.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;业务逻辑层（ASP.NET 3.5 Enterprise Application Development&lt;/b&gt;&lt;b&gt;）读书笔记&lt;/b&gt;&lt;/div&gt;
&lt;div align="center"&gt;&lt;b&gt;-- Problem – Design – Solution&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文是针对Wrox出版的《ASP.NET 3.5 Enterprise Application Development With Visual Studio 2008 Problem Design Solution》该书第三章Business Logic Layer（业务逻辑层）读书笔记。&lt;a href="http://forum.entlib.com/"&gt;http://forum.EntLib.com&lt;/a&gt; 开源论坛小组提供，欢迎交流，分享。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上一篇文章：&lt;a href="http://blog.entlib.com/EntLib/archive/2009/06/11/asp.net-3.5-enterprise-application-development.aspx"&gt;数据访问层（ASP.NET 3.5 Enterprise Application Development）读书笔记&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;原文介绍在三层架构应用中业务逻辑层的设计。在业务逻辑层中，定义了四个基类，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="538" height="477" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter3_1.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" width="535" height="225" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter3_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;ENTBaseBO &lt;/b&gt;&lt;b&gt;是业务对象的基类，不允许用户改变。&lt;/b&gt;通常，这一类型的业务对象显示在用户界面的下拉列表框。该类中包含了一些所有业务对象共同的属性，如ID、InsertDate、InsertENTUserAccountId…等等。另外，增加了一个有用的只读属性 DisplayText，以及一个对应的抽象方法GetDisplayText()，必须在继承子类中实现该方法。&lt;/div&gt;
&lt;div&gt;public string DisplayText&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div style="text-indent: 21pt"&gt;get { return GetDisplayText(); }&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;protected abstract string GetDisplayText();&lt;/div&gt;
&lt;div&gt;这一属性可用来将对象显示在UI层或者任何数据绑定控件。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;该类唯一的公有方法Load，用来从数据库中检索数据 – 没有增加、更新、或删除操作。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;        #region&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; Abstract Methods&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; Load(&lt;span style="color: blue"&gt;int&lt;/span&gt; id);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; MapEntityToCustomProperties(&lt;span style="color: #2b91af"&gt;IENTBaseEntity&lt;/span&gt; entity);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; GetDisplayText();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;        #endregion&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; Abstratct Methods&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;        #region&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; Public Methods&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; MapEntityToProperties(&lt;span style="color: #2b91af"&gt;IENTBaseEntity&lt;/span&gt; entity)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {            &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;if&lt;/span&gt; (entity != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                InsertDate = entity.InsertDate;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                InsertENTUserAccountId = entity.InsertENTUserAccountId;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                UpdateDate = entity.UpdateDate;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                UpdateENTUserAccountId = entity.UpdateENTUserAccountId;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                Version = entity.Version;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;this&lt;/span&gt;.MapEntityToCustomProperties(entity);&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 9pt"&gt;        #endregion&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; Public Methods&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;任何继承ENTBaseBO 的业务类必须事先Load和MapentityToCustomProperties 方法。在实现Load方法时，从DAL检索一个单一的实体，并调用MapEntityToProperties 方法。MapEntityToProperties 方法负责将5个公共的字典赋值给当前的对象实例，并接着调用MapEntityToCustomProperties 方法。MapEntityToCustomProperties 方法则负责将其他的实体对象的属性赋值给业务对象的属性，这是因为这些属性不是基类中的共用的属性。 --- &lt;a href="http://forum.entlib.com/"&gt;http://forum.EntLib.com&lt;/a&gt; 开源小组注：作者使用的业务对象（Business Object）是自己编写的，不是LINQ to SQL 设计器自动创建的实体对象（Entity Object）。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面是业务对象中，Load和MapEntityToCustomProperties 方法的一段范例代码：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; Load(&lt;span style="color: blue"&gt;int&lt;/span&gt; id)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;ENTUserAccount&lt;/span&gt; userAccount = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ENTUserAccountData&lt;/span&gt;().Select(id);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;if&lt;/span&gt; (userAccount != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;                MapEntityToProperties(userAccount);&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }        &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; MapEntityToCustomProperties(&lt;span style="color: #2b91af"&gt;IENTBaseEntity&lt;/span&gt; entity)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;ENTUserAccount&lt;/span&gt; userAccount = (&lt;span style="color: #2b91af"&gt;ENTUserAccount&lt;/span&gt;)entity;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            ID = userAccount.ENTUserAccountId;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            WindowsAccountName = userAccount.WindowsAccountName;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            FirstName = userAccount.FirstName;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            LastName = userAccount.LastName;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            Email = userAccount.Email;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            IsActive = userAccount.IsActive;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;ENTBaseBOList 集合类表示ENTBaseBO 基类集合，包含唯一的一个抽象方法Load，该方法负责从数据库中检索所有的记录。如果你需要过滤部分记录，你可以在继承类中重载Load方法。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;ENTBaseEO &lt;/b&gt;&lt;b&gt;是另一个抽象类，EO&lt;/b&gt;&lt;b&gt;表示“可编辑对象（Edit Object&lt;/b&gt;&lt;b&gt;）”，表示一个单一实例的特定业务对象。&lt;/b&gt;ENTBaseEO 和 ENTBaseBO的区别是：ENTBaseEO 允许对象使用者增加、更新和删除数据库记录。ENTBaseEO继承自ENTBaseBO。&lt;/div&gt;
&lt;div&gt;ENTBaseEO 类中添加了一个枚举类型DBActionEnum：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DBActionEnum&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            Save,&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            Delete&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;同时，也包含DBActionEnum的公有属性DBAction：&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 9pt"&gt;public&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: #2b91af"&gt;DBActionEnum&lt;/span&gt; DBAction { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;关于Save方法，其中一个在基类中实现，并调用另一个抽象的Save方法，该方法必须在继承子类中实现，因为至少需要传入具体的参数。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在保存记录到数据库之前，必须调用Validate方法进行业务数据和规则的验证。其中，会涉及到ENTValidationError 类和ENTValidationErros 集合类。验证业务数据和规则一定与具体的业务对象相关，因此Validate抽象方法一定要在业务子类中来实现。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="427" height="200" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter3_3.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;另一个Init抽象方法，主要是实现一些数据的初始化操作。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面是Delete操作相关的一些方法。首先是下面的两个抽象方法：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; DeleteForReal(&lt;span style="color: #2b91af"&gt;HRPaidTimeOffDataContext&lt;/span&gt; db);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ValidateDelete(&lt;span style="color: #2b91af"&gt;HRPaidTimeOffDataContext&lt;/span&gt; db, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ENTValidationErrors&lt;/span&gt; validationErrors);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;DeleteForReal方法会调用DAL的Delete方法。ValidateDelete 方法类似于前面的Validate方法，主要是在执行删除操作之前，进行必要的数据检查。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Delete方法在基类中实现，并调用DeleteForReal方法，与Save方法比较类似，有2个重载的Delete方法。第一个Delete方法启动事务，并调用第二个Delete方法，传入HRPaidTimeOffDataContext 对象。第二个Delete方法在调用DeleteForReal方法之前，先调用ValidateDelete 方法，进行数据验证。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;IsNewRecord 方法比较简单，只是用来返回对象是否为新纪录，用在Save方法中判断对象是插入或者更新操作。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;最后一个是UpdateFailed方法，在更新记录发生异常时，该方法用来添加一条信息到validationErrors 集合对象中，并最终显示在UI界面上。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;最后一个基类是ENTBaseEOList&lt;/b&gt;&lt;b&gt;，表示可编辑的业务对象集合，该类继承自ENTBaseBOList&lt;/b&gt;&lt;b&gt;类。&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;[Serializable()]&lt;/div&gt;
&lt;div&gt;public abstract class ENTBaseEOList&amp;lt;T&amp;gt; : ENTBaseBOList&amp;lt;T&amp;gt;&lt;/div&gt;
&lt;div style="text-indent: 21pt"&gt;where T : ENTBaseEO, new()&lt;/div&gt;
&lt;div&gt;{ … }&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;ENTBaseEOList 类主要有2个方法：Save 和 GetAll。其中，Save 方法将增加或删除集合对象到数据库中（&lt;a href="http://forum.entlib.com/"&gt;http://forum.entlib.com&lt;/a&gt; 开源小组注：根据ENTBaseEO.DBActionEnum 属性值，来执行Save或Delete操作），Save方法有2个重载。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;GetAll方法比较简单，调用基类ENTBaseBOList 的Load方法，检索所有的业务对象实例，返回集合对象自身。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;T&amp;gt; GetAll()&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;this&lt;/span&gt;.Load();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;this&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;到现在为止，我们已经创建了所有的基类。下一步，创建一个可编辑的业务对象ENTUserAccountEO。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;    [&lt;span style="color: #2b91af"&gt;Serializable&lt;/span&gt;()]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ENTUserAccountEO&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;ENTBaseEO&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;关于该类的具体实现，可以查看原文。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;总结&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt; Summary&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本文集中介绍了业务逻辑层和创建了4个基类，本书的后面章节都将使用都这些基类。其中，在BLL层，将业务对象分为两类：静态业务对象和可编辑业务对象。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;BLL&lt;/b&gt;&lt;b&gt;和DAL&lt;/b&gt;&lt;b&gt;的交互：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. 从DAL检索数据，以单一实体对象（Entity Object）、实体对象计划、或数值（Scalar values）传递给BLL。&lt;/div&gt;
&lt;div&gt;2. 以数值（Scalar values）的形式传递数据到DAL层。（&lt;a href="http://forum.entlib.com/"&gt;http://forum.entlib.com&lt;/a&gt; 开源论坛小组注：是以数值的形式传递，还是以实体对象的形式传递，各有优缺点。不过，在具体项目中，我们一般多采用传递实体对象，这样，方法的signature 不需要发生变化。）&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;BLL&lt;/b&gt;&lt;b&gt;和UI&lt;/b&gt;&lt;b&gt;层的交互：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. UI层创建业务对象实例，并调用Load 方法检索数据。&lt;/div&gt;
&lt;div&gt;2. UI层创建业务对象实例，并给对象属性赋值，然后调用Save方法，增加或更新记录；或者调用Delete方法删除记录。&lt;/div&gt;
&lt;div&gt;3. 冲突的验证规则会以ENTValidationErrors集合类的形式传递到UI层。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;创建继承自ENTBaseBO&lt;/b&gt;&lt;b&gt;基类的关键点：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. 定义类为 Serializable。&lt;/div&gt;
&lt;div&gt;2. 创建业务对象（business object）的自有属性。&lt;/div&gt;
&lt;div&gt;3. 实现GetDisplayText 方法，返回对象在下拉列表或ListBox 中显示的文本。&lt;/div&gt;
&lt;div&gt;4. 实现Load 方法，从DAL返回单一的实体对象（Entity Object）。&lt;/div&gt;
&lt;div&gt;5. 实现MapEntityToCustomProperties 方法，将实体对象的属性赋值给业务对象的对应属性。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;创建继承自ENTBaseBoList&lt;/b&gt;&lt;b&gt;基类的关键点：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. 定义类为 Serializable。&lt;/div&gt;
&lt;div&gt;2. 实现Load方法，从DAL返回所有的实体对象。&lt;/div&gt;
&lt;div&gt;3. 重载Load方法，过滤从DAL返回的实体对象。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;创建继承自 ENTBaseEO &lt;/b&gt;&lt;b&gt;基类的关键点：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. 按照上述实现ENTBaseBo基类的相同步骤。&lt;/div&gt;
&lt;div&gt;2. 实现Save方法，并调用Validate方法进行数据验证，同时确定是新增或更新记录，然后以数值（Scalar value）的形式传递给DAL中相应的方法。&lt;/div&gt;
&lt;div&gt;3. 实现Validate 方法，对业务对象的数据进行验证。任何冲突的数据将添加到validationErrors集合中。&lt;/div&gt;
&lt;div&gt;4. 实现DeleteForReal方法，该方法调用DAL层的Delete方法，进行数据删除操作。&lt;/div&gt;
&lt;div&gt;5. 实现ValidateDelete 方法，在删除记录之前，进行强制数据规则验证，一般为数据完整性验证。&lt;/div&gt;
&lt;div&gt;6. 实现Init方法，该方法在用户创建一条新纪录是，设置对象的默认属性。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;创建继承自ENTBaseEOList &lt;/b&gt;&lt;b&gt;基类的关键点：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. 完全按照实现ENTBaseBOList基类的步骤即可。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下一节将介绍用户界面层（User Interface Layer）的设计，欢迎交流。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/195.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/07/04/asp.net-3.5-enterprise-application-development-again.aspx</guid>
            <pubDate>Sat, 04 Jul 2009 00:50:30 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/195.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/07/04/asp.net-3.5-enterprise-application-development-again.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/195.aspx</wfw:commentRss>
        </item>
        <item>
            <title>数据访问层（ASP.NET 3.5 Enterprise Application Development）读书笔记</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/06/11/asp.net-3.5-enterprise-application-development.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;数据访问层（ASP.NET 3.5 Enterprise Application Development&lt;/b&gt;&lt;b&gt;）读书笔记&lt;/b&gt;&lt;/div&gt;
&lt;div align="center"&gt;&lt;b&gt;-- Problem – Design – Solution&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文是针对Wrox出版的《ASP.NET 3.5 Enterprise Application Development With Visual Studio 2008 Problem Design Solution》该书第二章Data Access Layer（数据访问层）读书笔记。&lt;a href="http://forum.entlib.com/"&gt;http://forum.EntLib.com&lt;/a&gt; 开源论坛小组提供，欢迎交流，分享。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;原文介绍在三层架构应用中使用 LINQ to SQL技术。该设计模式使用DataContext 和数据库交互，ORM Designer设计器生成的实体对象（Entity Object）则负责与BLL（业务逻辑层）交互。&lt;/div&gt;
&lt;div&gt;该架构的设计图如下所示：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="626" height="550" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter2_1.gif" /&gt; &lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;在原文中通过将存储过程拖拉到ORM 设计器中，并使用存储过程来访问数据，如Insert、Update、Delete、Select等等方法。如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="672" height="363" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter2_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;将Method Panel中的方法与ORM 设计器中实体对象进行的关联的步骤如下。&lt;/div&gt;
&lt;div&gt;首先，选择ORM 设计器中的实体对象，如上图中的ENTUserAccount。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;然后，查看属性列表，比如点击Insert 属性后的弹出按钮，弹出如下对话框。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="666" height="645" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter2_3.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;经过上述设置后，DataContext 将调用存储过程来插入记录，而不是想之前的创建动态的SQL脚本。在DBML自动创建的cs文件中，可以看到如下2个方法：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; InsertENTUserAccount(&lt;span style="color: #2b91af"&gt;ENTUserAccount&lt;/span&gt; obj)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;         {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt; p1 = obj.ENTUserAccountId;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              &lt;span style="color: blue"&gt;this&lt;/span&gt;.ENTUserAccountInsert(&lt;span style="color: blue"&gt;ref&lt;/span&gt; p1, obj.WindowsAccountName, obj.FirstName, obj.LastName, obj.Email, ((System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;bool&lt;/span&gt;&amp;gt;)(obj.IsActive)), ((System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt;)(obj.InsertENTUserAccountId)));&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              obj.ENTUserAccountId = p1.GetValueOrDefault();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;         }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;         [&lt;span style="color: #2b91af"&gt;Function&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"dbo.ENTUserAccountInsert"&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; ENTUserAccountInsert([&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"ENTUserAccountId"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"Int"&lt;/span&gt;)] &lt;span style="color: blue"&gt;ref&lt;/span&gt; System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt; eNTUserAccountId, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"WindowsAccountName"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"VarChar(50)"&lt;/span&gt;)] &lt;span style="color: blue"&gt;string&lt;/span&gt; windowsAccountName, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"FirstName"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"VarChar(50)"&lt;/span&gt;)] &lt;span style="color: blue"&gt;string&lt;/span&gt; firstName, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"LastName"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"VarChar(50)"&lt;/span&gt;)] &lt;span style="color: blue"&gt;string&lt;/span&gt; lastName, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"Email"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"VarChar(100)"&lt;/span&gt;)] &lt;span style="color: blue"&gt;string&lt;/span&gt; email, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"IsActive"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"Bit"&lt;/span&gt;)] System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;bool&lt;/span&gt;&amp;gt; isActive, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"InsertENTUserAccountId"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"Int"&lt;/span&gt;)] System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt; insertENTUserAccountId)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;         {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              &lt;span style="color: #2b91af"&gt;IExecuteResult&lt;/span&gt; result = &lt;span style="color: blue"&gt;this&lt;/span&gt;.ExecuteMethodCall(&lt;span style="color: blue"&gt;this&lt;/span&gt;, ((&lt;span style="color: #2b91af"&gt;MethodInfo&lt;/span&gt;)(&lt;span style="color: #2b91af"&gt;MethodInfo&lt;/span&gt;.GetCurrentMethod())), eNTUserAccountId, windowsAccountName, firstName, lastName, email, isActive, insertENTUserAccountId);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              eNTUserAccountId = ((System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt;)(result.GetParameterValue(0)));&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              &lt;span style="color: blue"&gt;return&lt;/span&gt; ((&lt;span style="color: blue"&gt;int&lt;/span&gt;)(result.ReturnValue));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;         }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;其中第一个方法接收一个ENTUserAccount 对象的参数，并调用第二个方法，将对象的属性作为参数传入。第二个方法接收存储过程的每一个参数，接着调用DataContext对象的ExecuteMethodCall方法，该方法知道如何调用存储过程，并返回结果。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;另外的Delete、Update属性操作相似。操作完成后，ENTUserAccount 实体对象的属性列表如下所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="691" height="277" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter2_4.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;客户端调用的示例代码如下：&lt;/div&gt;
&lt;div&gt;//Create an instance of the data context&lt;/div&gt;
&lt;div&gt;HRPaidTimeOffDataContext db = new HRPaidTimeOffDataContext();&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;//Create a new ENTUserAccount object and set the properties&lt;/div&gt;
&lt;div&gt;ENTUserAccount userAccount = new ENTUserAccount&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;WindowsAccountName = @”VARALLO1\VaralloMadison”,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;FirstName = “Madison”,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;LastName = “Varallo”,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;Email = “madison.varallo@v2.com”,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;IsActive = true,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;InsertDate = DateTime.Now,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;InsertENTUserAccountId = 1,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;UpdateDate = DateTime.Now,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;UpdateENTUserAccountId = 1&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;div&gt;//Signal the context to insert this record&lt;/div&gt;
&lt;div&gt;db.ENTUserAccounts.InsertOnSubmit(userAccount);&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;//Save the changes to the database&lt;/div&gt;
&lt;div&gt;db.SubmitChanges();&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;为什么要这样设计呢？我不是很认同这种设计。&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;1. 任何对表ENTUserAccount的修改，都需要重新将EntUserAccount表拖拉到ORM设计器中，并重新设置Insert、Update、Delete 等等属性。&lt;/div&gt;
&lt;div&gt;2. 需要编写很多琐碎的存储过程，如上述的Insert、Update、Delete、Select等等，相信很多开发人员不喜欢编写这么多简单的Stored Procedure。&lt;/div&gt;
&lt;div&gt;3. 这样设计增加很多工作量，并且不便于后期的维护开发，也影响工作效率。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本章后面部分定义的一些接口类、抽象基类是针对该项目设计的特性提取的一些共用特征。这种设计方法值得推荐，但并不一定适合于实际的开发项目。&lt;/div&gt;
&lt;div&gt;public interface IENTBaseEntity&lt;/div&gt;
&lt;div&gt;public abstract class ENTBaseData&amp;lt;T&amp;gt; where T : IENTBaseEntity&lt;/div&gt;
&lt;div&gt;在数据访问层DAL仅仅只有2个上述的基类。&lt;/div&gt;
&lt;div&gt;public class ENTUserAccountData : ENTBaseData&amp;lt;ENTUserAccount&amp;gt;&lt;/div&gt;
&lt;div&gt;上述的Data类封装出来ENTUserAccount实体对象，ENTUserAccountData类继承自ENTBaseData基类，实现基类中的抽象方法。&lt;/div&gt;
&lt;div&gt;ORM设计器负责为数据库中每一个表生成一个对应的实体类，对应Data类则负责与数据库和业务逻辑层交互。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下一篇是关于业务逻辑层BLL的设计探讨。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/193.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/06/11/asp.net-3.5-enterprise-application-development.aspx</guid>
            <pubDate>Thu, 11 Jun 2009 11:58:21 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/193.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/06/11/asp.net-3.5-enterprise-application-development.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/193.aspx</wfw:commentRss>
        </item>
        <item>
            <title>OREILLY Programming .NET 3.5 读书笔记之三</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/03/01/oreilly-programming-.net-3.5-again.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;OREILLY Programming .NET 3.5 &lt;/b&gt;&lt;b&gt;读书笔记之三&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img align="right" alt="" src="/userfiles/EntLib/image/ebook/ProgrammingNet3_5.gif" /&gt;《Programming .NET 3.5》是OREILLY 2008.08出版的.NET 3.5 开发书籍，作者是Jesse Liberty 和 Alex Horovitz，比较全面地介绍.NET 3.5的一些新技术，如XAML、AJAX、WPF、WCF、WF、LINQ、CardSpace、N-tier架构设计等等。这里，记录我的一些读书笔记，希望对学习《Programming .NET 3.5》的朋友有些帮助。欢迎到&lt;a href="http://forum.entlib.com/"&gt;http://forum.entlib.com&lt;/a&gt; 开源论坛交流.NET 3.5的一些知识。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本书主要分为三个部分：&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 1 – Presentation Options&lt;/b&gt;&lt;b&gt;（表现层选项）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;介绍了.NET 3.5 提供的多种表现层设计技术，如XAML、WPF、AJAX、Silverlight等等。&lt;/div&gt;
&lt;div&gt;其中第一章简单介绍了.NET 3.5的优点和新技术；第二、三章介绍并演示了XAML和WPF基本编程要素，具体细节请参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之一&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml-again.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之二&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-grid.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之三&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Grid &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-stackpanelflowdocumentreader.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之四&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – StackPanel&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;FlowDocumentReader&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-canvasviewbox.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之五&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Canvas&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;ViewBox&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-nesting.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之六&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件嵌套&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;Nesting&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-resourcestransformations.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之七&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Resources&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;Transformations&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-yet-again.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之八&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; –&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;动画：缓慢旋转的按钮&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-hello-kitty.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之九&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Hello Kitty &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;专卖店产品演示&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第四章综合运用前面章节的XAML/WPF技术，一步一步演示如何创建一个具体的WPF应用程序，具体参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/27/wpf-data-binding.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;WPF &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;范例程序之一&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;数据绑定&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;(Data Binding) – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;附源代码&lt;span&gt;下载&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/29/wpf-hello-kitty.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;WPF &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;范例程序之二&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;构建&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Hello Kitty &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;专卖店产品演示&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;附源代码下载&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第五章简单介绍了AJAX概念及入门向导，非常简单。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第六章运用AJAX Control Toolkit – ReorderList 控件，创建一个To-Do 任务列表的实际Web Application 应用程序，具体参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;&lt;span&gt;基于&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;AJAX Control Toolkit - ReorderList &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;构建&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;ToDo &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;任务列表&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/15/ajax-control-toolkit-reorderlist-todo-again.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;&lt;span&gt;基于&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;AJAX Control Toolkit - ReorderList &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;构建&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;ToDo &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;任务列表&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;之二&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第七章简单介绍了Silverlight 2技术，并在最后演示如何创建一个数据绑定的范例程序。&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/22/silverlight-2.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Silverlight 2 &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;数据绑定演示程序（附源代码下载）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 2 – Interlude on Design Patterns&lt;/b&gt;&lt;b&gt;（.NET 3.5&lt;/b&gt;&lt;b&gt;设计模式）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;第八章简单介绍了3-Tier和N-Tier架构，MVC模式（内容过时），Observer设计模式，Factory Method 工厂方法设计模式，Chain-of-Command和Singleton设计模式。这部分内容在很多书上都有介绍，可根据需要选择阅读，与.NET 3.5 关系不大。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 3 – The Business Layer&lt;/b&gt;&lt;b&gt;（业务层）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;第九章简单介绍了.NET 3.5 引入的LINQ，包括LINQ 的基本语法、LINQ to SQL、LINQ to XML、扩展方法（Extension Method）、Lambda Expression等等。内容比较简单，比较适合LINQ初学者。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第十章介绍了WCF/SOA基本概念，如SOAP/WSDL/UDDI、EndPoint等等，其中关于Contract的定义需要注意的几点：&lt;/div&gt;
&lt;div&gt;1. Stability is job one! Don’t publish a contract for others until you are sure the service is stable and not likely to change.&lt;/div&gt;
&lt;div&gt;2. Say what you mean and mean what you say. Be explicit in your contracts to ensure that people understand both the explicit and intended usages.&lt;/div&gt;
&lt;div&gt;3. Make sure the public data schema is abstract; don’t expose internal representations.&lt;/div&gt;
&lt;div&gt;4. If you break it, you version it. Even the best-designed service might need to change; use versioning to help insulate your consumers from these changes.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;中文意思：&lt;/div&gt;
&lt;div&gt;1. 稳定性是第一项工作。不要发布contract给其他人，直到你确信Service已经基本稳定，不会改变了。&lt;/div&gt;
&lt;div&gt;2. 准确表达你想说的。contract需要清楚描述，确保其他人可以准确理解显式和隐式的用法。&lt;/div&gt;
&lt;div&gt;3. 确保公有的数据schema是抽象的，不要暴露内部表示。&lt;/div&gt;
&lt;div&gt;4. 如果你想改变contract，你需要定义新的版本好。因为即使设计最好的服务，都可能需要改变，通过使用版本号来帮助你隔离现有的使用者远离这些变化。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第十一章应用WCF技术，演示如何创建YahooQuotes WCF 服务，并创建WPF Client应用程序调用该WCF服务。示例程序比较简单，如果你对WCF 还不了解，建议你参考如下文章：&lt;a href="http://blog.entlib.com/EntLib/archive/2008/09/22/wcf.aspx"&gt;&lt;font color="#0000ff"&gt;WCF &lt;span&gt;&lt;span&gt;开发示例向导&lt;/span&gt; --- &lt;span&gt;经典推荐！&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第十二章简单介绍了WF，并简单演示了如何创建Sequential Workflow应用程序，适合于WF新手。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第十三章应用WF技术演示如何创建一个状态机（ State Machine），本章演示了前一章的所有概念，创建了一个完整的工作流应用程序。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第十四章介绍并应用CardSpace。CardSpace是基于身份识别，允许用户提交用户身份信息到一个网站。当用户登录到一个支持CardSpace网站，将显示CardSpace服务，用户可以选择一个身份卡片（Identity card）传送到该网站，就像你使用普通的ID卡、身份证或信用卡一样。CardSpace是.NET 3.5引用的新技术，目前支持CardSpace的网站还不多。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;《Programming .NET 3.5》系列读书笔记到此技术，感谢Jesse Liberty 和 Alex Horovitz提供的这本书。本书对.NET 3.5的新技术基本都有涉及，遗漏了ADO.NET Entity Framework这部分的内容（.NET 3.5 SP1引入的新技术）。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;关于ADO.NET Entity Framework 的内容，可以参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/entlibforum/archive/2008/12/01/ado.net-entity-framework.aspx"&gt;ADO.NET Entity Framework &lt;span&gt;&lt;span&gt;深入分析系列文章&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;OREILLY 网站该书的地址：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://oreilly.com/catalog/9780596527563/index.html"&gt;http://oreilly.com/catalog/9780596527563/index.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/138.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/03/01/oreilly-programming-.net-3.5-again.aspx</guid>
            <pubDate>Sun, 01 Mar 2009 13:42:00 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/138.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/03/01/oreilly-programming-.net-3.5-again.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/138.aspx</wfw:commentRss>
        </item>
        <item>
            <title>OREILLY Programming .NET 3.5 读书笔记之一</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/02/22/oreilly-programming-.net-3.5.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;OREILLY Programming .NET 3.5 &lt;/b&gt;&lt;b&gt;读书笔记之一&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img height="236" width="180" align="right" alt="" src="/userfiles/EntLib/image/ebook/ProgrammingNet3_5.gif" /&gt;《Programming .NET 3.5》是OREILLY 2008.08出版的.NET 3.5 开发书籍，作者是Jesse Liberty 和 Alex Horovitz，比较全面地介绍.NET 3.5的一些新技术，如XAML、AJAX、WPF、WCF、WF、LINQ、CardSpace、N-tier架构设计等等。这里，记录我的一些读书笔记，希望对学习《Programming .NET 3.5》的朋友有些帮助。欢迎到&lt;a href="http://forum.entlib.com/"&gt;http://forum.entlib.com&lt;/a&gt; 开源论坛交流.NET 3.5的一些知识。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本书主要分为三个部分：&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 1 – Presentation Options&lt;/b&gt;&lt;b&gt;（表现层选项）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;介绍了.NET 3.5 提供的多种表现层设计技术，如XAML、WPF、AJAX、Silverlight等等。&lt;/div&gt;
&lt;div&gt;其中第一章简单介绍了.NET 3.5的优点和新技术；第二、三章介绍并演示了XAML和WPF基本编程要素，具体细节请参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之一&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml-again.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之二&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-grid.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之三&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Grid &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-stackpanelflowdocumentreader.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之四&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – StackPanel&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;FlowDocumentReader&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-canvasviewbox.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之五&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Canvas&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;ViewBox&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-nesting.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之六&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件嵌套&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;Nesting&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-resourcestransformations.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之七&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Resources&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;Transformations&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-yet-again.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之八&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; –&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;动画：缓慢旋转的按钮&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-hello-kitty.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之九&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Hello Kitty &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;专卖店产品演示&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第四章综合运用前面章节的XAML/WPF技术，一步一步演示如何创建一个具体的WPF应用程序，具体参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/27/wpf-data-binding.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;WPF &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;范例程序之一&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;数据绑定&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;(Data Binding) – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;附源代码下载&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/29/wpf-hello-kitty.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;WPF &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;范例程序之二&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;构建&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Hello Kitty &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;专卖店产品演示&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;附源代码下载&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第五章简单介绍了AJAX概念及入门向导，非常简单。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第六章运用AJAX Control Toolkit – ReorderList 控件，创建一个To-Do 任务列表的实际Web Application 应用程序，具体参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;&lt;span&gt;基于&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;AJAX Control Toolkit - ReorderList &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;构建&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;ToDo &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;任务列表&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第七章简单介绍了Silverlight 2技术，并在最后演示如何创建一个数据绑定的范例程序。&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/22/silverlight-2.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Silverlight 2 &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;数据绑定演示程序（附源代码下载）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 2 – Interlude on Design Patterns&lt;/b&gt;&lt;b&gt;（.NET 3.5&lt;/b&gt;&lt;b&gt;设计模式）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;待续….&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 3 – The Business Layer&lt;/b&gt;&lt;b&gt;（业务层）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;待续….&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;OREILLY 网站该书的地址：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://oreilly.com/catalog/9780596527563/index.html"&gt;http://oreilly.com/catalog/9780596527563/index.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/136.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/02/22/oreilly-programming-.net-3.5.aspx</guid>
            <pubDate>Sun, 22 Feb 2009 11:31:06 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/136.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/02/22/oreilly-programming-.net-3.5.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/136.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Silverlight 2 数据绑定演示程序（附源代码下载）</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/02/22/silverlight-2.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;Silverlight 2 &lt;/b&gt;&lt;b&gt;数据绑定演示程序（附源代码下载）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;数据绑定（Data Binding）是用户界面UI和业务对象或其它数据提供者（data provider）的连接。用户界面对象称为目标，数据提供者成为数据源。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;数据绑定帮主隔离应用程序的用户界面层和其他层，如业务对象、数据等等。通过绑定对象，实现用户界面层和底层的隔离，其中有2种模式：one-way和two-way。one-way 绑定仅仅显示数据源的数据，two-way 绑定则在更新用户界面的数据时，会同步更新数据源。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面创建一个Silverlight 2 应用程序，绑定到业务对象，其中Book.cs 文件表示业务层（Business Layer）。如果你希望业务对象改变时，自动更新UI，业务对象必须实现INotifyPropertyChanged 接口。这个接口需要类有一个类型为PropertyChangedEventHandler事件。当绑定到UI控件上的任何属性Property 被赋值或清除时，必须触发PropertyChanged事件。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面看看Book.cs 文件的部分代码：&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: blue"&gt;public&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Book&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;INotifyPropertyChanged&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;Book类实现INotifyPropertyChanged 接口。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面的代码是对Title属性的定义。在set中，会触发PropertyChanged事件。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: green"&gt;// implement the required event for the interface&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;event&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PropertyChangedEventHandler&lt;/span&gt; PropertyChanged;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Title&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; bookTitle; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                bookTitle = &lt;span style="color: blue"&gt;value&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                NotifyPropertyChanged(&lt;span style="color: #a31515"&gt;"Title"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            } &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }     &lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: green"&gt;// factoring out the call to the event&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; NotifyPropertyChanged(&lt;span style="color: blue"&gt;string&lt;/span&gt; propertyName)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;if&lt;/span&gt; (PropertyChanged != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                PropertyChanged(&lt;span style="color: blue"&gt;this&lt;/span&gt;, &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PropertyChangedEventArgs&lt;/span&gt;(propertyName));&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在xaml页面文件中，每一个绑定的字段均使用Binding语法，关键字Binding跟随一个公有属性（public property），且属性绑定到控件，同时设置Mode，默认为OneWay。示例代码如下：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; x&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="AuthorURL"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; AuthorURL&lt;/span&gt;&lt;span style="color: blue"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt; Mode&lt;/span&gt;&lt;span style="color: blue"&gt;=OneWay }"&lt;/span&gt; &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Bottom"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: blue"&gt;="5"&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="color: blue"&gt;="1"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Style&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color: red"&gt; TextBlockStyle&lt;/span&gt;&lt;span style="color: blue"&gt;}"/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;DataContext&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;上面的实例代码表示AuthorURL控件绑定到AuthorURL属性，但是没有告诉它绑定到哪一个对象。DataContext 对象是一个特定的book实例，在运行时指定，并赋值给Grid的DataContext属性，这样，数据绑定控件就知道从book实例中获取AuthorURL属性值了。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;DataContext对象可以沿着UI树继承，这样，当我们设置Grid对象的DataContext属性后，所有在Grid内的其他控件将可以访问DataContext（除非这些控件有自己的DataContext定义）。看看示例代码：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;void&lt;/span&gt; Page_Loaded(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Book&lt;/span&gt; book = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Book&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            InitializeProgramming(book);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;            LayoutRoot.DataContext = book;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;控件样式Styling Controls&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;在Silverlight中有2种方式设置控件的样式：（1）直接在控件中应用样式Applying Styles Inline。示例代码如下：&lt;/div&gt;
&lt;div&gt;&amp;lt;TextBlock x:Name="TitlePrompt" Text="Title: " VerticalAlignment="Bottom"&lt;/div&gt;
&lt;div&gt;HorizontalAlignment="Right" Grid.Row="0" Grid.Column="0"&lt;/div&gt;
&lt;div&gt;&lt;b&gt;FontFamily="Comic Sans MS"&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;FontSize="16"&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;FontWeight="Bold"&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Foreground="Red"&lt;/b&gt; /&amp;gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;（2）创建并应用Style对象&lt;/div&gt;
&lt;div&gt;Style对象是可以重用的资源，你可以应用到任何container，或者通过放置在App.xaml 的Resources节，应用到整个项目。&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;    &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Application.Resources&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;        &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Style&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: red"&gt; TargetType&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="TextBlock"&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: red"&gt; x&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: red"&gt;Key&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="TextBlockStyle"&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Property&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="VerticalAlignment"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Value&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Bottom"/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Property&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="HorizontalAlignment"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Value&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Right" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Property&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="FontFamily"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Value&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;宋体" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Property&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="FontSize"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Value&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="16" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Property&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Foreground"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Value&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Blue" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Style&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;    &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Application.Resources&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;范例程序运行界面：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" src="/userfiles/EntLib/image/Silverlight/Silverlight_Book_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本范例程序来自于《Programming .NET 3.5》，欢迎下载交流。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/135.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/02/22/silverlight-2.aspx</guid>
            <pubDate>Sun, 22 Feb 2009 11:07:29 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/135.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/02/22/silverlight-2.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/135.aspx</wfw:commentRss>
            <enclosure url="http://blog.entlib.com/userfiles/EntLib/file/EntLib_BookStyles.zip" length="398" type="application/octetstream" />
        </item>
        <item>
            <title>基于AJAX Control Toolkit - ReorderList 构建ToDo 任务列表 之二</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/02/15/ajax-control-toolkit-reorderlist-todo-again.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;基于AJAX Control Toolkit - ReorderList &lt;/b&gt;&lt;b&gt;构建ToDo &lt;/b&gt;&lt;b&gt;任务列表 &lt;/b&gt;&lt;b&gt;之二&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在《&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx"&gt;基于AJAX Control Toolkit - ReorderList 构建ToDo 任务列表&lt;/a&gt;》文章中，演示了如何通过ReorderList AJAX 控件创建ToDo 任务列表，本文在上篇文章的基础上，进一步增加功能：用户注册、用户登录、并按照登录的用户显示该用户的任务列表。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;用户登录界面：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="389" alt="" width="588" src="/userfiles/EntLib/image/ASP.NET/ToDoList_v2_1.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;其中，需要注册新帐号部分采用AJAX – CollapsiblePanel 控件，点击则显示新用户注册面板：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;cc1&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;CollapsiblePanelExtender&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="Register_ContentPanel_CollapsiblePanelExtender"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: red"&gt;runat&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="server"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;Enabled&lt;/span&gt;&lt;span style="color: blue"&gt;="True"&lt;/span&gt; &lt;span style="color: red"&gt;ExpandControlID&lt;/span&gt;&lt;span style="color: blue"&gt;="Register_ContentPanel"&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: red"&gt;CollapseControlID&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Register_ContentPanel"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: red"&gt;TargetControlID&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="RegisterContentPanel"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;Collapsed&lt;/span&gt;&lt;span style="color: blue"&gt;="True"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;cc1&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;CollapsiblePanelExtender&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="511" alt="" width="626" src="/userfiles/EntLib/image/ASP.NET/ToDoList_v2_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;用户登录后，显示该用户的任务列表：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="609" alt="" width="684" src="/userfiles/EntLib/image/ASP.NET/ToDoList_v2_3.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;范例程序采用了AJAX、MasterPage、SqlDataSource等等技术，ToDo范例数据库采用SQL Server 2008。范例程序提供源代码下载，欢迎交流、分享。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/131.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/02/15/ajax-control-toolkit-reorderlist-todo-again.aspx</guid>
            <pubDate>Sun, 15 Feb 2009 02:42:55 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/131.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/02/15/ajax-control-toolkit-reorderlist-todo-again.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/131.aspx</wfw:commentRss>
            <enclosure url="http://blog.entlib.com/userfiles/EntLib/file/EntLib_ToDoList_v2.zip" length="1022" type="application/octetstream" />
        </item>
        <item>
            <title>基于AJAX Control Toolkit - ReorderList 构建ToDo 任务列表</title>
            <link>http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;基于AJAX Control Toolkit - ReorderList &lt;/b&gt;&lt;b&gt;构建ToDo &lt;/b&gt;&lt;b&gt;任务列表&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;ReorderList是一个全新的控件。它可以实现逐条列出数据并实现交互。用户简单的拖拽就可以改变数据的排列顺序并更新到数据源。在本控件中如果SortOrderField 属性设置之后排序将自动完成。关于ReorderList – AJAX控件的介绍，请参考如下文章：&lt;span style="font-size: 9pt; color: #3b3e39"&gt;&lt;a href="http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=425"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;AJAX &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; - ReorderList &lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;如下是基于ReorderList 控件创建的ToDo任务列表范例程序：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="668" width="690" alt="" src="/userfiles/EntLib/image/ASP.NET/Demo_ToDo_Project_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;其中ReorderList 控件脚本如下：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;cc1&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ReorderList&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="ReorderList1"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;AllowReorder&lt;/span&gt;&lt;span style="color: blue"&gt;="True"&lt;/span&gt; &lt;span style="color: red"&gt;DataSourceID&lt;/span&gt;&lt;span style="color: blue"&gt;="SqlDataSourceToDo"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: red"&gt;PostBackOnReorder&lt;/span&gt;&lt;span style="color: blue"&gt;="False"&lt;/span&gt; &lt;span style="color: red"&gt;SortOrderField&lt;/span&gt;&lt;span style="color: blue"&gt;="item_priority"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;="itemArea"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="Label1"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;='&lt;/span&gt;&lt;span style="background: yellow"&gt;&amp;lt;%&lt;/span&gt;# Eval("item_name") &lt;span style="background: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;'&lt;/span&gt; &lt;span style="color: red"&gt;Font-Bold&lt;/span&gt;&lt;span style="color: blue"&gt;="True"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;br&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="Label2"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;='&lt;/span&gt;&lt;span style="background: yellow"&gt;&amp;lt;%&lt;/span&gt;# Eval("item_description") &lt;span style="background: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;'&lt;/span&gt; &lt;span style="color: red"&gt;ForeColor&lt;/span&gt;&lt;span style="color: blue"&gt;="#999999"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DragHandleTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;="dragHandle"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DragHandleTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;InsertItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;span style="color: red"&gt;padding-left&lt;/span&gt;: &lt;span style="color: blue"&gt;25px&lt;/span&gt;; &lt;span style="color: red"&gt;border-bottom&lt;/span&gt;: &lt;span style="color: blue"&gt;thin&lt;/span&gt; &lt;span style="color: blue"&gt;solid&lt;/span&gt; &lt;span style="color: blue"&gt;transparent&lt;/span&gt;;&lt;span style="color: blue"&gt;"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Panel&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="panel1"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;DefaultButton&lt;/span&gt;&lt;span style="color: blue"&gt;="Button1"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;hr&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;span style="color: red"&gt;font-family&lt;/span&gt;: &lt;span style="color: blue"&gt;Verdana&lt;/span&gt;; &lt;span style="color: red"&gt;color&lt;/span&gt;: &lt;span style="color: blue"&gt;Black&lt;/span&gt;;&lt;span style="color: blue"&gt;"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                            &lt;/span&gt;&lt;span style="font-size: 9pt"&gt;新增ToDo任务列表:&lt;span style="color: blue"&gt;&amp;lt;&lt;span style="color: #a31515"&gt;br&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;th&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                        &lt;/span&gt;&lt;span style="font-size: 9pt"&gt;任务名称&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;th&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;th&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                        &lt;/span&gt;&lt;span style="font-size: 9pt"&gt;描述&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;th&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="TextBox1"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;='&lt;/span&gt;&lt;span style="background: yellow"&gt;&amp;lt;%&lt;/span&gt;# Bind("item_name") &lt;span style="background: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;'&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                        &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="TextBox2"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                            &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;='&lt;/span&gt;&lt;span style="background: yellow"&gt;&amp;lt;%&lt;/span&gt;# Bind("item_description") &lt;span style="background: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;'&lt;/span&gt; &lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="400px"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                            &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                        &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;br&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="Button1"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;CommandName&lt;/span&gt;&lt;span style="color: blue"&gt;="Insert"&lt;/span&gt; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;新 增"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Button&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Panel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;InsertItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;cc1&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ReorderList&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;范例程序采用了AJAX、MasterPage、SqlDataSource等等技术，ToDo范例数据库采用SQL Server 2008。范例程序提供源代码下载，欢迎交流、分享。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/130.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx</guid>
            <pubDate>Sat, 07 Feb 2009 07:31:11 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/130.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/130.aspx</wfw:commentRss>
            <enclosure url="http://blog.entlib.com/userfiles/EntLib/file/EntLib_ToDoList.zip" length="978" type="application/octetstream" />
        </item>
        <item>
            <title>ASP.NET 验证码的实现方式 (附示例程序下载)</title>
            <link>http://blog.entlib.com/EntLib/archive/2008/11/29/asp.net.aspx</link>
            <description>&lt;div align="center"&gt;&lt;b&gt;ASP.NET &lt;/b&gt;&lt;b&gt;验证码的实现方式 (&lt;/b&gt;&lt;b&gt;附示例程序下载)&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;验证码控件&lt;span style="font-size: 9pt; color: blue"&gt;WebValidates&lt;/span&gt;的使用步骤如下：&lt;/div&gt;
&lt;div&gt;1. 将验证码控件放入工具箱。&lt;/div&gt;
&lt;div&gt;2. 拖放控件到页面相应位置。&lt;/div&gt;
&lt;div&gt;3. 页面初始化时，编程生成验证码（假设验证码控件ID为snCode）。&lt;/div&gt;
&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style="font-size: 9pt"&gt;snCode.Create();&lt;span style="color: green"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: green"&gt;首次加载生成新验证码&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;4. 编码对比用户的输入（假设用户输入验证码的文本框ID是txtCode）,并做相应的处理。&lt;/div&gt;
&lt;div&gt;&lt;span&gt;   snCode.CheckSN(txtCode.Text.Trim());//&lt;/span&gt;返回bool型的值.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;示例代码：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;实现验证码方式的用户注册功能的代码如下：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; background: yellow"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;@&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: #a31515"&gt;Register&lt;/span&gt; &lt;span style="color: red"&gt;Assembly&lt;/span&gt;&lt;span style="color: blue"&gt;="WebValidates"&lt;/span&gt; &lt;span style="color: red"&gt;Namespace&lt;/span&gt;&lt;span style="color: blue"&gt;="WebValidates"&lt;/span&gt; &lt;span style="color: red"&gt;TagPrefix&lt;/span&gt;&lt;span style="color: blue"&gt;="cc1"&lt;/span&gt; &lt;span style="background: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Web页面上增加的内容：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;table&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt; &lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;="24%"&lt;/span&gt; &lt;span style="color: red"&gt;height&lt;/span&gt;&lt;span style="color: blue"&gt;="26"&lt;/span&gt; &lt;span style="color: red"&gt;align&lt;/span&gt;&lt;span style="color: blue"&gt;="center"&lt;/span&gt; &lt;span style="color: red"&gt;valign&lt;/span&gt;&lt;span style="color: blue"&gt;="middle"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;/span&gt;&lt;span style="font-size: 9pt"&gt;验证码:&lt;span style="color: blue"&gt;&amp;lt;/&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt; &lt;span style="color: red"&gt;valign&lt;/span&gt;&lt;span style="color: blue"&gt;="top"&lt;/span&gt; &lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;="37%"&lt;/span&gt; &lt;span style="color: red"&gt;align&lt;/span&gt;&lt;span style="color: blue"&gt;="left"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="txtCode"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;cc1&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;SerialNumber&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="snCode"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;cc1&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;SerialNumber&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt; &lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;="24%"&lt;/span&gt; &lt;span style="color: red"&gt;height&lt;/span&gt;&lt;span style="color: blue"&gt;="26"&lt;/span&gt; &lt;span style="color: red"&gt;align&lt;/span&gt;&lt;span style="color: blue"&gt;="center"&lt;/span&gt; &lt;span style="color: red"&gt;valign&lt;/span&gt;&lt;span style="color: blue"&gt;="top"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: red"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt; &lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;="37%"&lt;/span&gt; &lt;span style="color: red"&gt;align&lt;/span&gt;&lt;span style="color: blue"&gt;="left"&lt;/span&gt; &lt;span style="color: red"&gt;valign&lt;/span&gt;&lt;span style="color: blue"&gt;="middle"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: red"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="btnSubmit"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;Height&lt;/span&gt;&lt;span style="color: blue"&gt;="31px"&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                        &lt;span style="color: red"&gt;onclick&lt;/span&gt;&lt;span style="color: blue"&gt;="btnSubmit_Click"&lt;/span&gt; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;提交验证"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="124px"&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt; &lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;="24%"&lt;/span&gt; &lt;span style="color: red"&gt;height&lt;/span&gt;&lt;span style="color: blue"&gt;="26"&lt;/span&gt; &lt;span style="color: red"&gt;align&lt;/span&gt;&lt;span style="color: blue"&gt;="center"&lt;/span&gt; &lt;span style="color: red"&gt;valign&lt;/span&gt;&lt;span style="color: blue"&gt;="top"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: red"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt; &lt;span style="color: red"&gt;valign&lt;/span&gt;&lt;span style="color: blue"&gt;="top"&lt;/span&gt; &lt;span style="color: red"&gt;width&lt;/span&gt;&lt;span style="color: blue"&gt;="37%"&lt;/span&gt; &lt;span style="color: red"&gt;align&lt;/span&gt;&lt;span style="color: blue"&gt;="left"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="lblMessage"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: red"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;后台代码：&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;if&lt;/span&gt; (!IsPostBack)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                snCode.Create();&lt;span style="color: green"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: green"&gt;首次加载生成新验证码&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; btnSubmit_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;if&lt;/span&gt; (!CheckCode())&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                lblMessage.Text = &lt;span style="color: #a31515"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;验证码错误！"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                lblMessage.Text = &lt;span style="color: #a31515"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;验证码正确！"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; CheckCode()&lt;span style="color: green"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: green"&gt;验证方法&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;if&lt;/span&gt; (snCode.CheckSN(txtCode.Text.Trim()))&lt;span style="color: green"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: green"&gt;判断验证码是否输入正确&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: green"&gt;//snCode.Create();//&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: green"&gt;如果验证码输入不正确，则生成新的验证码&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;img height="321" alt="" width="627" src="/userfiles/EntLib/image/ASP.NET/WebValidates_demo.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/83.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2008/11/29/asp.net.aspx</guid>
            <pubDate>Sat, 29 Nov 2008 10:34:58 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/83.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2008/11/29/asp.net.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/83.aspx</wfw:commentRss>
            <enclosure url="http://blog.entlib.com/userfiles/EntLib/file/EntLib_WebValidation.zip" length="33" type="application/octetstream" />
        </item>
        <item>
            <title>应用程序架构设计指导( Application Architecture Guidance) v2.0</title>
            <link>http://blog.entlib.com/EntLib/archive/2008/11/12/application-architecture-guidance-v2.0.aspx</link>
            <description>&lt;div style="text-align: center"&gt;&lt;strong&gt;应用程序架构设计指导( Application Architecture Guidance) v2.0&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;img height="172" hspace="10" width="132" align="left" alt="" src="/userfiles/EntLib/image/ApplicationArch/ApplicationArchitectureGuidev2.gif" /&gt;应用程序架构设计指导 v2.0 项目的目标是提高在微软平台上有效创建应用程序，其主要读者是方案设计架构师和开发组长，它为设计人员提供了架构设计指导和在.Net Framework 上的应用程序设计思路。Application Architecture Guidance v2.0 集中于大多数通用类型的应用程序、应用程序的分层设计、组件和服务，并讲解了其关键设计特性。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;架构设计指导是patterns &amp;amp; practices、产品组、行业专家等合作成果，该项目包括知识库(KB)和设计指导内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;目前，App Arch Guide v2.0 Beta 1 已经发布，可以到如下地址下载。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;App Arch Guide 2.0 Site (CodePlex)&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.codeplex.com/AppArchGuide"&gt;&lt;font color="#800080"&gt;http://www.codeplex.com/AppArchGuide&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;Tags 标签： &lt;a rel="tag" href="http://blog.entlib.com/EntLib/Tags/Application+Architecture/Default.aspx"&gt;Application Architecture&lt;/a&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/69.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2008/11/12/application-architecture-guidance-v2.0.aspx</guid>
            <pubDate>Wed, 12 Nov 2008 13:37:53 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/69.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2008/11/12/application-architecture-guidance-v2.0.aspx#feedback</comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/69.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Entity Data Model (EDM) 深入分析, Part 3</title>
            <link>http://blog.entlib.com/EntLib/archive/2008/10/22/entity-data-model-edm-part-3.aspx</link>
            <description>&lt;div style="text-align: center"&gt;&lt;strong&gt;Entity Data Model (EDM) 深入分析, Part 3&lt;/strong&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;b&gt;EntityClient&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;实体框架（Entity Framework）在ADO.NET 3.5 提供程序的基础上引入新的 ADO.NET 提供程序 EntityClient。Entity­Client 看上去与之前使用的 ADO.NET 提供程序非常类似，它将提供第一个抽象，可允许开发人员使用标准的 Connection、Command 和 DataReader 对象依照 EDM 执行查询。它还会将映射域模型所需的客户端视图引擎（根据 EDM 定义的）添加到底层关系数据库架构。必要时，EntityClient 可借助 ESQL 查询字符串让开发人员以行和列的形式处理实体，而不必生成类来表示概念架构。&lt;br /&gt;
&lt;br /&gt;
本系列文章上一篇：&lt;br /&gt;
&lt;a id="AggRecentPosts1_RecentPosts_ctl00_Hyperlink2" href="http://blog.entlib.com/EntLib/archive/2008/10/20/entity-data-model-edm-part-1.aspx"&gt;&lt;font color="#41519a"&gt;Entity Data Model (EDM) 深入分析, Part 1&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a id="AggRecentPosts1_RecentPosts_ctl00_Hyperlink2" href="http://blog.entlib.com/EntLib/archive/2008/10/21/entity-data-model-edm-part-2.aspx"&gt;Entity Data Model (EDM) 深入分析, Part 2&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. EntityCommand &lt;/b&gt;&lt;b&gt;查询返回实体类型&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Entity SQL也可以通过EntityClient 来执行，尽管代码比较啰嗦，但是在某些情况下，也是优点。&lt;/div&gt;
&lt;div&gt;1) 首先创建EntityConnection，重用Northwind data context 的连接字符串，并打开连接。&lt;/div&gt;
&lt;div&gt;2) 创建 EntityCommand 对象，并传入Entity SQL语句和数据库连接对象。&lt;/div&gt;
&lt;div&gt;3) 创建DbDataReader对象，并循环读取返回的结果集。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;NorthwindEntities context = new NorthwindEntities();&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;EntityConnection conn = new EntityConnection(context.Connection.ConnectionString);&lt;/div&gt;
&lt;div&gt;conn.Open();&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;var sql = "SELECT VALUE emp FROM NorthwindEntities.Employees AS emp";&lt;/div&gt;
&lt;div&gt;EntityCommand cmd = new EntityCommand(sql, conn);&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;DbDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);&lt;/div&gt;
&lt;div&gt;while (reader.Read())&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt; Console.WriteLine("{0} {1} {2} {3}", reader["EmployeeID"], reader["LastName"],&lt;/div&gt;
&lt;div&gt;&lt;span&gt;    reader["FirstName"], reader["Country"]);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;当时使用SequentialAccess的DbDataReader时，需要小心访问数据，务必有序的读取。&lt;/div&gt;
&lt;div&gt;如你改变成员的顺序，将抛出InvalidOperationException 异常 - "Attempt to read from column ordinal '0' is not valid. With CommandBehavior.SequentialAccess, you may only read from column ordinal '2' or greater."&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Console.WriteLine("{0} {1} {2} {3}", reader["LastName"], reader["EmployeeID"],&lt;/div&gt;
&lt;div&gt; reader["FirstName"], reader["Country"]);&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. EntityCommand &lt;/b&gt;&lt;b&gt;查询返回匿名类型&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;采用相同的技术可以实现返回匿名类型。&lt;/div&gt;
&lt;div&gt;EntityConnection conn = new EntityConnection(context.Connection.ConnectionString);&lt;/div&gt;
&lt;div&gt;conn.Open();&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;var sql = "SELECT emp.LastName, emp.FirstName " +&lt;/div&gt;
&lt;div&gt;&lt;span&gt;          "FROM NorthwindEntities.Employees AS emp";&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;EntityCommand cmd = new EntityCommand(sql, conn);&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;DbDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);&lt;/div&gt;
&lt;div&gt;while (reader.Read())&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt; Console.WriteLine("{0} {1}", reader["LastName"], reader["FirstName"]);&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;3. EntityCommand &lt;/b&gt;&lt;b&gt;带参数查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;EntityCommand 带参数也比较容易，在Entity SQL字符串中参数名称以@作为前缀，接着创建EntityParameter对象，并增加到EntityCommand 的Parameters集合内。&lt;/div&gt;
&lt;div&gt;EntityConnection conn = new EntityConnection(context.Connection.ConnectionString);&lt;/div&gt;
&lt;div&gt;conn.Open();&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;var sql = "SELECT VALUE emp FROM NorthwindEntities.Employees AS emp " +&lt;/div&gt;
&lt;div&gt;&lt;span&gt;          "WHERE emp.Country = @country";&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;EntityCommand cmd = new EntityCommand(sql, conn);&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;EntityParameter param = new EntityParameter("country", DbType.String);&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;param.Value = "USA";&lt;/div&gt;
&lt;div&gt;cmd.Parameters.Add(param);&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;DbDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);&lt;/div&gt;
&lt;div&gt;while (reader.Read())&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt; Console.WriteLine("{0} {1} {2} {3}", reader["EmployeeID"], reader["LastName"],&lt;/div&gt;
&lt;div&gt;&lt;span&gt;    reader["FirstName"], reader["Country"]);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;LINQ to Entities&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;LINQ是在.NET v3.5 引入的新技术。相对于前面的Entity SQL而言，我更偏爱LINQ to entities。LINQ查询虽然有一些局限，但是LINQ更容易、更自然，此外，还支持强类型，因此智能提示能帮助编写LINQ查询脚本。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;LINQ to Entities 与LINQ to Objects和LINQ to SQL 基本一样，因此下面简单演示2个基本的LINQ to Entities的查询。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. LINQ &lt;/b&gt;&lt;b&gt;带参数查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;NorthwindEntities context = new NorthwindEntities();&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;string country = "USA";&lt;/div&gt;
&lt;div&gt;var query = from e in context.Employees&lt;/div&gt;
&lt;div&gt;&lt;span&gt;            where e.Country == country&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;            select e;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;foreach (var emp in query)&lt;/div&gt;
&lt;div&gt; Console.WriteLine("{0} {1} {2} {3}", emp.EmployeeID, emp.FirstName, emp.LastName, emp.Country);&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. LINQ &lt;/b&gt;&lt;b&gt;查询返回匿名类型&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;NorthwindEntities context = new NorthwindEntities();&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;var query = from e in context.Employees&lt;/div&gt;
&lt;div&gt;&lt;span&gt;            select new { e.LastName, e.FirstName };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;foreach (var emp in query)&lt;/div&gt;
&lt;div&gt; Console.WriteLine("{0} {1}", emp.LastName, emp.FirstName);&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;这篇文章对Entity Data Model 和Entity Framework 提供了各种查询技术进行了简单的介绍，希望对你有帮助。下一篇文章将介绍更高级的 Entity SQL 查询技术、查看SQL 语句、eager loading、变更跟踪、并发… 等等。&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;b&gt;推荐Entity Framework &lt;/b&gt;&lt;b&gt;相关文章：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. Entity Framework – Update Model From Database, Part 1&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-update-model-from-database-part-1.aspx"&gt;&lt;font color="#800080"&gt;http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-update-model-from-database-part-1.aspx&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;2. Entity Framework – Update Model From Database, Part 2&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-update-model-from-database-part-2.aspx"&gt;&lt;font color="#800080"&gt;http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-update-model-from-database-part-2.aspx&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;3. Entity Framework 架构简介&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-architecture.aspx"&gt;&lt;font color="#800080"&gt;http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-architecture.aspx&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;4. 比较LINQ to SQL Diagram 和Entity Data Model&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2008/10/19/linq-to-sql-diagram-entity-data-model.aspx"&gt;&lt;font color="#800080"&gt;http://blog.entlib.com/EntLib/archive/2008/10/19/linq-to-sql-diagram-entity-data-model.aspx&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;英文链接：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. ADO.NET Entity Framework &amp;amp; LINQ to Entities,&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.scip.be/index.php?Page=ArticlesNET12"&gt;&lt;font color="#800080"&gt;http://www.scip.be/index.php?Page=ArticlesNET12&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/49.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>EntLib.com</dc:creator>
            <guid>http://blog.entlib.com/EntLib/archive/2008/10/22/entity-data-model-edm-part-3.aspx</guid>
            <pubDate>Wed, 22 Oct 2008 14:23:32 GMT</pubDate>
            <wfw:comment>http://blog.entlib.com/EntLib/comments/49.aspx</wfw:comment>
            <comments>http://blog.entlib.com/EntLib/archive/2008/10/22/entity-data-model-edm-part-3.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/49.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>