1. 程式人生 > >ALinq 使用教程(七)ALinq 的擴充套件

ALinq 使用教程(七)ALinq 的擴充套件

ALinq 在 Linq to SQL 的基本,做了一些擴充套件,使得它更為好用。

獲取實體類的 DataContext 物件

選擇Category 實體類,將 DataContext 設為 True 。

 

執行下面的程式碼:

staticvoid Main(string[] args)
{
var dc
=new NorthwindDataContext() { Log = Console.Out };
var category
= dc.Categories.First();
Console.WriteLine(category.DataContext);
}

執行結果:

很明顯,可以看到 category.DataContext 物件不為空,但是我們並沒有在程式碼中給 category.DataContext 賦值,它怎麼會不為空呢?我來看一下程式碼生成器生成的程式碼。

程式碼 // This method is called by the dataContext when the entity is created.privatevoid SetDataContext(ALinq.DataContext dataContext)
{
this.DataContext = ((NorthwindDataContext)(dataContext));
}

public NorthwindDataContext DataContext
{
get
{
returnthis._DataContext;
}
privateset
{
this._DataContext = value;
}
}

我們主意到 SetDataContext 這個方法,當一個實體被 DataContext 建立後,DataContext 便會通反射檢索名稱 SetDataContext 的方法,如果存在,則呼叫該方法。所以,儘管我閃並沒有對 category.DataContext 賦值,但 DataContext 卻通過呼叫 SetDataContext 對它進行了賦值。

批量更新、刪除

程式碼 staticvoid Main(string[] args)
{
var dc
=new NorthwindDataContext() { Log = Console.Out };
dc.Categories.Update(o
=>new Category { Categoryname ="New Name" }, o => o.Categoryid ==-1);
dc.Categories.Delete(o
=> o.Categoryid ==-1);
}

執行結果:

使用 Linq 表示式插入資料

程式碼 staticvoid Main(string[] args)
{
var dc
=new NorthwindDataContext() { Log = Console.Out };
var categoryID
= dc.Categories.Max(c => c.Categoryid) +1;
dc.Categories.Insert(o
=>new Category
{
Categoryid
= categoryID,
Categoryname
="Category Name",
Description
="Description"
});
}

執行結果: