【问题标题】:Adding class to EF Model cause compile error "The type or namespace name <className> could not be found"将类添加到 EF 模型会导致编译错误“找不到类型或命名空间名称 <className>”
【发布时间】:2016-02-04 23:09:07
【问题描述】:

奇怪的是,我已经添加了 5 个表没有问题。但是,当我尝试通过我的 edmx 模型添加我的 PostCodesUK 表时,它给了我这个错误消息:

Error   1   The type or namespace name 'PostCodesUK' could not be found (are you missing a using directive or an assembly reference?)   d:\Ben\documents\visual studio 2013\Projects\DogWalks\DogWalks\App_Code\WalksModel.Context.cs   33  30  DogWalks

不确定发生了什么,但有一些细微的差别。例如,如果我在 WalksModel.tt 类下查看,我可以看到 PostCodesUK 类,但它没有生成额外的“存根”:

如果我然后双击上面的错误,它会将我带到WalksModel.Context.cs,在那里我看到了这个错误:

我查看了PostCodesUK.cs 类下的namespace,它与其他类匹配。有谁知道问题是什么?我在网上搜索了这个问题,但找不到解决方案。

更新: PostCodeUK 类如下所示:

namespace DogWalks.App_Code
{
    using System;
    using System.Collections.Generic;

    public partial class PostCodesUK
    {
        public int PostcodeID { get; set; }
        public string Postcode { get; set; }
        public decimal Latitude { get; set; }
        public decimal Longitude { get; set; }
        public string PostcodeNoSpace { get; set; }
    }
}

此外,我在我的模型中添加了另一个临时表(Person)来测试它,它也给了我与 PostCodesUK 相同的错误消息:

public virtual DbSet<Comment> Comments { get; set; }
...
public virtual DbSet<PostCodesUK> PostCodesUKs { get; set; } //error
public virtual DbSet<Person> People { get; set; } //error

【问题讨论】:

  • 我对此投了赞成票,因为我过去遇到过同样的问题;但不记得我是如何解决的。
  • PostCodesUK 类是什么样的?检查它是否公开。检查命名空间是否也不是 PostCodesUK(因为您需要键入 DbSet)。如果没有,请检查您的解决方案中是否还没有命名空间 PostCodesUK。
  • @tzachs 感谢您的评论。我现在已将类添加到答案中(该类通常看起来像所有其他类(命名空间相同)。奇怪的是,当我尝试添加另一个类时,我遇到了同样的错误,这可能会排除命名空间冲突? 的
  • @Brian 谢谢。这很奇怪。我刚刚尝试添加另一个新表,它也给了我同样的错误信息......非常奇怪

标签: c# asp.net entity-framework webforms ado.net


【解决方案1】:

好吧,在花了无数小时试图找到一个解决方案之后,我实际上可能已经解决了它(touch-wood)。

我很沮丧,所以我删除了我的 edmx 模型。在线阅读,我发现当 edmx 模型保存在子文件夹(而不是根目录)时,VS 2012 存在错误。因此,如果我下面的解决方案不起作用,这可能是值得尝试的,尽管我设法将它保存在子文件夹中。

无论如何,删除我的模型后:

  1. 我将整个数据库模型读入了一个名为 DAL 的 new 文件夹。当我尝试编译时,我注意到我所有的类现在都抛出了同样的错误。
  2. 我更改了所有课程的所有build action(从ContentCompile
  3. 重建的应用程序,它工作。

所以为了测试我试过:

  1. 在我的模型中添加另一个表,Person
  2. 尝试编译(实际上编译正常),但是当我查看 Model.tt 下的 Person.cs 文件时,我发现存根再次丢失:

  1. 我将 Build Action 设置更改为编译、保存、关闭 VS 并重新打开它,存根正确显示:

我不知道这是否是问题所在,但它似乎正在工作。我没有检查我的原始案例,但我怀疑我为原始类更改了.cs 编译模式,但没有为新添加的类更改。

我很高兴我没有把我的机器变成废金属。

【讨论】:

  • 这个!有帮助!我从Compile 更改为Content 重建解决方案,然后又回到Compile 存根存在并且没有错误!
  • 与 VS 2017 预览版的体验相同。具有 15 个实体的 db first 模型中的两个实体显示了这些完全相同的错误。每次重新打开解决方案时,我都必须从 edmx 模型中删除并重新添加两个违规实体。这似乎解决了问题。
  • 重新创建edmx后,关闭并重新打开VS有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2011-11-01
  • 1970-01-01
相关资源
最近更新 更多