代码改变世界

动态SQL中拼入Binary数据,以及对CDC表行转列操作类型分组的标准SP

2013-12-23 16:52 by gungrave, 297 阅读, 0 推荐, 收藏, 编辑
摘要:第一个其实没啥好说的,转成NVARCHAR是关键,唯一的不好弄的是调试时不能贴出完整SQL1 set @QueryWhereBy = dbo.F_CombineWhereSql(@QueryWhereBy,concat('__$start_lsn between cast(N''',cast(@Begin_lsn as nvarchar(50)),2 ''' as binary(10)) and cast(N''',cast(@End_lsn as nvarchar(50)),''' as 阅读全文

SQLSERVER 分页

2013-12-23 16:42 by gungrave, 521 阅读, 0 推荐, 收藏, 编辑
摘要:自SQLSERVER 2008 起新增的RowNumber确实简化了很多分页的代码,目前百万数据中RowNumber 配合颠倒Top仍然是最佳实践现在项目上的搜索比较恶心,主表与从表是个一对多关系,搜索条件里可能带有从表数据,并将符合结果的主表数据以及第一条从表数据(按创建时间排序)取出,注意主表数据不能因为inner join而重复。像这么恶心的搜索我还是第一次遇到,听说还有种动态视图(可创建自适应索引),但我没去试,还是用了个比较靠谱的,思路如下:如果无从表搜索,则直接搜索主表,取出分页数,并join 从表如果有从表,则只能先join再分页。值得一提的是分页排序规则是根据当前页数与总页数相 阅读全文

修改Aaron Zhou 的WPF ComboBox 与 MultiComboBox 有感

2013-12-23 16:26 by gungrave, 693 阅读, 0 推荐, 收藏, 编辑
摘要:用VS2012 Profile 测试发现ComboBox 与 MultiComboBox的数据源OnDataSourceChanged事件中,this.Items.Add()方法被循环调用并且速度很慢,是界面加载的主要瓶颈(居然不是访问服务!怒改!)原来该对象的每一次变更都会触发OnCollectionChanged事件,并会通知前台界面重新渲染,速度很慢。改用中间变量再一次性赋值就可以了。另外,在对MultiComboBox增加输入搜索功能时发现,自定义的依赖属性DataSource,尽管ViewModel中绑定的是ObservableCollection并用TwoWay的方式,只要对象是通 阅读全文

WPF using string format to combine dynamic resource and statictis string

2013-06-21 14:00 by gungrave, 385 阅读, 0 推荐, 收藏, 编辑
摘要:View Code 阅读全文

EF Audit

2013-05-28 02:07 by gungrave, 368 阅读, 0 推荐, 收藏, 编辑
摘要:需求比较复杂,真心不想多说。每次数据库操作都要记录原始值和新值到Audit表。而且其中一些外键字段不能存外键值而必须存其业务对应值,也就是其对应的导航属性的某个值既然用了EF,哪个属性是普通属性,哪个是导航属性,哪个属性能对应到导航属性,都是可以得到的不是问题。但最终记录的是哪个导航属性的哪个值就不好说了,只能上配置信息。另外就是app规定不需要延迟加载,于是需要手动加载导航属性值先定义一下配置信息相关类using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace EFAu 阅读全文

同步多线程

2013-05-26 22:44 by gungrave, 121 阅读, 0 推荐, 收藏, 编辑
摘要:需求如下:Application启动时自动加载一些配置化数据,数据最后作为静态对象存于内存中数据量很大,所以这个加载应该是异步的后台进程,不能影响界面响应。且正因为数据量很大,正常访问界面时可能已经需要某些配置数据但尚未加载完毕,因此需要提前加载。解决方案:首先,对于要加载的数据,建立一个manager管理类,维护其是否已加载完毕的状态。这样,当真正的应用程序进程想要访问或加载数据时可以从中判断是否已被加载过。using System;using System.Collections.Generic;using System.Linq;using System.Text;using Syste 阅读全文

EF Linq To Entities ObjectManager 已存在相同键无法再Attach的解决方案

2013-05-19 22:52 by gungrave, 369 阅读, 0 推荐, 收藏, 编辑
摘要:之所以会有这个异常,八成是因为之前在同一个DbContext下已经将这个对象Attach到了Context里,即已经搜索过而现在要操作的对象八成是new或clone出来的对象,拥有相同的主键值,但不是同一个对象实例。要解决只有一个思路,就是当这个异常发生时,找到Context里那个同主键值的对象,然后强行更改这个对象的值为你要操作的那个,这样就行了。所以代码如下,先找到那个同主键值的对象:public T GetEntityKeyNames(DbContext context,T obj) where T:class { if (context == nul... 阅读全文

EntityFramework Linq to Entities Left join and filter Include

2013-05-19 22:21 by gungrave, 493 阅读, 0 推荐, 收藏, 编辑
摘要:Linq to Entity 经常有人问能不能实现对Include的内容进行where过滤的Left join,返回的结果集是同时满足主表和子表过滤条件的数据。 答案是可以,但必须使用Select匿名对象,有时候我们希望我们的导航属性里只返回过滤过的对象。麻烦但却可以实现,不过只推荐使用在取数据的情况下,数据获取完Context最好销毁以免引起混淆。原因是导航属性其实只是用来获取所有关联数据,代表的是一个关系,在Delay Load模式下更是如此。我们返回的结果不应该用导航属性来存储,不过人总是懒的,所有这样用也有道理。举个例子:一个主表Patron 与 从表 PatronIdentifica 阅读全文