一个到零或一个关系,使用子类型

时间:2014-07-23 15:13:56

标签: c# asp.net-mvc entity-framework

我有一个大型应用程序,它在系统中有许多下拉字段,只有一小组值。为每个值提供一个表并且为每个下拉类型处理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值,我可以在代码中使用它来进行计算。

0 个答案:

没有答案