2013-03-20 30 views
2

在创建实体并在.NET中设置其实现(有效枚举)属性时,我需要一些关于最佳实践的建议。作为枚举或对象的.NET实体属性

举一个简单的例子,假设我有一个名为 '待办事项' 的对象,它有三个属性:
ID(INT)
文本(字符串)
国家(NotStarted,inProgress,则完成)

我的待办事项对象将存储在一个SQL Server数据库中,'Type'属性存储为int。国有财产不会有任何其他信息或与之相关的方法,只是标记了Todo实例的完整性。

应该如下我被创造Todo.cs枚举(的Todo类外):

public enum TodoState 
{ 
    NotStarted = 0, 
    InProgress = 1, 
    Complete = 2 
} 

在这之后,我可以创造我的Todo类为:

public class Todo 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
    public TodoState State { get; set; } 
} 

还是应该我正在创建一个具有内部枚举和静态构造函数的TodoState类?还是有更好的完全不同的方式来做到这一点?

除了您认为在这种情况下实现此目标的最佳方法之外,解决此类问题的行业标准方法是什么?提前致谢。

回答

2

从版本5(带有.NET 4.5)开始,实体框架支持enum属性。请阅读Enum Support - Code FirstEnumeration Support in Entity Framework了解更多信息。

这是迄今为止最容易解决您的问题。

你的代码看起来不错。我认为你是在正确的轨道上,但这里的一些小建议:

  • 标准的做法是每.cs文件,包括枚举定义一种类型,所以我建议移动enum TodoStateTodoState.cs
  • TodoState作为一个名字的作品,但我认为​​是更多的描述它应该代表什么。
+2

应该注意的是,EF5仅支持.NET Framework 4.5或更高版本(Visual Studio 2012)中的枚举。 VS2010上的EF5不支持它们(技术上它是EF4.4,但它在安装5时已安装) – 2013-03-20 19:19:02

+1

@MystereMan感谢您指出这一点。 – 2013-03-20 19:24:50

+2

@MystereMan然而,EF6将支持.NET上的枚举4 http://blogs.msdn.com/b/adonet/archive/2012/10/30/ef6-alpha-1-available-on-nuget.aspx – Phil 2013-03-20 19:26:46