【问题标题】:'System.Data.Metadata.Edm.EdmFunction' is not an attribute class'System.Data.Metadata.Edm.EdmFunction' 不是属性类
【发布时间】:2017-07-14 22:21:12
【问题描述】:

我正在维护一个 Visual Studio 2008 应用程序(网站项目)。没有机会升级到更高版本的.net框架或更高版本的实体框架。像许多 IT 商店一样,除非有重大问题,否则人们不会允许我对系统进行重大升级。

.net 框架是 3.5。 EF版本是1.0

我需要更改我的程序,所以我的 select linq 语句将起作用

Calling a SQL User-defined function in a LINQ query

如您所知,我需要在 select 语句中包含存储函数

所以我复制了声明。

我已经挣扎了好几个小时,而且我一直在编译。

//..various using statement
using System.Data.Objects.DataClasses;
using System.Data.Metadata.Edm;

//..other class
public static class EntityFunctions 
{
    [EdmFunction("FBLModel.Store", "SampleFunction")]
    public static int SampleFunction(int param)
    {
        throw new NotSupportedException("Direct calls are not supported.");
    }
}

我不断收到编译错误

错误 CS0246:找不到类型或命名空间名称“EdmFunctionAttribute”(您是否缺少 using 指令或程序集引用?)

我已经搜索了整个互联网,包括 stackoverflow 和 MSDN 博客,命名空间看起来是正确的

有什么建议吗?谢谢

【问题讨论】:

  • 你的异常表明没有任何东西应该直接调用该方法。这让我怀疑没有方法直接调用该方法甚至可能是整个库,因此编译器在构建解决方案时不包含引用,因为它认为它通过忽略未使用的引用来“优化”输出。您可以尝试创建一个硬引用,以便确定编译器没有忽略它吗?例如创建一个名为 test 的公共属性,然后在您的主项目中获取该值一次,以便代码至少接触一次并确保程序集已加载?
  • 上面我说编译器会忽略它,但这并不准确,因为 dll 仍将包含在输出中。我说的是永远不会加载程序集的运行时优化。只是想澄清一下:)
  • T4 模板可能有问题。也许它们属于错误的 EF 版本?转到Model.Context.tt 并检查using System.Data.Objects.DataClasses; 是否包含在内。我从this post 那里得到了提示。
  • 认为一次又一次地解决问题比升级更便宜,这是一个典型的陷阱。这是一个逻辑缺陷(只需阅读一下Thinking,Fast and Slow,Kahneman)。此外,EF 1 是出了名的不成熟,几乎不再使用,因此您几乎只能靠自己。此外,当出现重大问题时,认为您将升级是一种错觉。升级(和回归测试)的最佳时间是没有问题时。
  • 感谢大家的回复。它没有 context.tt。奇怪的。它有 dbml。我不能再使用gui。我必须去文件手动更改。这是我职业生涯中第二次必须这样做。我继承。我能做的不多。我有 4 个项目要做。对于这个旧项目,我只需要确保它不会中断。最终,它将升级。对,这不是正确的时间 BC 我没有时间。哦,这是网站项目。我需要弄清楚它是如何引用dll的。我真的很想K...原来的开发者。我做了2008 b4。不是这样的!

标签: c# entity-framework linq edmx


【解决方案1】:

这里的问题是您的命名空间引用冲突。

System.Data.Metadata.Edm 命名空间包含一个名为 EdmFunction 的类。 System.Data.Objects.DataClasses 命名空间包含一个名为 EdmFunctionattribute 的类(这是您尝试使用的类)。

由于某种原因,您的代码引用了 EdmFunction 类。尝试删除 System.Data.Metadata.Edm 的命名空间导入,因为您可能一开始就不想导入它。

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 2020-06-02
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2015-07-07
    • 2014-12-07
    相关资源
    最近更新 更多