一步一步學Linq to sql(九) 其它補充

2021-05-24 22:19:44 字數 3383 閱讀 8934

外部對映檔案

我們可以使用

sqlmetal

命令列工具來生成外部對映檔案,使用方法如下: 1

、開始選單

-》vs2008

-》vs

工具-》

vs2008

命令列提示 2

、輸入命令:

d:/program files/microsoft visual studio 9.0/vc>sqlmetal /conn:server=***;

database=northwind;uid=***;pwd=*** /map:c:/northwind.map /code:c:/northwind.cs

3、這樣,我們就可以在

c盤下得到乙個

xml對映檔案和

c#的實體類** 4

、把.cs

檔案新增到專案中來(放到

目錄),然後使用下面的**載入對映檔案:

string

path = @"c:/northwind.map";

northwind

ctx = new

northwind("server=***;database=northwind;uid=***;pwd=***", xms);

5、現在就可以照常進行其它工作了。使用

sqlmetal

可以很方便的同步資料庫與實體和對映檔案。每次修改資料庫結構,從

dbml

設計器上刪除表、儲存過程然後再重新新增也是很麻煩的事情。

處理空值

var count = (from c in ctx.customers where c.region == null

select c).count();

response.write(count + "

");

var query = from emp in ctx.employees select emp.reportsto;

foreach (nullable

r in query)

**執行後捕獲到下面的

sql被執行:

select count(*) as [value]

from [dbo].[customers] as [t0]

where [t0].[region] is null

select [t0].[reportsto]

from [dbo].[employees] as [t0]

已編譯查詢

對於一些在專案中經常被用到的查詢可以封裝成已編譯查詢,這樣就能提高執行效率:

static

class

queries

呼叫查詢方式如下:

gridview1.datasource = queries.customersbycity(ctx, "london");

gridview1.databind();

獲取一些資訊

var query = from c in ctx.customers select c;

response.write("provider

型別:"

response.write("

資料庫:

" response.write("表:"

response.write("

表示式:

"+ query.expression.tostring() + "

"); response.write("sql:"

+ query.provider.tostring() + "

");

上面的**執行結果如下:

provider

型別:system.data.linq.sqlclient.sqlprovider

資料庫:

northwind

表:dbo.customers

表示式:

table(customer).select(c => c)

sql:

select [t0].[customerid], [t0].[companyname], [t0].[contactname], [t0].[contacttitle], [t0].[address], [t0].[city], [t0].[region], [t0].[postalcode], [t0].[country], [t0].[phone], [t0].[fax] from [dbo].[customers] as [t0]

窗體頂端

窗體底端

撤銷提交

var customer = ctx.customers.single(c => c.customerid == "arout");

customer.contactname = "zhuye";

customer.country = "shanghai";

response.write(string.format("name:,country:

", customer.contactname, customer.country));

customer = ctx.customers.getoriginalentitystate(customer);

response.write(string.format("name:,country:

", customer.contactname, customer.country));

上面的**執行效果如下:

name:zhuye,country:shanghai

name:thomas hardy,country:uk

批量操作

下面的**會導致提交n次

delete

操作:

var query = from c in ctx.customers select c;

ctx.customers.removeall(query);

ctx.submitchanges();

應該使用

sql語句進行批操作:

ctx.executecommand(sql);

對於批量更新操作也是同樣道理。

本文將會不斷補充其它點滴。最後一篇將會結合分層分布式應用給出乙個實際的專案。

一步一步學Linq to sql

一步一步學linq to sql 一 預備知識 一步一步學linq to sql 二 datacontext與實體 一步一步學linq to sql 三 增刪改 一步一步學linq to sql 四 查詢句法 一步一步學linq to sql 五 儲存過程 一步一步學linq to sql 六 特性...

一步一步學Linq to sql(九) 其它補充

外部對映檔案 我們可以使用 sqlmetal 命令列工具來生成外部對映檔案,使用方法如下 1 開始選單 vs2008 vs 工具 vs2008 命令列提示 2 輸入命令 d program files microsoft visual studio 9.0 vc sqlmetal conn serv...

一步一步學Linq to sql(九) 其它補充

外部對映檔案 我們可以使用sqlmetal命令列工具來生成外部對映檔案,使用方法如下 1 開始選單 vs2008 vs工具 vs2008命令列提示 2 輸入命令 d program files microsoft visual studio 9.0 vc sqlmetal conn server d...