快速业务通道

微型项目实践(8):数据访问的实现

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
2: /// 构造新的数据库
33: /// </summary>
34: /// <param name="connectionString">数据库连接字符 串</param>
35: /// <returns>数据库实例</returns>
36: public static Database New(string connectionString)
37: {
38: if (string.IsNullOrEmpty(connectionString))
39: throw new ArgumentNullException ("connectionString");
40:
41: return new Database(connectionString, getMappingSource());
42: }

以上代码通过Database的私有构造函数和共有静态方法保证数据库使用的外部Linq映射源是静态唯一 的。其中Database构造函数继承于DataContext的构造函数,该构造函数在Linq中的定义如下:

  1: //
  2: // Summary:
  3: //   Initializes a new instance of the System.Data.Linq.DataContext class by 

referencing
  4: //   a file source and a mapping source.
  5: //
  6: // Parameters:
  7: //  fileOrServerOrConnection:
  8: //   This argument can be any one of the following:The name of a file where a
  9: //   SQL Server Express database resides.The name of a server where a database
 10: //   is present. In this case the provider uses the default database for a user.A
 11: //   complete connection string. LINQ to SQL just passes the string to the provider
 12: //   without modification.
 13: //
 14: //  mapping:
 15: //   The System.Data.Linq.Mapping.MappingSource.
 16: public DataContext(string fileOrServerOrConnection, MappingSource mapping);

Linq的映射文件使用嵌入式资源的方式储存(将其文件属性改为Embedded Resource,如下图)。而 getMappingSource方法通过加锁的方式使_MappingSource只初始化一次,其中两次使用了if (_MappingSource == null),确保取得锁的过程中的不会出现并发冲突(尽管这种概率极小)。

微型项目实践(8):数据访问的实现

Database的第二部分是实现IDatabase接口,涉及代码如下:

  1: #region IDatabase Members
  2: 
  3: /// <summary>
  4: /// 取得某一个实体的数据访问
  5: /// </summary>
  6: /// <typeparam name="T">实体类型</typeparam>
  7: /// <returns>该实体的数据访问</returns>
  8: public IEntityDataAccess<T> GetDataAccess<T>() where T : class
  9: {
 10:   return new EntityDataAccessAdapter<T>(this);
 11: }
 12: 
 13: /// <summary>
 14: /// 提交数据库变更
 15: /// </summary>
 16: public void Submit()
 17: {
 18:   base.SubmitChanges();
 19: }
 20: 
 21: #endregion
 22: 
 23: #region Blogs
 24: 
 25: public IEntityDataAccess<Blog> Blogs
 26: {
 27:   get { return new EntityDataAccessAdapter<Blog>(this); }
 28: }
 29: 
 30: public IEntityDataAccess<BlogClass> BlogClasses
 31: {
 32:   get { return new EntityDataAccessAdapter<BlogClass>(this); }
 33: }
 34: 
 35: #endregion

可以从代码中看到,对于GetDataAccess<T>的调用,全部委托给了EntityDataAccessAdapter类 。至于EntityDataAccessAdapter类,全部是调用System.Data.Linq.Table的方法,看一下代码很容易就 可以明白,就不贴出来了。

最后一个问题:Linq的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号