如何在Entity Framework 4.1模型中表示动态类似enum的字段/属性?

时间:2011-10-27 23:00:50

标签: c# entity-framework-4.1

我正在尝试创建一个系统的POC,它允许您创建和修改最终在使用前端的应用程序中使用的枚举。像动态枚举一样。

例如,在假设的错误跟踪器应用程序中,我们可以拥有status枚举,其值可以是openacceptedclosed。所有这些枚举(及其相应的值)都可以通过UI实时更改,因此管理员可以提供新的reassigned值(例如,通过管理员页面)在应用程序的生命周期中的某个地方。也可以创建新的枚举,这些枚举又有自己的值(例如,complexity枚举。)

我目前正在设想的方式是,我将拥有一个Enumeration类,其中1:*类具有EnumerationValue个参考。

public class Enumeration {
    public string Name { get; set; }
    public ICollection<EnumerationValue> Values { get; set; }
}

public class EnumerationValue {
    public string Name { get; set; }
    public string Description { get; set; }
}

这很容易。当我开始创建实际使用这些动态枚举的实体时,我遇到了麻烦。

假设我正在创建BugRecord实体,因此具有Status属性。按照上面的逻辑,我必须按照以下方式编写:

public class BugRecord {
    public EnumerationValue Status { get; set; }
}

但考虑到我可以有很多不同的Enumeration s(以及EnumerationValue s),我是否有办法将BugRecord.Status值限制为仅EnumerationValue s在状态Enumeration?如果不是,你会怎么建议我解决这类问题?

1 个答案:

答案 0 :(得分:2)

创建第三个Entity / JoinTable EnumerationChoice并使用它将BugRecord映射到EnumerationValue

public class EnumerationChoice {
    public Enumeration EnumerationCategory { get; set; }
    public EnumerationValue Value { get; set; }
}

BugRecord现在变为:

public class BugRecord {
    public EnumerationChoice BugType { get; set; }
    public EnumerationChoice Status { get; set; }
}

现在的数据如下:

BugRecord:
    EnumerationChoice:
        -BugType
        -BugTypeValue1
    EnumerationChoice:
        -Status
        -Open

这样,当您尝试填充EnumerationChoice时,可以引用EnumerationCategory来获取分配给它的有效EnumerationValues。