实体框架继承

时间:2010-10-09 18:31:07

标签: entity-framework inheritance

我会尽可能简单地解释我目前面临的问题。 我目前正在进行的项目需要分析一些财务数据。为方便起见,这些数据应存储在数据库中,因此我的任务是创建数据库模型。虽然到目前为止还不需要数据库,但应用程序本身已经开发了很多年,并且已经定义了所有数据类型和类,因此我的任务是将数据库模型与应用程序使用的类相匹配。以下是应用程序用于处理数据的类组合的简化细分。
首先,有一个抽象的Entry类,所有其他财务数据条目都继承自:

abstract class Entry
{
    public Guid ID { get; set; }
    public string Name { get; set; }
}

不同的财务数据有不同的格式,与不同的时间点相关。为了反映这一点,有许多接口由具体数据类型实现。例如,假设所有数据都可以相对于特定时间点或某个时间段。以货币汇率为例。它每天只改变一次。另一方面,国内生产总值通常提供一定时期(季度或年度)。这反映在下面提供的课程中。

class SingleDateEntry : Entry
{
    public DateTime Date { get; set; }
}

class PeriodEntry : Entry
{
    public DateTime PeriodStart { get; set; }
    public DateTime PeriodEnd { get; set; }
}

此外,数据可以用不同的格式表示。有些数据只有一个值,例如货币汇率,其他数据可以包含在数据集中,例如每日股票价格,它具有每日开盘价和收盘价,以及最高和最低每日价格。

interface ISingleValueEntry
{
    public double Value { get; set; }
}

interface IMinMaxEntry
{
    public double MinPrice { get; set; }
    public double MaxPrice { get; set; }
}

interface IOpenCloseEntry
{
    public double OpenPrice{get;set;}
    public double ClosePrice{get;set;}
}

例如,每日货币汇率,因为它与过去的一天相关联且只有一个值,可以用如下所示的类表示:

class DailyCurrencyRate : SingleDateEntry, ISingleValueEntry
{
}

股票价格有许多与之相关的不同价值,因此可以这样表示:

class DailyStockPrice : SingleDateEntry, IOpenCloseEntry, IMinMaxEntry
{
}

最后,由于GDP与一段时间相关并具有单一价值,因此看起来像这样:

class GDP : PeriodEntry, ISingleValueEntry
{
}

不幸的是,我以前没有和EF合作,当我尝试实现这个实际问题的简化场景时,我遇到了很多问题,所以我很感激任何可以帮助我解决它们的建议。
首先,如何处理多个接口实现?据我所知,EF不支持多继承,并且通过使用关联,我不会获得实现它们的类,而是生成包含对实现这些接口的对象的引用的类,这很糟糕,因为它不会t匹配应用程序期望的接口。此外,在这种情况下应该使用什么类型的继承?根据我的研究后的理解,TPC将是一个更好的策略,但我可能错了。
提前感谢任何指针,建议和“陷阱”。

1 个答案:

答案 0 :(得分:1)

.NET框架不提供多重继承,您不使用多重继承。每个类都只从单个父类继承。我刚用Code first方法测试了简单的场景(不是EF4.0的一部分)。我在A中继承了三个类,B从B继承的A和C继承。我将C存储为TPHTPH代码优先),没有任何问题。它也适用于常见的EF方法。

相关问题