繁体   English   中英

如何在Entity Framework 4中映射枚举属性

[英]How to map an enum property in Entity Framework 4

我的模型有一个枚举属性:

Sql server column "user_status" is a int NOT NULL.

[Column("User_Status")]
public UserStatus UserStatus { get; set; }

public enum UserStatus
{
    Pending  = 1,
    Member = 2,
    Banned   = 3
}

目前我在保存实体时收到错误,因为它表示user_status列不能为null。

如何在保存/更新时获取实体框架将此属性转换为Int,并在加载实体时将其转换为枚举。

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

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

[Column("User_Status")]
public int UserStatusAsInt { get; set; }

[NotMapped]
public UserStatus UserStatus
{
  get { return (UserStatus) this.UserStatusAsInt; }
  set { this.UserStatusAsInt = (int)value; }
}

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

有时可能需要映射string值而不是enumint值。 你可以这样做:

public enum DwellingType { Apartment, Cottage, House }

public DwellingType DwellingType { get; set; } // This wont be mapped in EF4 as it's an enum

public virtual string DwellingTypeString       // This will be mapped
{
    get { return DwellingType.ToString(); }
    set
    {
        DwellingType stringValue;
        if(Enum.TryParse(value, out stringValue))
        { DwellingType = stringValue; }
    }
}

这实际上不是我的工作,我在试图用EF4映射enums时遇到了。 不幸的是,我不记得我在SO上找到它的地方,但仍然可能对其他人有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM