|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我感觉可以顶到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)[0];}}
复制代码
将列举转换为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语言。 |
|