ALinq 入门学习(二)--DataContext

 1.       ALinq DataContext简介

本系列文章使用SQL Server2005 数据库,.NET 3.5 环境。

首先我们建立一个OA_DB数据库,其中建立了三张表,表结构如下图:


ORM 映射的主要作用使用对象形式操作数据库,那我们如何使用对象形式去操作以上数据库的三张表呢,那这里讲到的的就是DataContextDataContext 的作用很明确,就和Linq to SQL 中的DataContext 的作用一样: 把查询句法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库.当然DataContex 也可以执行sql语句。

下面看看OA_DB DataContext源码文件:

ExpandedBlockStart.gif ALinq DataContext
 1  [ALinq.Mapping.DatabaseAttribute(Name = " OA_DB " )]
 2      [ALinq.Mapping.ProviderAttribute( typeof (ALinq.SqlClient.Sql2000Provider))]
 3       public   partial   class  OA_DBDataContext : ALinq.DataContext
 4      {
 5          
 6           private   static  ALinq.Mapping.MappingSource mappingSource  =   new  ALinq.Mapping.AttributeMappingSource();
 7          
 8       #region  Extensibility Method Definitions
 9       partial   void  OnCreated();
10       partial   void  InsertTabMenu(TabMenu instance);
11       partial   void  UpdateTabMenu(TabMenu instance);
12       partial   void  DeleteTabMenu(TabMenu instance);
13       partial   void  InsertTabUser(TabUser instance);
14       partial   void  UpdateTabUser(TabUser instance);
15       partial   void  DeleteTabUser(TabUser instance);
16       partial   void  InsertTabRole(TabRole instance);
17       partial   void  UpdateTabRole(TabRole instance);
18       partial   void  DeleteTabRole(TabRole instance);
19       #endregion
20          
21           public  OA_DBDataContext() : 
22                   base ( " Data Source=C23471744F6D4BC\\SQLEXPRESS;Initial Catalog=OA_DB;Integrated Security= "   +
23                           " True " , mappingSource)
24          {
25              OnCreated();
26          }
27          
28           public  OA_DBDataContext( string  connection) : 
29                   base (connection, mappingSource)
30          {
31              OnCreated();
32          }
33          
34           public  OA_DBDataContext(System.Data.IDbConnection connection) : 
35                   base (connection, mappingSource)
36          {
37              OnCreated();
38          }
39          
40           public  OA_DBDataContext( string  connection, ALinq.Mapping.MappingSource mappingSource) : 
41                   base (connection, mappingSource)
42          {
43              OnCreated();
44          }
45          
46           public  OA_DBDataContext(System.Data.IDbConnection connection, ALinq.Mapping.MappingSource mappingSource) : 
47                   base (connection, mappingSource)
48          {
49              OnCreated();
50          }
51          
52           public  ALinq.Table < TabMenu >  TabMenu
53          {
54               get
55              {
56                   return   this .GetTable < TabMenu > ();
57              }
58          }
59          
60           public  ALinq.Table < TabUser >  TabUser
61          {
62               get
63              {
64                   return   this .GetTable < TabUser > ();
65              }
66          }
67          
68           public  ALinq.Table < TabRole >  TabRole
69          {
70               get
71              {
72                   return   this .GetTable < TabRole > ();
73              }
74          }
75      }

 

 

OA_DBDataContext 继承ALinq.DataContext,它和System.Data.Linq.DataContext 的作用大同小异,只是命名空间的不同。

ALinq 中的DataContext使用了两个特性来修饰,其中和Linq to SQL 名字相同的特性源码大致如下:

ExpandedBlockStart.gif DataAttribute
 1  public   abstract   class  DataAttribute : Attribute
 2  {
 3         //  Methods
 4         protected  DataAttribute();
 5 
 6         //  Properties
 7         public   string  Name {  get set ; }
 8         public   string  Storage {  get set ; }
 9 
10         //  Fields
11         private   string  a;
12         private   string  b;
13  }
14   
15 

 

 上面的代码是通过反编译工具编译出来的,可能与源码有些出入,但是不影响阅读

前面说到过ALinq 的最大特点就是能够兼容多种数据库,而特性ProviderAttribute 就是对于兼容多种数据库起着关键性的作用。

ExpandedBlockStart.gif ProviderAttribute
 1  [AttributeUsage(AttributeTargets.Class)]
 2  public   sealed   class  ProviderAttribute : Attribute
 3  {
 4         //  Methods
 5         public  ProviderAttribute();
 6         public  ProviderAttribute(Type type);
 7 
 8         //  Properties
 9         public  Type Type {  get ; }
10 
11         //  Fields
12         private  Type a;
13  }
14   
15 

 

 

2.       ALinq DataContext使用

DataContext 查看数据库的基本属性:

测试代码:

ExpandedBlockStart.gif DataContext 属性测试代码
 1  static   void  Main( string [] args)
 2          {
 3               string  connectionString  =   @" server=C23471744F6D4BC\SQLEXPRESS;database=OA_DB;Integrated Security=true " ;
 4              OA_DBDataContext context  =   new  OA_DBDataContext( new  SqlConnection(connectionString));
 5              Console.WriteLine( " 数据库是否存在: "   +  context.DatabaseExists());
 6              Console.WriteLine( " 请求超时时间: "   +  context.CommandTimeout);
 7              Console.WriteLine( " 数据库连接字符串: "   +  context.Connection.ConnectionString);
 8              Console.WriteLine( " 数据库连接超时时间: "   +  context.Connection.ConnectionTimeout);
 9              Console.WriteLine( " 数据库名称: "   +  context.Mapping.DatabaseName);
10              
11          } 

 

 

测试结果:

 

3.       ALinq DataContext 日志

Linq to SQL 有日志功能,其实ALInq 也有日志功能:日志分为两种情况:

ExpandedBlockStart.gif ALinq 日志功能测试
 1  static   void  Main( string [] args)
 2          {
 3               string  connectionString  =   @" server=C23471744F6D4BC\SQLEXPRESS;database=OA_DB;Integrated Security=true " ;
 4              OA_DBDataContext context  =   new  OA_DBDataContext( new  SqlConnection(connectionString));
 5              Console.WriteLine( " 数据库是否存在: "   +  context.DatabaseExists());
 6              Console.WriteLine( " 请求超时时间: "   +  context.CommandTimeout);
 7              Console.WriteLine( " 数据库连接字符串: "   +  context.Connection.ConnectionString);
 8              Console.WriteLine( " 数据库连接超时时间: "   +  context.Connection.ConnectionTimeout);
 9              Console.WriteLine( " 数据库名称: "   +  context.Mapping.DatabaseName);
10 
11              StreamWriter sw  =   new  StreamWriter( " log.txt " true );
12              context.Log  =  Console.Out;
13              var linq  =  from c  in  context.TabMenu select c;
14              context.Log.Write(linq.ToString());
15              sw.Close();
16          } 

 

我们看到 context.Log = Console.Out; 这个里面在控制台输出了linq 查询的sql语句。

日志测试结果

 

还有一种情况是context.Log = sw; 使用这种情况,是将日志输出到指定的日志文件中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值