Entity Framework_ALinq

来源:互联网 发布:类似爱情2只有我知mp4 编辑:程序博客网 时间:2024/06/05 11:28
原文地址: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));//orcontext = 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));//orcontext = new ALinq.DataContext(new Oracle.DataAccess.Client.OracleConnection(strcon),                                    typeof(ALinq.Oracle.Odp.OracleProvider));
SqlDataContext

MSSQL 2000、MSSQL 2005 DataContext 初始化。

//MSSQL 2000var 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 2005conn = @"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 XmlMappingSourcevar 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。