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 列不能为空。

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

4

2 回答 2

13

Entity Framework 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; }
}

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

于 2013-04-04T18:17:34.940 回答
2

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

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; }
    }
}

这实际上不是我的工作,我是在尝试enums使用 EF4 进行映射时遇到的。不幸的是,我不记得我在哪里找到了它,但仍然可能对其他人有用。

于 2013-04-04T23:07:05.550 回答