• Entity Framework_ALinq


    原文地址 http://www.alinq.org/

    什么是 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

  • 相关阅读:
    Python3 模块基础
    Python3 函数小练习
    Python3 函数进阶3
    Python3 函数进阶2
    Python3 函数进阶1
    Python3 函数实践之简易购物系统
    线程之间的通信
    volatile 关键字
    对象锁的同步与异步
    synchronized 关键字
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2131452.html
Copyright © 2020-2023  润新知