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-type プロパティを作成するのは最善の方法ではないと思います。

4

1 に答える 1

5

.NET 4.0 での唯一の方法は、データベースに永続化された int プロパティと、int を内部的に変換するマップされていない列挙型プロパティを使用することです (または、エンティティの読み込み中およびエンティティの永続化中に)。または、ラッパー アプローチを試すこともできます。

.NET 4.5 は列挙型を直接サポートしていますが、フラグはサポートされていないと思います(編集: Kamyar のコメントを確認してください)。

于 2012-08-28T08:21:50.583 に答える