【问题标题】:EF6 extending an TPH hierarchy (mixing TPH and TPT)EF6 扩展 TPH 层次结构(混合 TPH 和 TPT)
【发布时间】:2014-06-23 22:36:07
【问题描述】:

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

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

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

提前致谢,

安德烈斯。

【问题讨论】:

    标签: entity-framework entity-framework-6.1


    【解决方案1】:
       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])
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多