最近使用ADO.net Entity應用中遇到一個分表的應用,IDE中是不可視化支援這個的,為此使用了基于LINQ的方法解決了該問題。
分表技術顧名思義,就是把若幹個存儲相同類型資料的表分成幾個表分表存儲,在提取資料的時候,不同的使用者通路不同的表,互不沖突,減少鎖表的幾率。
詳細參考:
<a href="http://club.topsage.com/thread-1842602-1-1.html">http://club.topsage.com/thread-1842602-1-1.html</a>
Ø 使用sqlmetal.exe(VS開發工具帶) 生成實體類和架構檔案
Ø 選擇需要使用的實體類和配置檔案,形成使用的模闆
Ø 基于這些模闆,使用XmlMappingSource 類和LINQ通路資料庫
sqlmetal /server:localhost /database:northwind /code:ns.cs /map:ns.xml /namespace:DAL
<?xml version="1.0" encoding="utf-8"?>
<Database Name="{0}" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007">
<Table Name="{1}">
<Type Name="Customer">
<Column Name="CustomerID" Member="CustomerID" Storage="_CustomerID" DbType="NChar(5) NOT NULL" CanBeNull="false" IsPrimaryKey="true" />
<Column Name="CompanyName" Member="CompanyName" Storage="_CompanyName" DbType="NVarChar(40) NOT NULL" CanBeNull="false" />
<Column Name="ContactName" Member="ContactName" Storage="_ContactName" DbType="NVarChar(30)" />
</Type>
</Table>
</Database>
{0} {1}表示可變的資料庫和表名稱
…
XmlMappingSource xml = XmlMappingSource.FromXml(string.Format(AppResource.SentenceTemplate, "IAT2011", sentenceName));
using (DataContext ctx = new DataContext(System.Configuration.ConfigurationManager.ConnectionStrings["IATDB"].ConnectionString, xml))
{
ctx.DeferredLoadingEnabled = true;
…
}