首页 新闻 会员 周边

Entity Framework的Enum类型,应用的问题?

0
悬赏园豆:5 [已解决问题] 解决于 2013-07-29 02:43

 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到底存在的意义和应用的环境,这不单单是技巧,我想微软也不至于搞一些华丽的技巧而体现自己多么专业,最后我认为越是基础的越需要搞明白(不因有而用,不因用而用,应用而用视为用 - 个人总结)

佩恩六道的主页 佩恩六道 | 初学一级 | 园豆:199
提问于:2013-07-24 01:30
< >
分享
最佳答案
1

Q1:语义问题,在程序中 当看一个数字时,不知道它表示的是什么,enum可以表达出来

Q2:seed data 如果不需要动态维护,就可以用enum,页面上 enum可以转换成键值对,绑定到dropdownlist,很方便

Q3:需要维护的,不要弄成enum

Q4:enum展示很方便,只需要扩展几个方法就好了,如果不是enum,不是也要转换吗,没有enum方便。

enum只是程序中用,数据库中的值还是 原来的类型吧,只是EF做了转换吧,enum怎么会破坏表关联呢?? (EF4.1后的高版本没用过)

收获园豆:4
Qlin | 老鸟四级 |园豆:2403 | 2013-07-24 08:35

多谢回答!不过我想问一下如果是这种seed data该如何处理!我感觉很麻烦!

例如:

public enum A

{

      [Description("多谢 回答")]

     TempA = 1,

}

像类似于这种转换获取是否简单!我可以将他们绑定到dropdownlist上,那么value 和text分别都绑定都对应什么呢?

例如value = 1还是value=TempA?

佩恩六道 | 园豆:199 (初学一级) | 2013-07-24 08:41

@佩恩六道: 

先把 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
Qlin | 园豆:2403 (老鸟四级) | 2013-07-24 08:47
其他回答(1)
0

一般这种供选择的值是用 数据库字典进行维护比较好,即 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)
)
收获园豆:1
geass.. | 园豆:1821 (小虾三级) | 2013-07-24 21:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册