MVC脚手架问题

时间:2011-08-17 19:09:16

标签: asp.net-mvc-3

当我尝试使用Scaffold My Controller时,该页面会抛出以下错误

“无法检索'Entity.Observation'的元数据。没有为此对象定义无参数构造函数。”

你能帮帮我吗?

以下是代码:

 public class Observation
    {
        public Observation() { }

        public virtual int Id { get; set; }
        public virtual DateTime Date { get; set; }
        public virtual User Teacher { get; set; }
        public virtual User Observer { get; set; }
        public virtual AcademicYear AcademicYear { get; set; }
    }

实体在其他项目中,Context在不同的项目中,Controllers和Views在同一个项目中

我正在使用Entity Framework Code First模型

4 个答案:

答案 0 :(得分:9)

我有完全相同的问题,错误声明我的模型中缺少默认(无参数)构造函数。在我的情况下,错误是误导性的 - 我的模型确实包含默认构造函数,但我的 DataContext 没有。我在DataContext中添加了一个默认构造函数 - 问题解决了!

public class ReportEntities : DbContext
    {

    public ReportEntities():base()
        {

        }

    public ReportEntities(string connection)
        : base(connection)
        {

        }

    ...
     }

答案 1 :(得分:4)

我遇到了同样的问题。这是我修复的方法 -

  1. 首先,我在上下文中添加了另一个没有参数的构造函数 class (不是模型类)。

  2. 之后我不得不重建项目。非常重要,因为工具读取元数据(在我意识到必须这样做之前,我烧了10分钟)。

  3. 一旦我做了这两件事,我就能够毫无问题地添加控制器和视图。

答案 2 :(得分:1)

如果您在单独的项目中拥有EF模型,可以尝试右键单击edmx文件并“添加代码生成项”并选择“ DbContext Generator ”。只有拥有EF 4.1时才能使用此选项(最简单的安装方法是使用NuGet)。看看是否有帮助。每次我对我的模型项目进行更改时,我通常会确保在开始处理其他项目之前构建该项目。

答案 3 :(得分:0)

如果您确实添加了无参数构造函数并且仍然收到错误,那么听起来您的构建不会更新。所以试试这个:

  1. 首先,添加一个无参数构造函数:public void Observation(){},或根本没有构造函数。

  2. 然而,脚手架是使用元数据完成的;反射。在您重试之前,您必须使用模型重建项目。在这种情况下:Observation确保没有构建错误。

  3. 由于您说实体在另一个项目中,请确保引用正确。例如:单击对实体dll的引用,并确保路径正确。另外,请确保Copy Local上的false。如果它是真的; dll只能“复制本地”一次。你可能正在使用旧版本。

  4. 如果之后仍然失败,请先尝试删除实体dll,然后重建,这样您就可以100%确定是否使用了新版本。

相关问题