在EF代码的第一个类

时间:2015-11-13 12:36:45

标签: c# generics ef-code-first

由于各种原因,我必须将我的Symbol类分成两个不同的类EquitySymbol和CommoditySymbol

在我的DailyClose类中,我最初使用SymbolId作为我的外键进行导航。我现在无法将符号分解为两个不同的表格。

这是我原来的DailyClose类:

public class DailyClose
{
    public int DailyCloseId { get; set; }
    [ForeignKey("Symbol")]
    public int SymbolId { get; set; }
    public Symbol Symbol {get; set;}
    public DateTime Date { get; set; }
    public decimal TodaysClose { get; set; }
}

我想要做的事情显然是我无法做到的:

public class DailyClose
{
    public int DailyCloseId { get; set; }
    public int SymbolId { get; set; }
    [DefaultValue(true)]
    public bool IsEquity { get; set; }
    public DateTime Date { get; set; }
    public decimal TodaysClose { get; set; }

    public CommoditySymbol CommodSymbol { get; set; }
    public EquitySymbol EquitySymbol { get; set; }

    //constructor
    public DailyClose(int symbolId)
    {
        SymbolId = symbolId;
        if (IsEquity)
        {
            EquitySymbol = new EquitySymbol(SymbolId);
            CommodSymbol = null;
        }
        else
        {
            CommodSymbol = new CommoditySymbol(SymbolId);
            EquitySymbol = null;
        }
    }        
}

良好的启用 - 迁移WAS告诉我这些类型不能为空,但在关闭解决方案并重新打开后,它现在允许我的原始方法

但由于这些类型(EquitySymbol& CommoditySymbol)不能为空,这不会起作用。但是如果我可以有一个通用属性,即T是基于IsEquity布尔值的EquitySymbol或CommoditySymbol,那将是理想的。

 Property<T>

然后有

public class DailyClose
{
    public int DailyCloseId { get; set; }
    public int SymbolId { get; set; }
    [DefaultValue(true)]
    public bool IsEquity { get; set; }
    public DateTime Date { get; set; }
    public decimal TodaysClose { get; set; }

    public Property<T> WhichSymbolType { get; set; }       

    //constructor
    public DailyClose(int symbolId)
    {
        SymbolId = symbolId;
        if (IsEquity)
        {
            WhichSymbolType = new EquitySymbol(SymbolId);                
        }
        else
        {
            WhichSymbolType = new CommoditySymbol(SymbolId);                
        }
    }
}

这可行吗?如果是,我没有看到如何实现这一目标。

0 个答案:

没有答案