ADO.NET Entity Framework 4中枚举的使用
来源: 阅读:972 次 日期:2014-12-02 15:41:46
温馨提示: 小编为您整理了“ADO.NET Entity Framework 4中枚举的使用”,方便广大网友查阅!

本文将通过ADO.NET Entity Framework 4中枚举的使用介绍,带领大家走进ADO.NET的世界。

枚举(Enum)是一种常用的类型,如用于表示状态、类型等参数。但目前它不会被官方地在ADO.NET Entity Framework中进行支持。本文介绍的是通过复杂类型(Complex Types)在ADO.NET Entity Framework 4中使用枚举。

这种方法需要使用POCO类,而不能使用Visual Studio自动生成的类。因为我们需要手动为复杂类型编写代码。

数据库脚本:

if exists (select 1

from sysobjects

where id = object_id('Account')

and type = 'U')

drop table Account go create table Account

(

ID uniqueidentifier not null default NewSequentialID(),

UserName nvarchar(20) not null,

Password varchar(40) not null,

Email nvarchar(100) not null,

Role int not null,

constraint PK_ACCOUNT primary key (ID)

)

insert into Account (UserName ,Password,Email ,Role ) values ('Test1','Test1','test1',1)

insert into Account (UserName ,Password,Email ,Role ) values ('Test2','Test2','test2',1)

insert into Account (UserName ,Password,Email ,Role ) values ('Test3','Test3','test3',2)

这是一个用于存放帐号信息的数据表,Role是个枚举类型,在数据库中用int类型。

我们按常规做法写一个用于表示Role的枚举类型

public enum AccountRoleEnum {

Admin = 1,

User = 2

}

然后写一个复杂类型用于在枚举类型和数据库的int类型之间做变换。复杂类型只有在ADO.NET Entity Framework 4中才有。

public partial class RoleWrapper

{

private AccountRoleEnum m_orderStatus;

public int Value

{

get {

return (int)m_orderStatus;

}

set {

m_orderStatus = (AccountRoleEnum)value;

} }

public AccountRoleEnum EnumValue

{

get {

return m_orderStatus;

}

set {

m_orderStatus = value;

}

}

public static implicit operator RoleWrapper(AccountRoleEnum role)

{

return new RoleWrapper {

EnumValue = role

};

}

public static implicit operator AccountRoleEnum(RoleWrapper role)

{

if (role == null)

return AccountRoleEnum.User;

return role.EnumValue;

}

} 最后的2个方法用于隐式类型重载,也就是对类型进行变换。

然后我们写Account实体。

public class Account

{

public Guid ID

{

get;

set;

}

public string UserName { get; set;

}

public string Password

{

get;

set;

}

public string Email

{

get;

set;

}

public RoleWrapper Role

{

get;

set;

} 和实体框架上下文。

public class EntitiesContext : ObjectContext

{

public EntitiesContext()

: base("name=Entities", "Entities")

{

_accounts = CreateObjectSet();

}

public ObjectSet Accounts

{

get

{

return _accounts;

}

}

private ObjectSet _accounts;

}

这样,主要的工作就已经完成了,在比较时可以使用

account.Role == AccountRoleEnum.Admin 但是在涉及到数据库的查询时,这样的写法是会报错的,只能使用

EntitiesContext db = new EntitiesContext(); db.Accounts.Where(c => c.Role.Value == (int)AccountRoleEnum.Admin);

更多信息请查看IT技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map