2

EF がテーブル "VideoClip" から取得を要求していないフィールド値を取得しようとしている状況があります。

テーブル NewsItemVideoClip、NewsItem、VideoClip、および Video を示すデータベース スキーマ

生成された完全なクエリは次のようになります。

SELECT 
[Project1].[Id] AS [Id], 
[Project1].[NewsItemId] AS [NewsItemId], 
[Project1].[VideoClipId] AS [VideoClipId], 
[Project1].[DisplayOrder] AS [DisplayOrder], 
[Project1].[Video_Id] AS [Video_Id]
FROM ( SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[NewsItemId] AS [NewsItemId], 
    [Extent1].[VideoClipId] AS [VideoClipId], 
    [Extent1].[DisplayOrder] AS [DisplayOrder], 
    [Extent1].[Video_Id] AS [Video_Id]
    FROM [dbo].[NewsItemVideoClip] AS [Extent1]
    WHERE [Extent1].[NewsItemId] = @p__linq__0
)  AS [Project1]
ORDER BY [Project1].[DisplayOrder] DESC

ただし、私のNewsItemVideoClipエンティティ クラスは次のようになります。

public class NewsItemVideoClip : Entity
{
    public virtual int NewsItemId { get; set; }
    public virtual int VideoClipId { get; set; }
    public virtual int DisplayOrder { get; set; }
    public virtual NewsItem NewsItem { get; set; }
    public virtual VideoClip VideoClip { get; set; }
}

マッピング:

public class NewsItemVideoClipEntityMapping
    : EntityTypeConfiguration<NewsItemVideoClip>
{
    public NewsItemVideoClipEntityMapping()
    {
        //configure key and properties
        HasKey(c => c.Id);

        this.HasRequired(x => x.NewsItem)
            .WithMany(x => x.NewsItemVideoClips)
            .HasForeignKey(x => x.NewsItemId);

        this.HasRequired(x => x.VideoClip)
            .WithMany(x => x.NewsItemVideos)
            .HasForeignKey(x => x.VideoClipId);

        //configure table map
        ToTable("NewsItemVideoClip");
    }
}

LINQ クエリ:

public IList<NewsItemVideoClip> GetVideoClips(int newsItemId)
{
    var query = from nvc in _newsItemVideoClipRepository.GetAll()
                where nvc.NewsItemId == newsItemId
                orderby nvc.DisplayOrder descending
                select nvc;

    var newsItemVideoClips = query.ToList();
    return newsItemVideoClips;
}

どのように EF が私に与えます: Invalid column name 'Video_Id'?

4

1 に答える 1

3

あなたの図に基づいて、VideoClipにはVideoIdがあります。これは、Videoに対する意図された外部キーであると思います。Video_Idは、マッピングがない場合の外部キーのデフォルトの外部キー名であり、そうでない場合は名前が付けられます。したがって、おそらくビデオクリップマッピングが必要.HasForeignKey(x => x.VideoId);です。

于 2013-03-18T05:10:30.953 に答える