无常

记录无常工作上的点点滴滴
posts - 106, comments - 344, trackbacks - 6, articles - 1

2008年5月4日

花了一天的时间把项目从linq2sql转到ADO.NET Entity Framework。

此项目bs部分工程量不算多,复杂的功能都做在cs部分上,bs只负责基础数据的维护和报表统计,

其实用linq2sql也可以满足了,但是linq2sql designer用得实在太不爽了,表少的时候还能应付,现在表增加到70几个了,找个表得找半天,linq2sql desinger也不提供个搜索功能:(

前天装好vs2008sp1,试了一下EF designer,增加了Overview窗口和Model browser,就为了这个也要换到EF

image

转换过程还算顺利,

1.把代码中linq2sql的DataContext换成EF的ObjectContext,这步可以用find/replace完成大部分工作

2.linq2sql创建新记录时是用DataContext.表名s.InsertOnSubmint(obj),而ef是ObjectContext.AddTo表名(object),提交变更也从DataContext.SubmitChange()改成Object.SaveChanges()

3. DataContext.表名s  =>  ObjectContext.表名,这部分可以replace完成

4.aspx文件中用到的LinqDataSource全部得换成EntitiDataSource,这里只有手工一个一个替换了,没法偷懒。LinqDataSource的查询条件需要手工换成Entity SQL,这部分工作是大头~ 还得学一下Entity SQL

5.如果linq2sql代码用到[].Contains(xx)运算的,参考一下这里的方法解决

6.如果linq2sql中访问数据库时有嵌套访问数据库的,如下面这段代码,在linq2sql中没问题。

image

如果按流程转到EF的话,就会遇到异常

image

image

这是因为EF中foreach读取数据时是采用DataReader在线读取方式,而linq2sql则是采取类似DataSet的先把所有数据从数据库中取出到内存的方式,

所以在EF中需要把外层循环改成

foreach (var depart in ctx.Department.ToList() )

 

转移工作基本就这些了

接下来要实下EntitySQL了~

posted @ 2008-08-13 21:33 无常 阅读(196) | 评论 (3)编辑

刚才看到这个POST  中介绍几种在进行耗时的操作时如何更新UI的方法,

如果使用c#的匿名方法来,我们可以让代码更简洁些。

代码如下:

image

运行效果:

posted @ 2008-08-03 21:59 无常 阅读(198) | 评论 (0)编辑

vs2008开发wince5程序,在模拟器中调试成功,连接到设备成功,但程序部署到真实设备时出错:

image

出错信息为:

image

解决办法:

从在

C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE\Diagnostics

把NETCFv35.Messages.zh-CHS.cab直接复制到设备中安装就可以了。

如果程序中用到SqlServer CE,那么同样还会遇到无法部署sqlce.ppc.wce5.armv4i.CAB之类的信息,

这时候可以直接把X:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices目录中sql.wce5.armv4i.CAB复制到设备上再手工安装。

posted @ 2008-08-03 09:39 无常 阅读(56) | 评论 (0)编辑

Color structure:

Color结构体位于System.Window.Media命名空间中,Color使用3个byte属性分别表示R、G、B三原色的颜色分量。当R=G=B=0时为黑色,当R=G=B=255时为白色。此外,有个byte类型的A属性表示此颜色的“不透明度”,其值为0时表示为全透明,值为255时表示不透明。这些都是有winform System.Drawing命名空间中的Color相同的。

此外,Color还支持表示scRGB(也称为scRGB64,因原色使用64位表达)颜色空间。Color结构还有4个float类型的属性scA、scR、scG、scB来描述scRGB颜色空间,值范围为<=1 && >=0,它们和RGB颜色空间中的A、R、G、B属性相对应。

改变Color对象的sc[ARGB]属性时相应的[ARGB]属性也会被影响,反之亦然。

Colors类封装有一百多种常用的颜色。

 

SolidColorBrush:

最简单的单色画刷,

wuchang.cnblogs.com

窗口背景颜色即改为全红色。

Brushes类定义有141个标准单色画刷,但这些画刷处于“冻结(frozen)”状态,如果尝试修改这些画刷的值时就会抛出异常:

image

但是可以复制一份没有处于冻结状态的画刷副本,如以下代码是允许的:

image

 

LinearGradientBrush 线性渐变画刷:

渐变画刷可以将二种或以上的颜色混合渐变。渐变画刷最简单的使用:

image

运行后的效果:

image

渐变画刷中定义的点是相对于填充区域范围,如(0,0)是填充区域左上角的点,(1,1)为右下角。如将以上创建画笔对象代码改为:

image 

即为垂直方向渐变:

image

 

渐变画刷还可以使用GracientStop类来指定多个“关键颜色”点,如定义彩虹画刷:

image

效果如下:

image

 

RadialGradientBrush 放射状渐变画刷:

与线性画刷不同的是放射状画刷不需要定义起始和终止点,它默认的中心点是(0.5,0.5),即填充区域的中心。

image

效果如下:

image

当然射线中心点和X/Y方向的渐变倍数也是可以任意修改的:

brush.GradientOrigin = new Point(0, 0);
brush.RadiusX = 1.5;

image

出处:http://wuchang.cnblogs.com

posted @ 2008-07-04 00:29 无常 阅读(91) | 评论 (0)编辑

System.Windows.Application是WPF应用程序最为重要和常用的类,跟踪着整个应用程序的生命周期。和winform/delphi中的application功能类似。

创建一个应用程序

wuchang.cnblogs.com

运行这个程序后,什么都没有显示。但这个程序一直运行着,没有界面,只能通过任务管理器关闭它。

wuchang.cnblogs.com

 

定义一个Window

 image

修改Main方法为

wuchang.cnblogs.com

再次运行程序,看到一空白的窗口。与Winform窗体不同的是,wpf window默认背景颜色是SystemColors.WindowColor,系统默认是白色。

wuchang.cnblogs.com

这个窗口就是应用程序的主窗口,关闭此窗口后程序结束。

再次修改Main方法:

image

程序运行后有三个窗口了:

 wuchang.cnblogs.com

此时哪个窗口是应用程序的主窗口呢?

回答:标题为“第一个实例”的窗口是应用程序的主窗口,即最先创建的窗口。

 

在winform/delphi中,应用程序的主窗口关闭程序就结束了,而wpf程序则不是这样。

如果关闭了第一个窗口,程序并没有结束,而第二个窗口则接替着成了主窗口,一直要关闭程序中的最后一个窗口后程序才结束,这是wpf默认的方式。

这个行为由Application对象的ShutdownMode属性控制着,

ShutdownMode属性为ShutdownMode 枚举类型,有三种类型可选:

ShutdownMode .OnExplicitShutdown
只有在调用Application.Shutdown()方法才能结束应用程序。

ShutdownMode .OnLastWindowClose
在应用程序最后一个窗口关闭后程序结束。也是默认的处理方式。

ShutdownMode .OnMainWindowClose
在主窗口关闭时结束程序。

此属性一般在Application.Run()前设置,如:

image

其实,你可以在程序运行的任意时间随便修改。

另外,主窗口也可以在任意时间更改,如将Main方法修改为:

wuchang.cnblogs.com

程序运行后第二个窗口即是主窗口,如果在第三个窗口中点击了鼠标,则将其置为主窗口。

出处:http://wuchang.cnblogs.com

posted @ 2008-07-01 00:12 无常 阅读(106) | 评论 (0)编辑

之前介绍过一个.NET平台的分布式缓存indeXus.Net Shared Cache ,可是发现它还不是很完善,后来使用Memcached 了。后来收到邮件Shared Cache有新版本发布,整个架构都做了大改,性能应该有比较大的提升,但由于时间的关系,也没再去测试了。

今天在网上游荡看到一POST Velocity: A Distributed In-Memory Cache from Microsoft,MS大叔也开始关注这个领域了。

Memcached一样,Velocity也是一个内存储存的分布式缓存系统,不同的是Velocity是完全基于.NET平台的。看下Velocity的部署图

cc645013_image002

Velocity可以配置成一个缓存群集,可以根据需要通过简单的配置就可以往群集中添加服务器节点。Velocity既可以当作一个独立的缓存服务运行,客户端通过网络来存储数据;同时也支持嵌入到自己的程序中运行。有意思的是Velocity提供有一个ASP.NET session provider,通过它我们可以将ASP.net的session数据都保存到Velocity中,如果你在使用WEB群集,这是个很好的消息。

目前还是CTP1。

 

相关的资源:

http://msdn.microsoft.com/en-us/library/cc645013.aspx MSDN上的一篇文章,比较系统的介绍了Velocity的架构及应用场景。

http://blogs.msdn.com/velocity/default.aspx Velocity的官方BLOG

http://www.25hoursaday.com/weblog/2008/06/06/VelocityADistributedInMemoryCacheFromMicrosoft.aspx 一篇介绍Velocity使用的文章

http://code.msdn.microsoft.com/velocity/Release/ProjectReleases.aspx?ReleaseId=1120 下载地址。这个CTP1的下载压缩包就有12.5M  :(,包里有个asp.net和一个winform的DEMO,还有一个Quick Start .DOC文档,看完这些东东就知道怎么使用了。

posted @ 2008-06-11 01:15 无常 阅读(302) | 评论 (0)编辑

今天想在新服务器上配置VPN,在打开“路由和远程访问”控制台的时候出错了,提示“试图连接到数据库存储时出错”,控制左边的“远程访问策略”和“远程访问记录”节点都都有红色出错符号。

image

在系统事件中看到出错的信息为“与 Routing and Remote Access 服务相依的组为 NetBIOSGroup,该组中的组件均未启动。”

image

在百度“知道”找到了答案http://zhidao.baidu.com/question/2576488.html?fr=qrl

出现这个错误的原因:

设置vpn的前提是在"网络连接"属性里至少需要安装两个组件:"Microsofot网络客户端"和"Internet协议(TCP/IP)"。

检查服务器的设置,发现没安装“Microsofot网络客户端”,补上这个服务后就可以使用了。

image

posted @ 2008-05-29 14:53 无常 阅读(315) | 评论 (1)编辑

添加新tag时没有去掉tag前后的空格,导致此tag的链接出错。

如,添加tag

image

注意test后有个空格,提交后文章的tag显示为

image

博客边栏“我的标签”中显示

image

注意这二处地方的tag也都有个空格。对应的链接后有个+号,链接目标错误。

http://www.cnblogs.com/wuchang/tag/test+/

posted @ 2008-05-23 00:03 无常 阅读(155) | 评论 (2)编辑

1.数组初始化

大小为10的数组,每个元素值都是-1
int[] a = Enumerable.Repeat(-1, 10).ToArray();

大小为10的数组,从0至9递增

 

int[] b = Enumerable.Range(0, 10).ToArray();

 

大小为10的数组,从100,110,120,...,190

 

int[] c = Enumerable.Range(0, 10).Select(i => 100 + 10 * i).ToArray();

 

2.生成随机数序列

生成10个范围在10-100的随机数

Random rand = new Random();
int [] randomSeq= randomSeq = Enumerable.Repeat(0, 10).Select(i => rand.Next(10,100)).ToArray();

 

3.集合类型转换

int集合转成string集合

List<int> intList = new List<int> { 1, 2, 3, 4, 5, 5 };
List<string> strList = new List<string>(intList.Cast<string>());

反过来,把string集合转成int集合

List<int> a = strList.Select(o => int.Parse(o)).ToList();

4.数组倒序

int [] arr = { 1, 2, 3, 4, 5};
arr.Reverse();

现在arr的元素已经是5,4,3,2,1了

http://wuchang.cnblogs.com

posted @ 2008-05-21 11:44 无常 阅读(216) | 评论 (4)编辑

     摘要: 轻松一下~~

How can you tell when a programmer has had sex?
When he's washing the pepper spray out of his eyes.

~~~~~~~~~~~~~~~~~~~~~~~~~

Two bytes meet. The first byte asks, "Are you ill?"
The second byte replies, "No, just feeling a bit off."
  阅读全文

posted @ 2008-05-08 15:00 无常 阅读(109) | 评论 (0)编辑

     摘要: 这年头,怪事天天有。

刚才登录键行网银,看到“我的帐户”中是一堆陌生的帐户,误以为是登录错了钓鱼网站,吓一跳。再看一下地址栏,没错呀https://ibsbjstar.ccb.com.cn,再仔细看下网页,页面背景中有个大大的DEMO字样~~

银行也这么随意,我的银子呀~~没安全感了...

抓下几张图,引以为戒~~
  阅读全文

posted @ 2008-05-04 20:26 无常 阅读(410) | 评论 (5)编辑