使用entity-framework将int列映射到枚举属性

时间:2012-08-28 06:55:14

标签: c# entity-framework orm entity-framework-4.1

我有一个名为Operation的枚举类型:

[Flags]
public enum Operation
{
    None = 0,
    View = (1 << 0),
    Add = (1 << 1),
    Edit = (1 << 2),
    Delete = (1 << 3),
    ReservedA = (1 << 4),
    ReservedB = (1 << 5),
    Admin = (View | Add | Edit | Delete)
}

和表格permission包含operations列。此表映射到这样的类:

[Table("rolepermission")]
public class Permission : IComparable
{
    private int _id = 0;

    private Operation _operations = Operation.None;

    private List<UserRole> _roles = null;

    public Permission()
    {
        _roles = new List<UserRole>();
    }

    [Key]
    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }

    [EnumDataType(typeof(Operation))]
    public Operation Operations
    {
        get { return _operations; }
        set { _operations = value; }
    }
}

但它不起作用。

有没有可以映射它的优雅方式?

我认为创建int - 类型属性不是最好的方法。

1 个答案:

答案 0 :(得分:5)

.NET 4.0中唯一的方法是使用int属性持久化到数据库和非映射枚举属性,这将在内部转换int(或在实体加载和实体持久性期间)。或者,您可以尝试wrapper approach

.NET 4.5直接支持枚举,但我认为不支持Flags (编辑:检查Kamyar的评论)。