天天看點

資料庫分表時OR Mapping方法

最近使用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

&lt;?xml version="1.0" encoding="utf-8"?&gt;

&lt;Database Name="{0}" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007"&gt;

  &lt;Table Name="{1}"&gt;

    &lt;Type Name="Customer"&gt;

      &lt;Column Name="CustomerID" Member="CustomerID" Storage="_CustomerID" DbType="NChar(5) NOT NULL" CanBeNull="false" IsPrimaryKey="true" /&gt;

      &lt;Column Name="CompanyName" Member="CompanyName" Storage="_CompanyName" DbType="NVarChar(40) NOT NULL" CanBeNull="false" /&gt;

      &lt;Column Name="ContactName" Member="ContactName" Storage="_ContactName" DbType="NVarChar(30)" /&gt;

    &lt;/Type&gt;

  &lt;/Table&gt;

&lt;/Database&gt;

{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;

                …

}

繼續閱讀