天天看点

数据库分表时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;

                …

}

继续阅读