日期:2014-05-20  浏览次数:21086 次

关于Linq To Sql的效率和设计的问题<<ORM>>
本帖最后由 anzhiqiang_touzi 于 2011-12-22 23:38:56 编辑 快新年了:先祝大家新年好。很久没征求大家的意见了。现在想征求大家的意义和设计思路。
    最近在研究ORM架构。看了很多ORM架构。都不是很满意。不是配置复杂就是速度慢得像老牛样。
但是我还是选择了一款"老牛":Linq To SQL
先说说我的设计思路:改进Linq To SQL原始的:增加,修改,删除,提高效率

官方提供的
新增方式:

  DataClasses1DataContext ct = new DataClasses1DataContext();
        for (int i = 0; i < 10000; i++)
        {
            Common_Gen m = new Common_Gen();
            m.GenId = 1;
            m.GenType = "Type";
            m.Memo = "Memo";
            m.UpdateDate = DateTime.Now; 
            ct.Common_Gen.InsertOnSubmit(m);
        }
        ct.SubmitChanges();

修改时:官方需要从DataContext中抓去一个对象然后更新。这样不用说,相率当然有问题了。

效率问题:DataClasses1DataContext 采用对象跟踪问题
批量提交大数据量会越来越慢,到最后一条数据便得最慢
ct.SubmitChanges();最后才轮到它提交.如果不用对象跟踪的话是不能提交的会有异常出现
坚决办法:改进方法
 /// <summary>
        /// 新增数据
        /// </summary>
        /// <typeparam name="TEntity">实体</typeparam>
        /// <param name="table">Table</param>
        /// <returns>n</returns>
        public static int Add<TEntity>(this Table<TEntity> table, TEntity entity) where TEntity : class
        {
            DbCommand cmd = table.Context.Connection.CreateCommand();
            Type entityType = typeof(TEntity);
            var metaTable = table.Context.Mapping.GetTable(entityType);
            ReadOnlyCollection<MetaDataMember> dataMembers = metaTable.RowType.DataMembers;
            List<object> values = new List<object>();
            //自动增长列
            string IsDbGeneratedColumnName = null;
            StringBuilder sbColumnNames = new StringBuilder();
            StringBuilder sbValues = new StringBuilder();

            foreach (MetaDataMember mm in dataMembers)
            {
                if (!mm.IsDbGenerated && mm.DbType != null)