Raf*_*mão 53 .net enums entity-framework
在Entity Framework中使用Enums的最佳方法是什么?
备注:我正在使用EF 3和Firebird.
Geo*_*off 19
更新:
实体框架现在支持Enums nativity.
原文:
这是关于EF的那些恼人的事情之一.不会支持它!
或者您可以执行以下操作:
public MyEnum MyEnumProperty
{
get { return (MyEnum) InnerEnumProperty; }
set { InnerEnumProperty = (int) value; }
}
Run Code Online (Sandbox Code Playgroud)
但它让我觉得很脏.
Len*_*rri 11
这个问题有点陈旧,但是让我指出一个更近期的材料,因为今天我们有了更新版本的Entity Framework:
视频:实体框架5枚举和移动解决方案来自EF 4.3 by Julie Lerman
我今天用这个视频来了解enums实体框架.这是一个很好的一步一步的演示.希望它也能帮到你.
还有关于实体框架设计博客的这篇介绍性帖子:
我在表单的DB中大量使用表(使用默认值)
CREATE TABLE [dbo].[CommunicationPreferences]
(
[ID] smallint NOT NULL,
[SystemName] nvarchar(50) NOT NULL,
[Description] nvarchar(200) NOT NULL,
)
Run Code Online (Sandbox Code Playgroud)
我从数据库驱动我的EF4实体.
NB我没有使用视图,SPROCS或SQL函数,没有复杂的EF类型,只是直接表到实体映射.然后扩展我的实体部分类以添加其他功能以保持干燥.
对于枚举我有一个简单的T4模板,我交给一个表的列表(上面的表格),每当我从数据库更新EF模型时(或者如果我需要按需),.tt文件就会被触发,它抓取数据,并构建枚举,例如
/// <summary>
/// Enums For The dbo Schema
/// </summary>
public enum CommunicationPreferencesList : short
{
/// <summary>
/// HTML Emails
/// </summary>
[EnumTextValue(@"HTML Emails")]
HTMLEmail = 1,
/// <summary>
/// Plain Text Emails
/// </summary>
[EnumTextValue(@"Plain Text Emails")]
PlainEmail = 2,
/// <summary>
/// Mobile Telephone
/// </summary>
[EnumTextValue(@"Mobile Telephone")]
Mobile = 3,
/// <summary>
/// Landline Telephone
/// </summary>
[EnumTextValue(@"Landline Telephone")]
Landline = 4,
/// <summary>
/// SMS
/// </summary>
[EnumTextValue(@"SMS")]
SMS = 5,
}
Run Code Online (Sandbox Code Playgroud)
然后,当我在某个实体上处理FK ID列/属性时,例如
Users.CommunicationPreferenceID
Run Code Online (Sandbox Code Playgroud)
我只是为了比较而投射ID或枚举.例如
CommunicationPreferencesList usersPreference = (CommunicationPreferencesList)currentUser.CommunicationPreferenceID;
if(usersPreference == CommunicationPreferencesList.SMS)
{
//send SMS
}
else if(usersPreference == CommunicationPreferencesList.Mobile)
{
//ring the phone
}
Run Code Online (Sandbox Code Playgroud)
然后我有一些简单的帮助器,例如从枚举实例中提供EnumTextValue
string chosenMethod = EntityHelper.GetEnumTextValue(CommunicationPreferencesList.Mobile);
=> "Mobile Telephone"
Run Code Online (Sandbox Code Playgroud)
我发现这个简单,轻松,透明,易于使用,并且为了我的目的,它是一种享受,我很高兴.我没有看到需要从消费代码中完全掩盖数据库/实体中的数值,我很乐意投射其中一个或另一个值,最后得到非常干净的可读代码,加上额外的小额外从DB中的[Description]字段生成的EnumTextValue.
| 归档时间: |
|
| 查看次数: |
39228 次 |
| 最近记录: |