首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF6扩展TPH层次结构(混合TPH和TPT)

EF6扩展TPH层次结构(混合TPH和TPT)
EN

Stack Overflow用户
提问于 2014-06-24 06:36:07
回答 1查看 338关注 0票数 3

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

为了给您提供一些上下文,我将给您一个示例: TPH使用鉴别器字段存储一个根PERIOD类和几个继承的类,如季度、月、周等。因此,现在我需要创建一个带有一些附加字段的特殊季度,并希望将这些附加字段存储在它自己的表中。

在EF中这是可能的吗?我正在使用EF 6.1,还没有找到关于如何完成这个特定场景的工作示例或解释。

提前谢谢你,

安德烈。

EN

回答 1

Stack Overflow用户

发布于 2014-06-24 07:06:36

代码语言:javascript
复制
   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"));
        }
    }

此上下文映射到这些表。

代码语言:javascript
复制
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])
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24375682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档