linq to sql公共基类--

linq to sql公共基类--

ID:22371378

大小:90.50 KB

页数:17页

时间:2018-10-28

linq to sql公共基类--_第1页
linq to sql公共基类--_第2页
linq to sql公共基类--_第3页
linq to sql公共基类--_第4页
linq to sql公共基类--_第5页
资源描述:

《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  {  

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。