将枚举存储到实体中的数据库

时间:2013-04-08 19:47:16

标签: asp.net asp.net-mvc entity-framework c#-4.0

我正在尝试将下拉列表选定值传递给数据库 我的datacontracts有以下代码

      public EnumTypes.RegardingObjectType RegardingObjectType { get; set; }
    public Guid RegardingObjectId { get; set; }

enumtypes.cs具有以下内容

    public class EnumTypes
{

    public enum RegardingObjectType
    {
        UnknownOrNone = 0,
        Account = 1,
        Cellsite = 2,

eventdal.cs具有以下内容

       private t_Event MapEventToEntity(Event newevent, t_Event eventToBeChanged)
    {
   eventToBeChanged.RegardingObjectType = int.Parse(newevent.RegardingObjectType.ToString());

它构建正常但在运行时遇到异常

3 个答案:

答案 0 :(得分:1)

实体框架4不支持将枚举用作列类型。如果您希望对枚举进行本机支持,则需要升级到Entity Framework 5。

如果您绝对必须使用EF 4(因为已经在其中实施的项目),那么我建议你这样做:

public int RegardingObjectTypeAsInt { get; set; }

[NotMapped]
public EnumTypes.RegardingObjectType RegardingObjectType
{
  get { return (EnumTypes.RegardingObjectType) this.RegardingObjectTypeAsInt; }
  set { this.RegardingObjectTypeAsInt = (int)value; }
}

这不是一个漂亮的解决方案,但它是解决问题的一个可靠方法,你仍然可以在你的页面上绑定它并在其他代码中将其视为枚举。

答案 1 :(得分:0)

这很有用

eventToBeChanged.RegardingObjectType = (int)newevent.RegardingObjectType;

而不是

  eventToBeChanged.RegardingObjectType = int.Parse(newevent.RegardingObjectType.ToString());

答案 2 :(得分:0)

如果要将字符串值映射到数据库,请查看以下答案:

How to map an enum property in Entity Framework 4

正如@ IronMan84指出的那样,我不确定这是否适用于多字枚举 - 但它很有用并且它可以正常工作。