HI,大家好!
最近本人在学习Entity Framework时候遇到一个很费解的问题,请有识之士能帮助解答!
Q1: Entity Framework已经支持了enum类型,Entity Framework支持enum类型的意义是什么?
Q2: 做一些seed data的时候使用enum,那么enum是否适用于所有的seed data。例如性别,星期等,但是在页面上需要展示这些这些seed data作为dropdownlist的选项,那么使用枚举是否会方便?
Q3: 利用enum来实现seed data,像课程分类,课程是否适用enum?我认为这些不应该用enum,因为这些数据是会需要再次维护的。
Q4: enum适用的场合,当下经过一些实践,我觉得利用enum可以表示一些不被展现的seed data数据,而需要进行表现的展现的数据不适合用enum因为转换以及反转换很是麻烦,并且,适用enum也破坏了数据库的表的关联。
请讨论一下!谢谢!
Q4我已经提到过,个人认为Enum应该是为标注一系列判定状态而用的不利于展现什么,我搜了很多资料也没有发现关于这个问题说明(中文的资料,还没查找英文),大多数都是举个怎么用Enum的例子,感谢楼1的朋友给出了代码,这个代码在项目里面已经用了,就是因为我发现用Enum做为seed data其实是很不方便的,因此才发出这个帖子和大家一起讨论一下,enum到底存在的意义和应用的环境,这不单单是技巧,我想微软也不至于搞一些华丽的技巧而体现自己多么专业,最后我认为越是基础的越需要搞明白(不因有而用,不因用而用,应用而用视为用 - 个人总结)
Q1:语义问题,在程序中 当看一个数字时,不知道它表示的是什么,enum可以表达出来
Q2:seed data 如果不需要动态维护,就可以用enum,页面上 enum可以转换成键值对,绑定到dropdownlist,很方便
Q3:需要维护的,不要弄成enum
Q4:enum展示很方便,只需要扩展几个方法就好了,如果不是enum,不是也要转换吗,没有enum方便。
enum只是程序中用,数据库中的值还是 原来的类型吧,只是EF做了转换吧,enum怎么会破坏表关联呢?? (EF4.1后的高版本没用过)
多谢回答!不过我想问一下如果是这种seed data该如何处理!我感觉很麻烦!
例如:
public enum A
{
[Description("多谢 回答")]
TempA = 1,
}
像类似于这种转换获取是否简单!我可以将他们绑定到dropdownlist上,那么value 和text分别都绑定都对应什么呢?
例如value = 1还是value=TempA?
@佩恩六道:
先把 A枚举转换成 dropdownlist要的数据就行了
//通用封装 类似 Type enumType = typeof(TEnum); string[] names = Enum.GetNames(enumType); Dictionary<int, string> dictionary = new Dictionary<int, string>(); for (int i = 0; i < names.Length; i++) { var enumInstance = (TEnum)Enum.Parse(enumType, names[i]); int value = Convert.ToInt32(enumInstance, CultureInfo.CurrentCulture); dictionary.Add(value, enumInstance.GetDescription()); } //字典可以 换成 你的 SelectItem
一般这种供选择的值是用 数据库字典进行维护比较好,即 DataVal
create table KeyVal( ID uniqueidentifier not null default NewSequentialID(), Key nvarchar(20) not null,--用来显示,可编辑 Value int not null,--用来保存,不可编辑 Type varchar(20) not null,--类型,区分性别,星期,课程等 constraint PK_ACCOUNT primary key (ID) )