欢迎来到天天文库
浏览记录
ID:22371378
大小:90.50 KB
页数:17页
时间:2018-10-28
《linq to sql公共基类--》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、LINQtoSQL公共基类>> 备注:本文的源代码例子,使用的数据库为SQLServer2005下的NortheStamp列。 LINQ是VisualStudio2008中提供的一系列新特性,用以扩展C#或者VisualBasic语言,提供了强有力的查询能力。作为LINQ的组成部分,LINQtoSQL提供了将关系数据作为对象处理的运行时架构。从某种程度上说,它相当于是微软提供的类似于NHibernate和Castle之类的ORM工具或框架。当我们需要对数据库进行访问时,LINQtoSQL常常会成为我们的首选。 在LINQtoSQL
2、中,关系数据库数据模型中的所有变量都是强类型的,它提供了编译时验证以及智能感知等优点。我们可以使用查询表达式(包括查询语法和方法语法)从数据库中获取数据。 然而,强类型并不利于对数据操作进行抽象,因此,开发人员就不得不为每个实体对象定义特定的类,从而导致大量的重复代码。如果我们可以实现一个共同的基类,封装公共的数据操作,例如Select、odified):以修改或未修改状态将集合中的所有实体附加到DataContex12345下一页>>>>这篇文章来自..,。t中; Attach(Objectentity,Objectorginal
3、):通过指定实体及其原始状态,以修改或未修改状态将实体附加到DataContext。. Attach方法通常用来将反序列化的实体与DataContext的一个新实体关联。但我们也可以将一个DataContext中的实体关联到另外一个DataContext中。在修改或删除操作中,这一方法是非常有用的。 例如,我们根据另外一个DataContext中已修改的实体更新记录: publicvoidUpdate(TEntitychangedEntity) { InitDataContext(); try { m_context.G
4、etTable<TEntity>().Attach(changedEntity,true); m_context.SubmitChanges(); } catch(ChangeConflictException) { m_context.ChangeConflicts.ResolveAll(RefreshMode.KeepCurrentValues); m_context.SubmitChanges(); } } 这样的实现看起来很美,却远远不够。我们不能附加一个修改过的实体,除非该实体所对应的表中具
5、有TimeStamp列(或者主键字段的IsVersion为true)。因此,我们需要在数据库中添加列,使其类型为Timestamp,或者在LINQtoSQL设计器中将ID属性的IsVersion属性设置为true。我的建议是为所有数据表创建一个TimeStamp列,它可以提高系统的性能,因为在处理并发的时候,系统只需要检查主键和TimeStamp是否有变化,而不需要检查所有的字段。 事实上,我们也可以通过泛型传递原始的实体值,这种方法就不需要为每个表添加TimeStamp列,方法是使用Action<T>委托,代码段如下所示
6、: publicvoidUpdate(TEntityoriginalEntity,Action<TEntity>update) { InitDataContext(); try { m_context.GetTable<TEntity>().Attach(originalEntity); update(originalEntity); m_context.SubmitChanges(); } catch(ChangeConflictException) { m_context.Chang
7、eConflicts.ResolveAll(RefreshMode.KeepCurrentValues); m_context.SubmitChanges(); } } 现在,我们可以通过传递Lambda表达式来调用该方法: [TestMethod()] publicvoidUpdateichelotti提出了一个解决方案,也就是利用partial类,为每个数据实体提供一个Detach方法,用以移除实体间的关系: publicpartialclassContact { publicvoidDetach() {
8、 foreach(Addressaddressinthis.Addresses) { address.Detach(); } } } publicpartialclassAddress {
此文档下载收益归作者所有