实体框架6.0字段列表中的未知列包含()的异常

时间:2014-04-02 11:39:32

标签: c# mysql linq entity-framework

我们有一个使用MySQL的数据库第一个实体框架模型,我们遇到的问题包括一个查询中的所有子对象。我们的数据库结构简化如下:

MDType
======
ID
...

MDTypeParameter
===============
ID                -- PK
MetaDataTypeID    -- references MDType.ID
...

Object
==========
ID                -- PK
...

ObjectItem
==========
ID                -- PK
ObjectID          -- references Object.ID
MDTypeID          -- references MDType.ID

ObjectItemParameter
===================
ID                -- PK
ObjectItemID      -- references ObjectItem.ID
MDTypeParameterID -- references MDTypeParameter.ID

我们基本上有元数据(MDType),其中包含0到多个参数(MDTypeParameter),其中包括格式,名称等内容。

我们的实时数据(Object)有0到多个项目(ObjectItem),它们与MDType相关联。一个项目有0到多个参数(ObjectItemParameter),用于记录用户输入的详细信息等。

数据可能如下所示:

MDType
======
1,'Book'
2,'DVD'

MDTypeParameter
===============
1,1,'Pages'
2,1,'ISBN'
3,2,'Total Runtime'
4,2,'Studio'

Object
======
1,'Lord of the Rings'

ObjectItem
==========
1,1,1
2,1,2

ObjectItemParameter
===================
1,1,1,'100 pages'
1,1,2,'SOME ISBN N0.'
1,2,3,'300 minutes'
1,2,4,'Newline Cinema'

使用Entity Framework执行以下Include()函数集时,生成的SQL不正确,LINQ查询为:

entities.Object.Include("ObjectItem.ObjectItemParameter").
    Include("ObjectItem.MDType.MDTypeParameter");

但它产生的SQL看起来像:

SELECT 
    `Project4`.`ID`,
    -- ALL OTHER FIELDS
FROM
    (SELECT 
        `Apply1`.`ID`,
        -- OTHER FIELDS
        `UnionAll1`.`ID` AS `C2`,
        `UnionAll1`.`ID1` AS `C3`,
        `UnionAll1`.`ID2` AS `C4`,
        -- WHAT THE HELL IS `UnionAll1` ???
FROM
    (SELECT 
        `Limit1`.`ID`,
        -- OTHER FIELDS
    FROM
        (SELECT 
            `Project1`.`ID`,
            -- OTHER FIELDS
        FROM
            (SELECT 
                `Extent1`.`ID`,
                -- OTHER FIELDS
            FROM
                `Object` AS `Extent1`
            ) AS `Project1`
        LIMIT 5) AS `Limit1`
    ) AS `Apply1`
) AS `Project4`

当我读到这篇文章时,似乎实体框架变得非常困惑。有一个名为UnionAll1的别名表,它永远不会被定义,它永远不会在必需的表上生成任何连接。

有没有人看到类似的东西或知道如何诊断问题?

用于获取上述查询的LINQ查询是:

entities.Object.Include("ObjectItem.ObjectItemParameter").
    Include("ObjectItem.MDType.MDTypeParameter").Take(5)

0 个答案:

没有答案