zoukankan      html  css  js  c++  java
  • EXTNET ALinq 【转】

    什么是 ALinq


    ALinq是一个企业级的database LINQ provider,它稳定、高效、容易使用。使用 ALinq 与Linq To SQL一样,如果你对Linq To SQL很熟悉,那么很快就能学会ALinq。

     

    ALinq入门


    引用 ALinq 库

    1, ALinq库的路径是 <install path>/bin/。

    2, Linq to Access 数据库,你需要引用 ALinq.dll、ALinq.Access.dll和System.Data.dll。

    3, Linq to SQLite 数据库,你需要引用 ALinq.dll、ALinq.SQLite.dll和System.Data.SQLite.dll。

    4, 其他数据库。连接 Oracle,需要引用 ALinq.Oracle.dll 或 ALinq.Oracle.Odp.dll。ALinq.Oracle.dll 中 OracleProvider 类,使用 System.Data.OracleClient 命名空间的 OracleConnection 类连接Oracle数据库;ALinq.Oracle.Odp.dll 中 OracleProvider,使用 Oracle 提供 Oracle.DataAccess 命名空间的 Connection 连接Oracle。

    创建 DataContext

    AccessDataContext
    //Use connection string initialize,and specify the sql provider.
    var context = new ALinq.DataContext("C:/Northwind.mdb",
                                         typeof(ALinq.Access.AccessDbProvider));
     
    //or use file name initialize the datacontext, 
    //the datacontext will specify the sql provider by file extension name.
    context = new ALinq.DataContext("C:/Northwind.mdb");
     
    //Use connection initialize.
    var builder = new OleDbConnectionStringBuilder
    {
        DataSource = "C:/Northwind.mdb",
        Provider = "Microsoft.Jet.OLEDB.4.0"
    };
    var conn = new OleDbConnection(builder.ConnectionString);
    context = new ALinq.DataContext(conn, typeof(ALinq.Access.AccessDbProvider));

     

    SQLiteDataContext
    //Use connection string initialize.
    var context = new ALinq.DataContext("C:/Northwind.db",
                                         typeof(ALinq.SQLite.SQLiteProvider));
     
    //or use file name initialize the datacontext, 
    //the datacontext will specify the sql provider by file extension name.
    context = new ALinq.DataContext("C:/Northwind.db");
     
    //Use connection initialize.
    var builder = new SQLiteConnectionStringBuilder
    {
        DataSource = "C:/Northwind.db"
    };
    var connection = new SQLiteConnection(builder.ToString());
    context = new ALinq.DataContext(connection,
                                    typeof(ALinq.SQLite.SQLiteProvider));

     

    MySqlDataContext
    var builder = new MySqlConnectionStringBuilder()
    {
        Server = "localhost",
        Port = 3306,
        UserID = "root",
        Password = "test",
        Database = "Northwind"
    };
    var conn = new MySqlConnection(builder.ToString());
    var context = new ALinq.DataContext(conn,
                                typeof(ALinq.MySQL.MySqlProvider));

     

    OracleDataContext
    var strcon = "Data Source=localhost;Persist Security Info=True;User ID=Northwind;Password=test";
     
    //Use connection string initialize,and specify the sql provider.
    var context = new ALinq.DataContext(strcon, typeof(ALinq.Oracle.OracleProvider));
     
    //or
    context = new ALinq.DataContext(strcon, typeof(ALinq.Oracle.Odp.OracleProvider));
     
    //Use connection string initialize,and specify the sql provider.
    context = new ALinq.DataContext(new System.Data.OracleClient.OracleConnection(strcon),
                                        typeof(ALinq.Oracle.OracleProvider));
    //or
    context = new ALinq.DataContext(new Oracle.DataAccess.Client.OracleConnection(strcon),
                                        typeof(ALinq.Oracle.Odp.OracleProvider));

     

    SqlDataContext

    MSSQL 2000、MSSQL 2005 DataContext 初始化。

    //MSSQL 2000
    var conn = @"Data Source=NOTEBOOK;Initial Catalog=Northwind1;
                Integrated Security=True";
    var db = new ALinq.DataContext(new SqlConnection(conn),
                            typeof(ALinq.SqlClient.Sql2000Provider));
    Console.WriteLine(db.DatabaseExists());
     
    //MSSQL 2005
    conn = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Northwind.mdf;
                 Integrated Security=True;Connect Timeout=30;User Instance=True";
    db = new ALinq.DataContext(new SqlConnection(conn),
                         typeof(ALinq.SqlClient.Sql2005Provider));
    Console.WriteLine(db.DatabaseExists()); 

     

    映射数据库

    ALinq 映射与 DLinq一样。

    AttributeMapping
    [ALinq.Mapping.Table(Name=”Customers”)]
    public class Customer
    {
        [ALinq.Mapping.Column]
        public string CustomerID;
                
        [ALinq.Mapping.Column]
        public string CompanyName;
                
        [ALinq.Mapping.Column]
        public string ContactName;
                
        [ALinq.Mapping.Column]
        public string City;
    }

     

    XmlMapping
    <?xml version="1.0" encoding="utf-8"?>
    <Database Name="NorthwindDatabase" Provider="ALinq.Access.AccessDbProvider" 
              xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007">
      <Table Name="Customers" Member="Customers">
        <Type Name="ALinqDocument.Customer">
            <Column Member="CustomerID"/>
            <Column Member="CompanyName"/>
            <Column Member="ContactName"/>
            <Column Member="ContactTitle"/>
            <Column Member="Address"/>
            <Column Member="City"/>
            <Column Member="Region"/>
            <Column Member="PostalCode"/>
            <Column Member="Country"/>
            <Column Member="Phone"/>
            <Column Member="Fax"/>
        </Type>
      </Table>
    </Database> 

     

    查询数据库

    var db = new ALinq.DataContext(@"C:/Northwind.mdb");
     
    var companyNameQuery = from cust in db.GetTable<Customer>()
                           where cust.City == "London"
                           select cust.CompanyName;
     
    foreach (var customer in companyNameQuery)
        Console.WriteLine(customer);
     
    //use XmlMappingSource
    var xmlMapping = ALinq.Mapping.XmlMappingSource.FromUrl("C:/Northwind.map");
    db = new ALinq.DataContext(@"C:/Northwind.mdb", xmlMapping);
     
    companyNameQuery = from cust in db.GetTable<Customer>()
                       where cust.City == "London"
                       select cust.CompanyName;
     
    foreach (var customer in companyNameQuery)
        Console.WriteLine(customer);

     

    为什使用 ALinq


    1, 实现Linq to SQL 的所有特色。Linq toSQL 中的所有特色在ALinq中都能找到。

    2, 完全与Linq to SQL 兼容。ALinq的API与Linq to SQL 一样,你所知道的Linqto SQL 知识可以直接应用于 ALinq。

    3, 支持大多数商业数据库,如Access、MSSQL、Oracle、SQLite、MySQL、Firebird、DB2、PostgreSQL,之后还会支持更多的数据库。

    4, 可以运行在 Mono 下。

    5, 提供强大ORDesigner。ORDesigner是ALinq 一个实体可视化设计器。它集成在VS2008和VS2010中,你可以更快、更容易地创建丰富的领域驱动模型(domain-driven models)。ORDesigner的主要特点是:支持多个数据库,如Access、SQLite、MySql、Oracle、SQL2000、SQL2005;支持从数据库中拖拽创建实体;创建 Xml 映射文件,更容易写一个独立于数据库应用程序;在ORDesigner资源管理,双击类导航到图表中的实体模型,更容易地在图表中找到实体模型;自定义实体属性(property)的属性(Attribute),调整视图属性(property)的顺序;支持 T4 文本模版。可以自定义生成的代码;图表视图(Diagram View)。可视化一个对象模型有时有点困难。当数据模型比较大时,查看类之间的关系很难。因此,创建图表视图是一个好的解决方法;更新数据类(data class)到数据库。当你修改数据类时,如添加一个成员,可以直接从图表更新映射表。请参考 http://www.alinq.org/ORDesigner.aspx

  • 相关阅读:
    Median Value
    237. Delete Node in a Linked List
    206. Reverse Linked List
    160. Intersection of Two Linked Lists
    83. Remove Duplicates from Sorted List
    21. Merge Two Sorted Lists
    477. Total Hamming Distance
    421. Maximum XOR of Two Numbers in an Array
    397. Integer Replacement
    318. Maximum Product of Word Lengths
  • 原文地址:https://www.cnblogs.com/chaoa/p/2516717.html
Copyright © 2011-2022 走看看