如何在实体框架4.1模型中表示动态类枚举字段/属性
本文关键字:动态 表示 枚举 字段 属性 模型 实体 框架 | 更新日期: 2023-09-27 18:12:32
我正在尝试创建一个系统的POC,该系统允许您创建和修改最终在使用前端的应用程序中使用的枚举。像动态枚举。
例如,在一个假设的bug跟踪应用程序中,我们可以有一个status
枚举,它的值可以是open
, accepted
和closed
。所有这些枚举(及其对应的值)都可以通过UI实时更改,因此管理员有可能在应用程序生命周期的某个时候(很可能通过admin页面)提出一个新的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
值限制为Enumeration
状态下的EnumerationValue
s ?如果没有,你会建议我如何解决这类问题?
创建第三个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。