1

XML Entity Framework モデルを 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");

しかし、ご想像のとおり、うまくいきませんでした。

なにか提案を?

前もって感謝します

4

1 に答える 1

2

残念ながら、これは CTP5 では不可能です。これはEFチームによって確認されています。

于 2011-02-16T17:58:02.720 に答える