外部對映檔案
我們可以使用
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...