摘要:

在《一句代码实现批量数据绑定》中,我通过界面控件ID与作为数据源的实体属性名之间的映射实现了批量数据绑定。由于里面频繁涉及对属性的反射——通过反射从实体对象中获取某个属性值;通过反射为控件的某个属性赋值,所以这不是一种高效的操作方式。为了提升性能,我通过IL Emit的方式创建了一个PropertyAccessor组件,以实现高效的属性操作。如果你看了我在文中给出的三种属性操作性能的测试结果,相信会对PropertyAccessor的作用有深刻的印象。
阅读全文
posted @ 2011-03-24 21:23
Artech
阅读(7925)
推荐(16)
摘要:

对于一个以数据处理为主的应用中的UI层,我们往往需要编写相当多的代码去实现数据绑定。如果界面上的控件和作为数据源的实体类型之间存储某种约定的映射关系,我们就可以实现批量的数据绑定。为了验证这种想法,我写了一个小小的组件
阅读全文
posted @ 2011-03-23 22:53
Artech
阅读(10114)
推荐(45)
摘要:

Oracle uses a Data Dictionary to store details of all the Tables, Columns etc.. (check out the associated Data Model). You will normally be interested only in your own Tables, which are provided by the 'USER' views, which are for the User who is currently logged in.
The System Administrator or DBA will usually be interested in the 'ALL' Views, which show data for all Users.
阅读全文
posted @ 2011-03-18 14:06
Artech
阅读(3632)
推荐(2)
摘要:

本篇文章讨论可空值类型(Nullable)的转换,却确地说是如何将一种类型的值对象转换成相应的可空值。这来源于今天我们的一个成员遇到的一个小问题,我经过一些整理写了这篇文章。虽然没有什么技术含量可言,也希望对某些读者带来帮助。
阅读全文
posted @ 2011-03-17 20:20
Artech
阅读(26450)
推荐(34)
摘要:

