实体类的枚举属性--原来支持枚举类型这么简单没有EF5.0也可以.docx

实体类的枚举属性--原来支持枚举类型这么简单没有EF5.0也可以.docx

ID:62053066

大小:110.63 KB

页数:9页

时间:2021-04-16

实体类的枚举属性--原来支持枚举类型这么简单没有EF5.0也可以.docx_第1页
实体类的枚举属性--原来支持枚举类型这么简单没有EF5.0也可以.docx_第2页
实体类的枚举属性--原来支持枚举类型这么简单没有EF5.0也可以.docx_第3页
实体类的枚举属性--原来支持枚举类型这么简单没有EF5.0也可以.docx_第4页
实体类的枚举属性--原来支持枚举类型这么简单没有EF5.0也可以.docx_第5页
资源描述:

《实体类的枚举属性--原来支持枚举类型这么简单没有EF5.0也可以.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以 通常,我们都是在业务层和界面层使用枚举类型,这能够为我们编程带来便利,但在数据访问层,不使用枚举类型,因为很多数据库都不支持,比如我们现在用的SqlServer2008就不支持枚举类型的列,用的时候也是将枚举类型转换成int类型,数据库存储的是int类型的数据,在访问数据的时候进行枚举类型和int类型的转换,例如下面的例子:publicenumRoleNames{User,Manager,Admin}假设有一个实体类Users,如果实体类不支持枚举类型,得这样使用(下面的示例都以PDF.NET的ORM框架使用来说明)://获

2、取一个实体类:Usersuser=newUsers();user.ID=1;if(EntityQuery.Fill(user)){RoleNamesrn=(RoleNames)user.RoleID;Console.Write("RoleName:"+rn);}//更新实体类:Usersuser=newUsers();user.ID=1;user.RoleID=(int)RoleNames.Admin;EntityQuery.Instance.Update(user);   查询和更新操作都得对枚举类型进行转换,不方便,虽然如此,我们大部分情况下还是将就了,在访问

3、数据库的时候这么转换下。这种情况下EF5.0之前也不例外,都是社区用户的强烈要求,在EF5.0版本之后才加入支持实体类枚举属性的。   既然使用枚举还要将实体类的属性转换下,为何不直接将实体类的属性定义成枚举类型?   修改下Users类型的定义:publicpartialclassUsers:EntityBase{//其它部分定义略publicRoleNamesRoleID{get{returngetProperty("RoleID");}set{setProperty("RoleID",value);}}}直接使用这个修改过的实体类来插入、修改数据,是没有问题的:/

4、/更新实体类:Usersuser=newUsers();user.ID=1;user.RoleID=RoleNames.Admin;EntityQuery.Instance.Update(user);但是查询实体类的时候会有点小问题,虽然能够正确的从数据库查询,但查看枚举属性的时候会报类型转换错误://获取一个实体类:Usersuser=newUsers();user.ID=1;if(EntityQuery.Fill(user)){RoleNamesrn=user.RoleID;Console.Write("RoleName:"+rn);}   跟踪代码发现,us

5、er.RoleID对应的SqlReader的结果类型是int,因为数据库的RoleID列没法定义成枚举类型,如果要将实体类的属性定义成枚举类型,那么在SqlReader读取的时候,必须进行类型转换:user.RoleID=(RoleNames)reader["RoleID"];   幸好PDF.NET的实体类认为“实体类是数据的容器”,内部采用一个object[]保存来自数据库的原始数据,而在使用数据的时候,才来进行类型转换,因此框架原来查询数据、插入、更新数据的地方,都不用做任何修改,只需要修改下getProperty("fieldName")涉及的部分:publicstaticTC

6、hangeType(objectValue){if(ValueisT)return(T)Value;elseif(Value==DBNull.Value

7、

8、Value==null){if(typeof(T)==typeof(DateTime)){//如果取日期类型的默认值0001/01/01,在WCFJSON序列化的时候,会失败。objecto=newDateTime(1900,1,1);return(T)o;}elsereturndefault(T);}else{//editat2011.5.16//如果Value为decimal类型,T 为double类型,(T)Value将发生错

9、误//editat2013.8.9支持枚举类型if(typeof(T).IsEnum)return(T)Value;elsereturn(T)Convert.ChangeType(Value,typeof(T));}}使用PDF.NET框架的V4.X版本(包括V4.6之前的版本)用户,只需要打开CommonUtil.cs文件,找到该方法,将return(T)Convert.ChangeType(Value,t

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。