• 数据库分表时OR Mapping方法


    最近使用ADO.net Entity应用中遇到一个分表的应用,IDE中是不可视化支持这个的,为此使用了基于LINQ的方法解决了该问题。

    数据库分表的意义和目的

    分表技术顾名思义,就是把若干个存储相同类型数据的表分成几个表分表存储,在提取数据的时候,不同的用户访问不同的表,互不冲突,减少锁表的几率。

    详细参考:

    http://club.topsage.com/thread-1842602-1-1.html

    基于LINQ的实现

    具体的步骤

    Ø 使用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}表示可变的数据库和表名称

    实体例子

        public partial class Customer: INotifyPropertyChanging, INotifyPropertyChanged
        {
            private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
            private string _CustomerID;
            private string _CompanyName;
            private string _ContactName;

    代码访问

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

    }

    }

  • 相关阅读:
    vue使用bus总线,实现非父子组件间的通信
    vue的$on,$emit的使用
    vue中使用v-bind="$attrs"和v-on="$listeners"进行多层组件监听
    手机端页面,点击手机号拨打电话
    Google Chrome 错误代码“STATUS_INVALID_IMAGE_HASH”
    Nuxt项目启动或打包时,显示内存不足溢出问题解决方案
    使用van-tabbar底部导航栏,会覆盖页面内容解决方法
    微信公众号配置
    文件在线预览kkFileView的使用
    akka-typed(7)
  • 原文地址:https://www.cnblogs.com/2018/p/1940573.html
Copyright © 2020-2023  润新知