[J.D. Meier's Blog]“Life is like skiing. Just like skiing, the goal is not to get to the bottom of the hill. It’s to have a bunch of good runs before the sun sets.” – Seth Godin
It's been a good run. After more than 10 years in patterns & practices, I'm on to my next adventure here at Microsoft.
For this post, I wanted to take a stroll down memory lane. During my time at patterns & practices,
阅读全文
posted @ 2011-03-17 12:47
Artech
阅读(1985)
推荐(4)
摘要:

对于数据库设计来说,多对多(或者一对多)是一种常见的数据关系,比如联系人和地址之间的关系。我们通常采用建立关系表的方式来表示这种关系,比如我们创建一张表来存储联系人和地址之间的关系。如果我们最终需要通过存储过程的方式来维护他们之间的关系,该如何做呢?本篇文章给你一个具体的例子来演示如果采用存储过程来建立和删除实体之间的关系。
阅读全文
posted @ 2011-03-16 16:41
Artech
阅读(6987)
推荐(7)
摘要:

继续讨论EF中使用存储过程的问题,这回着重讨论的是为存储过程的参数进行赋值的问题。说得更加具体一点,是如何为实体映射的Delete存储过程参数进行赋值的问题。关于文中涉及的这个问题,我个人觉得是EF一个有待改进的地方,不知道各位看官是否同意?
阅读全文
posted @ 2011-03-13 16:02
Artech
阅读(5264)
推荐(9)
摘要:

本篇文章通过实例的方式,讨论两个在EF使用存储过程的主题:如何通过实体和存储过程的映射实现逻辑删除;对于具有自增长类型主键的数据表,在进行添加操作的时候如何将正确的值反映在实体对象上。
阅读全文
posted @ 2011-03-13 00:13
Artech
阅读(6302)
推荐(8)
摘要:

今天写程序频繁用到两中字符串操作:删除某个字符串指定的前缀和后缀。由于没有现成的方法可用,写了两个扩展方法:TrimPrefix和TrimSuffix。
阅读全文
posted @ 2011-03-07 20:52
Artech
阅读(7092)
推荐(6)
摘要:

在《实现存储过程的自动映射》中,我通过基于T4的代码生成实现了CUD存储过程的自动映射。由于映射的都是基于数据表结构的标准的存储过程,所以它们适合概念模型和存储模型结构相同的场景。如果两种模型存在差异,在进行数据更新操作的时候就会出错。本篇文章主要介绍当概念模型中具有继承关系的两个实体映射到数据库关联的两个表,如何使用存储过程。
阅读全文
posted @ 2011-03-06 22:32
Artech
阅读(6507)
推荐(7)
摘要:

最近一段时间的工作任务是如何将EF引入到我们的开发框架,进行相应的封装、扩展,使之成为一个符合在特定场景下进行企业级快速开发的ORM。在此过程中遇到了一些挑战,也有一些心得。为了向大家分享这些心得,接下来我会写一系列相关的文章。第一个主题是关于在EF中使用存储过程的问题
阅读全文
posted @ 2011-03-05 10:04
Artech
阅读(23239)
推荐(24)
摘要:

《上篇》中我们介绍Kerberos认证的整个流程。在允许的环境下,Kerberos是首选的认证方式。在这之前,Windows主要采用另一种认证协议——NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答消息交换模式完成对请求者的认证。
阅读全文
posted @ 2011-01-25 12:37
Artech
阅读(44993)
推荐(11)
摘要:

最近一段时间都在折腾安全(Security)方面的东西,比如Windows认证、非对称加密、数字证书、数字签名、TLS/SSL、WSS等。如果时间允许,我很乐意写一系列的文章与广大网友分享、交流。对于很多读者来说,今天讨论的可能是一个既熟悉、又陌生的话题——Windows认证。
阅读全文
posted @ 2011-01-24 21:57
Artech
阅读(39428)
推荐(43)
摘要:

IoC的目的就是通过解析注册的依赖注入信息,最终创建出我们希望的某个对象。而只有通过配置的方式来定义IoC容器需要的注入信息,才能实现灵活的设计。所以,如果将两者集成起来,让IoC容器能够解析通过配置定义的“依赖注入”信息,具有很大的现实意义。接下来,我们将通过Unity为例,介绍IoC和自定义进行无缝集成的实现方案。
阅读全文
posted @ 2011-01-20 20:40
Artech
阅读(6649)
推荐(26)
摘要:

昨天在进行Code Review的时候,发现一个关于通过ConfigurationManager的GetSection方法进行配置节读取的问题。虽然这是一个很小的问题,还是它已经存在在项目里面很久了,直到今天才被发现,所以觉得具有一定分享的价值。
阅读全文
posted @ 2011-01-15 15:27
Artech
阅读(9228)
推荐(20)
摘要:

在《上篇》中我们揭示了“缺省参数”的本质,现在我们接着来谈谈C#4.0中另一个重要的新特性:协变(Covariance)与逆变(Contravariance)。对于协变与逆变,大家肯定不会感到陌生,但是我相信有很多人不能很清晰地说出他们之间的区别。我希望通过这篇文章能够让读者更加深刻的认识协变与逆变。但是也不排除另一种可能,那就是读者这篇文章你对这两个概念更加模糊。文章一些内容仅代表个人观点,如有不妥,还望指正。
阅读全文
posted @ 2011-01-13 21:08
Artech
阅读(23484)
推荐(88)
摘要:

C#4.0关于缺省参数的新特性,相信大家都不会陌生。所谓缺省参数,顾名思义,就是在声明方法的某个参数的时候为之指定一个默认值,在调用该方法的时候如果采用该默认值,你就无须指定该参数。和很多语言层面特性(语法糖)的实现一样,缺省参数也是编译器为我们玩的一个小花招。缺省参数最终体现为两个特殊的自定义特性OptionalAttribute和DefaultParameterValueAttribute 。
阅读全文
posted @ 2011-01-12 13:41
Artech
阅读(29913)
推荐(53)
摘要:

在一个Web应用中,当你添加一个Web页面的时候,VS实际上会为你创建三个文件:Xxx.aspx, Xxx.aspx.cs和Xxx.aspx.designer.cs,后面两个文件(依赖文件)依赖于第一个文件(主文件)。依赖文件嵌套在主文件下,在结构上看起来非常的清晰。那么你是否可以把存在于同一个目录下的两个相关的文件也建立这种依赖关系呢?
阅读全文
posted @ 2011-01-06 22:11
Artech
阅读(13030)
推荐(23)
摘要:

软件设计有一句话叫做“约定优于配置”,很多人将其作为拒绝配置的理由。但是,在很多场景中,配置是提供应用灵活度的首要甚至是唯一途径。对于框架的设计者来说,对于配置的驾驭是一项基本的技能。本篇文章通过一个简单而使用的例子,通过自定义配置的形式实现“插件式”设计。
阅读全文
posted @ 2011-01-05 20:23
Artech
阅读(7766)
推荐(38)
摘要:

之前写了两篇文章《.NET资源并不限于.ResX文件》(上篇、下篇),介绍了如何通过自定义ResourceManager的方式来扩展资源的存储形式。在本篇文章中我们将实现自定义ResourceManager和ASP.NET之间的集成,让ASP.NET现有的资源编程方式支持我们希望的资源存储方式。
阅读全文
posted @ 2010-12-30 22:43
Artech
阅读(6666)
推荐(13)
摘要:

在《上篇》中我们谈到ResourceManager在默认的情况下只能提供对内嵌于程序集的.resources资源文件的存取。为了实现对独立二进制.resources资源文件的支持,我们自定义了BinaryResoruceNManager。在本篇中我们还将创建两个自定义的ResourceManager,以实现对独立.resx资源文件和自定义结构的XML资源文件的支持。
阅读全文
posted @ 2010-12-17 23:03
Artech
阅读(9985)
推荐(14)
摘要:

为了构建一个轻量级的资源管理框架以满足简单的本地化(Localization)的需求,我试图直接对现有的Resource编程模型进行扩展。虽然最终没能满足我们的需求,但是这两天也算对.NET如何进行资源的存取进行了深入的学习,所以将我对此的认识通过博文的方式与诸位分享。在本篇文章中,我会通过自定义ResourceManager让资源的存储形式不仅仅局限于.ResX文件,你可以根据需要实现任意的存储方式,比如结构化的XML、数据库表,甚至是通过远程访问获取资源。
阅读全文
posted @ 2010-12-16 21:47
Artech
阅读(10985)
推荐(52)
摘要:

在之前一篇介绍CDC的文章中,我说审核跟踪是大部分企业级应用不可以或缺的功能。本篇给你一个完整的解决方案,不仅可以记录每一笔业务操作的信息(比如操作时间、操作者等),并且可以追踪每一笔业务引起的说有数据的改变(如果需要)。
阅读全文
posted @ 2010-11-29 17:04
Artech
阅读(15096)
推荐(56)
摘要:

“梦想这东西和经典一样,永远不会因为时间而褪色,反而更显珍贵。”这是10月28日上线的网络短片《老男孩》在片尾打出的一行字幕,连日来,这部以草根、怀旧、青春、人生、爱情、友情等为基调的“电影”让众多网友直言“飙泪”、“泪流满面”,截至昨天下午,该片仅在某视频网的官方播放次数就已近1600万次。如果这是一部正式上线的电影,有一半的人买票(每张计半价25元),票房也有两个亿了……《老男孩》为什么红,它凭啥点中了观众的泪穴?
阅读全文
posted @ 2010-11-27 20:49
Artech
阅读(6023)
推荐(8)
摘要:

在这之前我写过一些文章来介绍关于字符串内存分配和驻留的文章,涉及到的观点主要有:字符串的驻留机制避免了重复对象的创建;驻留的字符串对象不能被GC回收;被驻留的字符串是被同一进程中所有应用程序域共享的。这里我通过内存分析工具来证明这些结论。
阅读全文
posted @ 2010-11-25 22:12
Artech
阅读(10547)
推荐(56)
摘要:

BackgroundWorker允许您在单独的专用线程上运行操作。操作是异步执行的,用户可能在操作执行过程中关闭窗体,而窗体的关闭会伴随着Dispose方法的执行。如果我们注册了RunWorkerCompleted事件,并且在该事件处理程序中需要操作这个被Dispose的窗体,就会出现一些无法预知的异常。
阅读全文
posted @ 2010-11-25 13:34
Artech
阅读(7889)
推荐(13)
摘要:

对于大部分企业应用来用,有一个基本的功能必不可少,那就是Audit Trail。我们采用它记录每一笔业务操作的基本信息,比如操作时间、操作者等。对于高安全级别的应用,我们甚至需要记录每笔业务操作引起的数据的改变。很多人都会想到采用触发器来实现,在这里介绍一种更好的方案:SQLCDC。
阅读全文
posted @ 2010-11-20 00:50
Artech
阅读(17225)
推荐(60)
摘要:

前一阵子写了不少关于代码生成相关的文章,介绍了一些如何通过VS自动生成代码的解决方案,比如CodeDOM、T4以及ASP.NET的BuildProvider等。现在将它们作一个汇总,给广大读者作一个参考。
阅读全文
posted @ 2010-11-17 21:55
Artech
阅读(24017)
推荐(85)
摘要:

在这之前,我写了一系列关于代码生成和T4相关的文章,而我现在也试图将T4引入我们自己的开发框架。在实践中遇到了一些问题,也解决了不少问题。如果你也在进行T4相关的开发,相信你也一定会遇到这些问题。为此,特意将这些问题和解决方案与朋友们分享,希望在遇到这些问题的时候少走弯路。本篇文章介绍的是两个重要的话题:程序集锁定和调试。
阅读全文
posted @ 2010-11-16 22:58
Artech
阅读(6707)
推荐(15)
摘要:

Change Data Capture records INSERTs, UPDATEs, and DELETEs applied to SQL Server tables, and makes a record available of what changed, where, and when, in simple relational 'change tables' rather than in an esoteric chopped salad of XML. These change tables contain columns that reflect the column structure of the source table you have chosen to track, along with the metadata needed to understand the c
阅读全文
posted @ 2010-11-16 17:30
Artech
阅读(3594)
推荐(10)
摘要:

在众多.NET应用下的代码生成方案中,比如CodeDOM,BuildProvider, 我觉得T4是最好的一种。如果你编写T4模板,你不得不面对一个问题——如何引用一个程序集?VS 2010采用了与VS2008不同的程序集引用的解析机制。本篇文章为你介绍在VS2010下5种不同的程序集引用的方式。
阅读全文
posted @ 2010-11-09 23:25
Artech
阅读(15514)
推荐(33)
摘要:

如今闹得不可开交的3Q大战已经成了一道独特的风景线。这两个中国最大的客户端软件提供商各有拥趸无数,双方铆足了劲相互吐口水、扔砖头,现在貌似到了动刀子了。周、马在媒体上也都将自己标榜为“美貌与智慧并重、英雄与狭义的化生”。但是在我个人的眼中,却只有两个流氓,但是在当今这个混杂的环境中,只有流氓才能生存。
阅读全文
posted @ 2010-11-07 11:23
Artech
阅读(11385)
推荐(170)
摘要:

之前写了一些关于代码生成的文章,提供了两种不同方式的代码生成解决方案,即CodeDOM+Custom Tool和T4。对于ASP.NET应用,你还有第三种选择——自定义BuildProvider。对于ASP.NET应用的开发者来说,你可能不知道什么是BuildProvider,但是你几乎无时无刻不在使用它所带来的代码生成机制。
阅读全文
posted @ 2010-11-06 22:29
Artech
阅读(7859)
推荐(30)
摘要:

Welcome to the Windows Azure Developer Guidance Map! This map is a consolidated index of Windows Azure content collections for developers. The primary content collections included in this map are: Code Samples, How Tos, Videos, and Training. Within the content collections, the resources are organized by Windows Azure features, common tasks, and common categories for Windows Azure development.
阅读全文
posted @ 2010-11-03 09:23
Artech
阅读(3943)
推荐(12)
摘要:

在一个基于ASP.NET应用中,我们通常使用Session保存基于某个客户端的状态信息。但是这种单纯使用Session的编程方式具有很多局限。为了实现对客户端状态的有效管理,并提高应用开发效率,在很多年前我们的开发框架体系中就具有相关的编程框架。最近我开始对其进行升级和重新设计,将大体上实现原理写出来与大家分享。
阅读全文
posted @ 2010-10-31 21:08
Artech
阅读(10118)
推荐(54)
摘要:

C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的。相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制。但是即使你知道这个机制,你也很容易在不经意间掉入它制造的陷阱。
阅读全文
posted @ 2010-10-28 20:32
Artech
阅读(10153)
推荐(41)
摘要:

在《上篇》中我们通过T4模板为我们指定的数据表成功生成了我们需要的用于添加、修改和删除操作的存储过程。但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板。如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利,本篇文章将为你解决这个问题。
阅读全文
posted @ 2010-10-25 19:34
Artech
阅读(19856)
推荐(44)
摘要:

在《基于T4的代码生成方式》中,我对T4模板的组成结构、语法,以及T4引擎的工作原理进行了大体的介绍,并且编写了一个T4模板实现了如何将一个XML转变成C#代码。为了让由此需求的读者对T4有更深的了解,我们通过T4来做一些更加实际的事情——为某个数据表自动生成进行插入、修改和删除的存储过程。
阅读全文
posted @ 2010-10-25 07:37
Artech
阅读(23148)
推荐(66)
摘要:

在之前写一篇文章《从数据到代码》(上篇、下篇)中,我通过基于CodeDOM+Custom Tool的代码生成方式实现了将一个XML表示的消息列表转换成了相应的C#代码,从而达到了强类型编程的目的。实际上,我们最常用的代码生成当时不是CodeDOM,而是T4,这是一个更为强大,并且适用范围更广的代码生成技术。今天,我将相同的例子通过T4的方式再实现一次
阅读全文
posted @ 2010-10-23 22:25
Artech
阅读(23510)
推荐(98)
摘要:

《上篇》中我们主要讨论的是程序集和应用程序域的话题,着重介绍了两个不同的程序集加载方式:独占方式和共享方式("中立域"方式);以及基于"进程范围内"的字符串驻留。这篇将关注点放在托管对象创建时"内存的分配"和对"大对象的回收"上。
阅读全文
posted @ 2010-10-20 22:24
Artech
阅读(9666)
推荐(65)