3

我有一个表用于在 TPH 配置中存储几个继承的实体。这很好用,没有任何问题。我面临的问题是我需要使用附加字段扩展其中一些实体,并希望使用 TPT 将这些新字段存储在自己的表中。

举个例子:TPH 使用鉴别器字段存储一个根 PERIOD 类和几个继承的类,如 QUARTER、MONTH、WEEK 等。所以现在我需要用一些额外的字段创建一个特殊的 QUARTER,并希望将这些额外的字段存储在它自己的表中。

这在EF中可能吗?我正在使用 EF 6.1,但尚未找到有关如何完成此特定场景的工作示例或说明。

提前致谢,

安德烈斯。

4

1 回答 1

2
   public abstract class Period
    {
        public int  Id { get; set; }

        public string DisplayName { get; set; }

    }

    public class Month : Period {
        public byte MonthValue { get; set; }

    }

    public class Quarter : Period {
        public byte QuarterValue { get; set; }

    }

    public class SpecialQuarter : Quarter {
        public int SpecialQuarterValue { get; set; }
    }

    public class TestContext : DbContext {
        public DbSet<Period> Periods { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<Period>().ToTable("Period");

            // TPH
            modelBuilder.Entity<Month>().Map(p => p.Requires("PeriodType").HasValue("M"));
            modelBuilder.Entity<Quarter>().Map(p => p.Requires("PeriodType").HasValue("Q"));

            //TPT
            modelBuilder.Entity<SpecialQuarter>().Map(p => p.ToTable("SpecialQuarter"));
        }
    }

此上下文映射到这些表。

CREATE TABLE [dbo].[Period] (
    [Id] [int] NOT NULL IDENTITY,
    [DisplayName] [nvarchar](max),
    [MonthValue] [tinyint],
    [QuarterValue] [tinyint],
    [PeriodType] [nvarchar](128) NOT NULL,
    CONSTRAINT [PK_dbo.Period] PRIMARY KEY ([Id])
)
CREATE TABLE [dbo].[SpecialQuarter] (
    [Id] [int] NOT NULL,
    [SpecialQuarterValue] [int] NOT NULL,
    CONSTRAINT [PK_dbo.SpecialQuarter] PRIMARY KEY ([Id])
)
于 2014-06-23T23:06:36.207 回答