Table-per-type和fluent-api

时间:2015-01-21 07:13:58

标签: c# entity-framework fluent table-per-type

我有以下数据库:

Database model

艺术家可以有很多头衔。标题可以是歌曲或专辑。 在我的代码中,我有以下配置:

 public class AlbumConfiguration : EntityTypeConfiguration<AlbumDetail>
{
    public AlbumConfiguration()
    {
        this.HasKey(a => a.Id);
        this.Property(a => a.Title);

        this.HasRequired(a => a.TitleDetail).WithOptional(t => t.Album);    
        this.ToTable("Albums");
    }
}

public class ArtistConfiguration : EntityTypeConfiguration<ArtistDetail>
{
    public ArtistConfiguration()
    {
        this.HasKey(a => a.Id);
        this.Property(a => a.Name);

        this.ToTable("Artists");

    }
    public class TitleConfiguration : EntityTypeConfiguration<TitleDetail>
{
    public TitleConfiguration()
    {
        this.HasKey(a => a.Id);
        this.Property(a => a.Title);

        this.HasRequired(a => a.Artist).WithMany(j => j.Titles).HasForeignKey(a => a.ArtistId);

        this.ToTable("Titles");
    }
}

当我想要查询显示一位艺术家的专辑时,我就这样做了:

 IQueryable<AlbumDetail> artistDetail =
            base.Query.Where(x => x.Id == artistId).Include("Titles").OfType<AlbumDetail>();
        return artistDetail.ToList();

这是生成的查询:

SELECT 
[Extent1].[Id] AS [Id], 
'0X0X' AS [C1], 
[Extent2].[Title] AS [Title], 
[Extent2].[ArtistId] AS [ArtistId], 
[Extent3].[Id] AS [Id1], 
[Extent1].[TitleDetail_Id] AS [TitleDetail_Id], 
[Extent4].[Id] AS [Id2]
FROM    [dbo].[Albums] AS [Extent1]
INNER JOIN [dbo].[Titles] AS [Extent2] ON [Extent1].[Id] = [Extent2].[Id]
LEFT OUTER JOIN [dbo].[Songs] AS [Extent3] ON [Extent1].[Id] = [Extent3].[TitleDetail_Id]
LEFT OUTER JOIN [dbo].[Albums] AS [Extent4] ON [Extent1].[Id] = [Extent4].[TitleDetail_Id]

当我现在想要查询显示艺术家拥有的专辑时,我收到以下错误:

列名'TitleDetail_Id'无效。 列名称“AlbumDetail_Id”无效。 列名称'TitleDetail_Id'无效。 列名称'TitleDetail_Id'无效。 列名称'TitleDetail_Id'无效。 列名称'TitleDetail_Id'无效。 列名称“Song_Id”无效。 列名称“AlbumDetail_Id1”无效。 列名称'TitleDetail_Id'无效。 列名称“Song_Id”无效。 列名称“AlbumDetail_Id1”无效。

任何人都可以帮助我吗?

0 个答案:

没有答案