Я пытаюсь преобразовать модель Entity Framework 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");
, но, как вы можете догадаться, это не сработало.
Есть предложения?
Заранее спасибо