仓酷云 发表于 2015-1-18 11:18:48

ASP.NET编程:看我72变:办理Entity Framework中列举范例与tinyint的映照成绩仓酷云 ...

我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。《看我72变》是蔡依林的一首歌,“我要改过自新,人定能够胜天,妄想近在长远。。。”
在代码天下中,有一种罕见的“变”——范例变化。这篇文章分享的就是怎样经由过程范例变化,办理EntityFramework(5.0之前的版本)中列举范例(实体)与tinyint(数据库字段范例)的映照成绩。
关于必要举行耐久化的列举范例,我们一般在数据库表中创建一个对应的tinyint范例的字段。
假如我们利用EntityFramework作为ORM,将面对两个成绩:
1.EF不撑持列举范例的间接映照(5.0之前的版本)
2.关于tinyint数据库范例,不论对应的实体属性界说的是甚么范例,EF一直映照为byte范例。
响应的办理办法也不难:
1.给实体增添一个“两头人”属性,与数据库中对应的字段举行映照,然后再转换为列举范例。
2.将这个“两头人”属性界说为byte范例。
因而就有了上面的代码:
publicclassBlogCategory{publicCategoryTypeCategoryType{get;set;}publicbyteCategoryTypeByte{get;set;}}BlogCategory.CategoryType是列举范例的属性,是代码中实践会见的属性;BlogCategory.CategoryTypeByte是增添的“两头人”属性,公用于映照数据库中tinyint范例的字段。
随之,困难呈现了,怎样在列举范例与bype范例之间举行转换呢?在读取BlogCategory.CategoryType属性时,必要将byte转换为列举;在写进BlogCategory.CategoryType属性时,必要将列举转换为byte。
列举范例能够便利地转换为int范例,但int范例是32位的(4个byte)。也就是说,这二者尺码纷歧样,年夜转小,要减肥;小转年夜,要增胖。
关于范例转换平安成绩,我们无需忧虑,由于数据库中是tinyint范例,数据的长度不会凌驾1个byte。
那怎样转换呢?
.NET供应了一个壮大的转换器——System.BitConverter,让我们来看看怎样经由过程它完成72变。
1.年夜转小,减肥,列举转byte。

publicBlogCategoryTypeCategoryType{set{CategoryTypeByte=BitConverter.GetBytes((int)value);}}
将列举转换为int,再将int转换为byte数组,然后取第一个元素。
2.小转年夜,增胖,byte转列举。

publicBlogCategoryTypeCategoryType{get{return(BlogCategoryType)BitConverter.ToInt32(newbyte[]{CategoryTypeByte,0x0,0x0,0x0},0);}}
增添三个值为0的byte,与CategoryTypeByte组合为长度为4的byte数组(由于int范例的必要),然后将这个byte数组转换为int范例。
注:该办理办法已经由过程临床考证,的确有疗效,请宁神利用!
它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。

深爱那片海 发表于 2015-1-20 19:59:39

市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。

蒙在股里 发表于 2015-1-22 22:47:01

可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。

活着的死人 发表于 2015-1-31 13:01:03

现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。

愤怒的大鸟 发表于 2015-2-2 22:38:52

Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。

admin 发表于 2015-2-7 08:29:40

ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。

第二个灵魂 发表于 2015-2-8 10:42:30

市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。

若天明 发表于 2015-2-14 05:22:04

市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。

小女巫 发表于 2015-3-4 04:53:15

主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。

仓酷云 发表于 2015-3-18 00:58:19

同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。

海妖 发表于 2015-3-25 08:39:49

CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
页: [1]
查看完整版本: ASP.NET编程:看我72变:办理Entity Framework中列举范例与tinyint的映照成绩仓酷云 ...