使用实体框架将int列映射到枚举属性

5

我有一个枚举类型叫做 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个回答

5
在.NET 4.0中,唯一的方法是使用持久化到数据库的int属性和非映射的枚举属性,在实体加载和实体持久化时内部转换int。或者你可以尝试包装器方法。在.NET 4.5中,支持直接使用枚举 但我认为不支持Flags(编辑:请查看Kamyar的评论)。

2
根据Nathan在http://thedatafarm.com/blog/data-access/video-entity-framework-5-enums-and-moving-solution-from-ef-4-3/的评论和http://blogs.msdn.com/b/efdesign/archive/2011/06/29/enumeration-support-in-entity-framework.aspx上的文章,EF 5似乎处理标志存储,但HasFlag扩展方法尚未得到支持。 - Kamyar
3
HasFlag 现在在 EF 6.1 中得到支持。 - maxp
@maxp 是的!感谢RogerAlsing :) - Kamyar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接