zoukankan      html  css  js  c++  java
  • ALinq 入门学习(二)DataContext

     1.       ALinq DataContext简介

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

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


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

    下面看看OA_DB DataContext源码文件:

    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 名字相同的特性源码大致如下:

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

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

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

    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 查看数据库的基本属性:

    测试代码:

    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 也有日志功能:日志分为两种情况:

    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; 使用这种情况,是将日志输出到指定的日志文件中。

  • 相关阅读:
    spring boot中创建ElasticSearch索引
    spring boot项目16:ElasticSearch-基础使用
    spring cloud项目07:网关(Gateway)(2)
    spring cloud项目06:网关(Gateway)(1)
    Ubuntu上MySQL多实例部署
    MySQL常用命令、配置汇总
    spring boot项目15:安全-基础使用(2)
    spring boot项目14:安全-基础使用(1)
    docker-compose mongodb 副本
    关于golang slice切片的一个问题
  • 原文地址:https://www.cnblogs.com/qingyuan/p/1725557.html
Copyright © 2011-2022 走看看