gpt4 book ai didi

c# - EF4.1 多嵌套实体包含获取 NotSupportedException?

转载 作者:太空狗 更新时间:2023-10-29 21:41:22 26 4
gpt4 key购买 nike

编辑:根据测试更新了问题描述 - 2011 年 9 月 12 日。

每当我调用 .ToList() 时,我的查询都会抛出 NotSupportedException(“不支持指定的方法。”)。

IQueryable<FileDefinition> query = db
.FileDefinitions
.Include(x => x.DefinitionChangeLogs)
.Include(x => x.FieldDefinitions.Select(y => y.DefinitionChangeLogs)) // bad
.Include(x => x.FieldDefinitions.Select(y => y.FieldValidationTables)) // bad
.Where(x => x.IsActive);
List<FileDefinition> retval = query.ToList();

如果我注释掉我评论为“坏”的任何一行,那么查询就可以工作。我也试过在我的对象模型中包含不同的嵌套实体,效果相同。包括任何 2 个都会导致崩溃。嵌套是指导航属性的导航属性。我还尝试使用带有字符串路径的 .Include 方法:相同的结果。

我的表结构是这样的:

Db model

Db model 2

这是使用 MySQL 5.1(显然是 InnoDB 表)作为 MySQL Connector/NET 6.3.4 的数据库存储。

所以我的问题是:为什么这行不通?

注意:如果我像 this link 中那样显式加载相关实体,我可以让它工作.但我想知道为什么 EF 讨厌我的数据模型。

回答:MySQL 连接器显然无法处理第二个嵌套实体包含。它抛出 NotSupportedException,而不是 .NET EF。当我尝试使用 EF4.0 时也出现了同样的错误,但我当时的研究让我相信这是 self 跟踪实体导致的问题。我尝试升级到最新的连接器,但它开始导致 Out of Sync error .这是 yet another reason让我讨厌 MySQL。

最佳答案

聚会可能有点晚了,但我发现以下解决方法在当前项目中非常有用:

IQueryable<FileDefinition> query = db.FileDefinitions
.Include(x => x.FieldDefinitions.Select(y => y.DefinitionChangeLogs.Select(z => z.FieldDefinition.FieldValidationTables)))

在不使用第二行包含的情况下,使用 Select 返回原始导航属性并使用另一个 Select 前进到您需要包含的属性。

关于c# - EF4.1 多嵌套实体包含获取 NotSupportedException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7368951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com