gpt4 book ai didi

entity-framework - EF6 扩展 TPH 层次结构(混合 TPH 和 TPT)

转载 作者:行者123 更新时间:2023-12-04 16:49:41 28 4
gpt4 key购买 nike

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

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

这在 EF 中可能吗?我使用的是 EF 6.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])
)

关于entity-framework - EF6 扩展 TPH 层次结构(混合 TPH 和 TPT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24375682/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com