【问题标题】:EF4.1 error on one machine and not on anotherEF4.1 错误在一台机器上而不是在另一台机器上
【发布时间】:2023-03-29 15:56:01
【问题描述】:

我在一台电脑上收到此错误,但在另一台电脑上没有。两者都连接到本地 SQLExpress 2008 R2 数据库,该数据库在两台机器上都是相同的。两台机器都有 VS2010 SP1 和 EF4.1(包含在工具更新中)。这是一个在 Cassini 中运行的 MVC3 Web 应用程序项目:

[NotSupportedException:无法创建类型为“System.Collections.Generic.IEnumerable`1”的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。]

我这辈子都想不通为什么会这样 - 它发生在下面的Attach()

IQueryable<Tag> tags = db.Tags.Where(x => !tagIds.Contains(x.Id) && x.Questions.Any(y => y.Id == question.Id));
question.Tags.Attach(tags);

我能想到的唯一区别是一台机器是 32 位的,另一台是 64 位的,但我不知道如何确定这是否是出于某种原因的问题。

有什么想法吗?

TIA

【问题讨论】:

  • 您发布的代码是包裹在if 中还是可能会阻止它在“它工作”的机器上执行的东西?

标签: visual-studio-2010 asp.net-mvc-3 32bit-64bit entity-framework-4.1 cassini


【解决方案1】:

问题的根源在于x =&gt; !tagIds.Contains(x.Id),因为 EF 无法将“包含”转换为 T-SQL。尝试搜索异常以获取更多信息。

【讨论】:

  • 为什么这在一种情况下有效,而在另一种情况下无效? (似乎基于帖子)
  • 该错误是无法解析 lambda 的典型特征。我怀疑代码实际上并没有在一台机器上运行,因此不会失败。
【解决方案2】:

两个本地数据库中的数据不相同,这意味着tagIds 在一台机器上返回null,而在另一台机器上不返回。错误消息不是很有帮助,但这就是它的原因。

在这种情况下使用 Contains 在 EF4 中很好。

【讨论】:

    猜你喜欢
    • 2015-11-08
    • 2015-06-29
    • 2016-09-28
    • 2018-01-06
    • 2016-02-19
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多