仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 862|回复: 10
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-18 11:18:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。《看我72变》是蔡依林的一首歌,“我要改过自新,人定能够胜天,妄想近在长远。。。”
在代码天下中,有一种罕见的“变”——范例变化。这篇文章分享的就是怎样经由过程范例变化,办理EntityFramework(5.0之前的版本)中列举范例(实体)与tinyint(数据库字段范例)的映照成绩。
关于必要举行耐久化的列举范例,我们一般在数据库表中创建一个对应的tinyint范例的字段。
假如我们利用EntityFramework作为ORM,将面对两个成绩:
1.EF不撑持列举范例的间接映照(5.0之前的版本)
2.关于tinyint数据库范例,不论对应的实体属性界说的是甚么范例,EF一直映照为byte范例。
响应的办理办法也不难:
1.给实体增添一个“两头人”属性,与数据库中对应的字段举行映照,然后再转换为列举范例。
2.将这个“两头人”属性界说为byte范例。
因而就有了上面的代码:
  1. 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。
  1. publicBlogCategoryTypeCategoryType{set{CategoryTypeByte=BitConverter.GetBytes((int)value)[0];}}
复制代码

将列举转换为int,再将int转换为byte数组,然后取第一个元素。
2.小转年夜,增胖,byte转列举。
  1. 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。
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-2 22:38:52 | 只看该作者
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
admin 该用户已被删除
6#
发表于 2015-2-7 08:29:40 | 只看该作者
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
第二个灵魂 该用户已被删除
7#
发表于 2015-2-8 10:42:30 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
若天明 该用户已被删除
8#
发表于 2015-2-14 05:22:04 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
小女巫 该用户已被删除
9#
发表于 2015-3-4 04:53:15 | 只看该作者
主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。
10#
 楼主| 发表于 2015-3-18 00:58:19 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
海妖 该用户已被删除
11#
发表于 2015-3-25 08:39:49 | 只看该作者
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-2 14:52

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表