【问题标题】:Entity Framework 4 - TPT Inheritance in Features CTP5 (code first): rename foreign key column on inherited table实体框架 4 - 功能 CTP5 中的 TPT 继承(代码优先):重命名继承表上的外键列
【发布时间】:2011-06-28 13:04:25
【问题描述】:

我正在尝试将 xml 实体框架模型转换为 Code First (CTP5) 模型。 我必须建模一个非常适合 TPT 模式的层次结构。 我唯一的问题是“继承”表的主键/外键与基类的主键名称不同。

这些是涉及表的相关字段

CREATE TABLE site.Domains
(
    ID INT NOT NULL PRIMARY KEY,
    Domain NVARCHAR(128) NOT NULL
)

CREATE TABLE site.MainSites
(
    FKDomainID INT NOT NULL PRIMARY KEY REFERENCES site.Domains(ID)
)

CREATE TABLE site.SisterSites
(
    FKDomainID INT NOT NULL PRIMARY KEY REFERENCES site.Domains(ID)
)

这是我们在构建模型时使用的代码

var domain = modelBuilder.Entity<Domain>();

domain.HasKey(c => c.Id)
    .ToTable("Domains", "site");

domain.Property(c => c.DomainName)
    .HasColumnName("Domain")
    .HasMaxLength(128)
    .IsRequired();

domain.Ignore(c => c.OldId);

var mainSite = modelBuilder.Entity<MainSite>();

mainSite.Map(m =>
{
    m.ToTable("MainSites", "site");
});

var sisterSite = modelBuilder.Entity<SisterSite>();

sisterSite.Map(m =>
{
    m.ToTable("SisterSites", "site");
});

这是我们得到的生成的sql

SELECT 
[Limit1].[C2] AS [C1], 
[Limit1].[C1] AS [C2], 
[Limit1].[Domain] AS [Domain]
FROM ( SELECT TOP (2) 
    [UnionAll1].[Id] AS [C1], 
    [Extent3].[Domain] AS [Domain], 
    CASE WHEN ([UnionAll1].[C1] = 1) THEN ''0X0X'' ELSE ''0X1X'' END AS [C2]
    FROM   (SELECT 
        [Extent1].[Id] AS [Id], 
        cast(1 as bit) AS [C1]
        FROM [site].[MainSites] AS [Extent1]
    UNION ALL
        SELECT 
        [Extent2].[Id] AS [Id], 
        cast(0 as bit) AS [C1]
        FROM [site].[SisterSites] AS [Extent2]) AS [UnionAll1]
    INNER JOIN [site].[Domains] AS [Extent3] ON [UnionAll1].[Id] = [Extent3].[Id]
    WHERE [UnionAll1].[Id] = @p__linq__0
)  AS [Limit1]',N'@p__linq__0 int',@p__linq__0=1

如您所见,它会查找不存在的 site.MainSites.Id 和 site.SisterSites.Id。 我什至尝试过类似的东西

mainSite.Property(m => m.Id).HasColumnName("FKDomainID");

但是,你可以猜到,它没有用。

有什么建议吗?

提前致谢

【问题讨论】:

    标签: entity-framework-4 poco code-first entity-framework-ctp5 table-per-type


    【解决方案1】:

    很遗憾,这在 CTP5 中是不可能的。这是 EF 团队的confirmed

    【讨论】:

    • 不是我想收到的答案,但仍然是最终答案。 :(
    • 对不起老兄,我知道这不是一个很好的答案,所以我们只希望我们在 RTM 中得到支持 :)
    • 嗯嗯希望如此! :) 你对我发布的另一个问题有任何猜测吗? stackoverflow.com/questions/5019717/…
    • 已经 4 年了 - 这改变了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多