EF中的列名无效

时间:2013-03-15 12:49:17

标签: entity-framework code-first

我有一种情况,即EF试图从“VideoClip”表中获取一个我没有要求它获取的字段值。

Database schema showing the tables NewsItemVideoClip, NewsItem, VideoClip and 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'

1 个答案:

答案 0 :(得分:3)

根据你的图表,VideoClip有一个VideoId,我想这是你想要的Video外键。 Video_Id将是映射的abscence中的外键的默认外键名称,否则将命名它。因此,您的 VideoClip 映射可能需要.HasForeignKey(x => x.VideoId);