我有一个大型应用程序,它在系统中有许多下拉字段,只有一小组值。为每个值提供一个表并且为每个下拉类型处理crud的单独页面并不值得。我做的是制作一个DropDowns表,它有一个鉴别器列来辨别它的下拉类型。
我通过创建一个派生自下拉类的类来定义代码中的每个类型。
我的CRUD管理器能够使用反射来允许用户为任何下拉列表添加值。
到目前为止一切顺利。
现在我希望能够扩展特定的下拉菜单,以便它可以拥有其他下拉菜单所没有的属性。
例如,付款条件清单。我想为存款百分比添加一个字段,以便我可以用它来计算存款。
我的目标是将所有值存储在一个表中,类似于下拉值的方式。
在SQL中,我只有一个名为DropDownExtendedProperties的表,其中包含字段:DropDownID,PropertyName,PropertyValue,DropDownID将扩展属性链接到它伴随的下拉值。
在C#/ EF中,我能够使用1到0或1来获得正确的数据库结构,但是一旦我创建了DropDownExtendedProperty的子类型,下拉类型就会为该子类与该子表建立直接关系。
我试过愚弄一对多,但除了从DropDown表中拉出需要扩展属性的类型并制作自己的表格和放大器之外,我还没有找到解决方法。 CRUD。我知道在这一点上实际上这是一个更简单的解决方案,但我认为我应该做的事情应该是可能的,而我却无法弄明白。
我在下面提供了一些代码,但我尝试了几种不同的关系,并且我发布了最近的尝试。
public class DropDownExtendedProperty
{
[Key]
public int PropertyID { get; set; }
[ForeignKey("DropDown")]
public int DropDownID { get; set; }
public virtual DropDown DropDown { get; set; }
public int? IntValue { get; set; }
public string StringValue { get; set; }
public FieldType FieldType { get; set; }
public DateTime? DateValue { get; set; }
public float? MoneyValue { get; set; }
}
public class DropDown
{
[Key]
public int ID { get; set; }
[Required]
public string Value { get; set; }
public virtual List<DropDownExtendedProperty> ExtendedProperties { get; set; }
}
public class PaymentTerms : DropDown
{
public virtual DaysToPay DaysToPay { get; set; }
}
public class DaysToPay : DropDownExtendedProperty
{
}
public enum FieldType
{
Date,
String,
Int,
Money
}
modelBuilder.Entity<DropDownExtendedProperty>()
.HasRequired(a => a.DropDown)
.WithMany();
我的目标是能够为具有特定类型的每个DropDown定义SINGLE值,通过更抽象的DropDownExtendedProperty。因此,在我们的案例中,&#34; Net30&#34;的PaymentTerms下拉值可以在DaysToPay字段中包含一个附带的int值,我可以在代码中使用它来进行计算。