我正在努力使一个简单的MVC网站正常工作。在其中,我正在使用数据库和 Entity Framework 与之通信(就像我在其他项目上所做的几个月一样)。

一切都进行得很好,直到我尝试从数据库中的特定表中检索之前。如果我对此进行查询,那么EF生成的选择将神秘地包含一个在该表(或该数据库中的任何表)中不存在的列。当然,这会引发异常,提示该列不存在:



我已经创建了一个UnitOfWork对象,该对象使用存储库模式来检索数据,并使其尽可能简单,我公开了DataContext以便可以手动查询以进行测试:

var test = loUnitOfWork.Context.Set<DAL.File>();
DAL.File是由POCO生成器生成的类:
public partial class File : BaseEntity
{
    public int Id { get; set; }
    public string FilePath { get; set; }
    public string FileName { get; set; }

    public virtual ICollection<FilePerformer> FilePerformerCollection { get; set; }
    public virtual ICollection<FileProperty> FilePropertyCollection { get; set; }

    public File()
    {
        FilePerformerCollection = new List<FilePerformer>();
        FilePropertyCollection = new List<FileProperty>();
        InitializePartial();
    }
    partial void InitializePartial();
}

我确实有一个PerformerFolder,它具有一个Id列作为主键,但这丝毫没有连接到文件表。

如果启用DataContext上的调试日志记录,我会看到它运行以下查询:
SELECT
    [Extent1].[Id] AS [Id],
    [Extent1].[FilePath] AS [FilePath],
    [Extent1].[FileName] AS [FileName],
    [Extent1].[PerformerFolder_Id] AS [PerformerFolder_Id]
    FROM [dbo].[File] AS [Extent1]

我试过在所有文件中搜索“PerformerFolder”,除了逻辑位置(在PerformerFolder类中)之外,它没有打开任何东西。它似乎是基于某种东西生成的,但是我只是不知道是什么或在哪里。

有没有人有什么建议?

最佳答案

尝试在所有代码文件中搜索不带“id”的PerformerFolderEF自己将其添加到导航属性中。

正如@Giorgi所提到的,它一定是某个地方的局部类,或者可能是先前构建的遗留类?

关于c# - 使用Entity Framework生成的错误选择查询(神秘的额外列),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35902433/

10-13 07:38
查看更多