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。