当我尝试使用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模型
答案 0 :(得分:9)
我有完全相同的问题,错误声明我的模型中缺少默认(无参数)构造函数。在我的情况下,错误是误导性的 - 我的模型确实包含默认构造函数,但我的 DataContext 没有。我在DataContext中添加了一个默认构造函数 - 问题解决了!
public class ReportEntities : DbContext
{
public ReportEntities():base()
{
}
public ReportEntities(string connection)
: base(connection)
{
}
...
}
答案 1 :(得分:4)
我遇到了同样的问题。这是我修复的方法 -
首先,我在上下文中添加了另一个没有参数的构造函数 class (不是模型类)。
之后我不得不重建项目。非常重要,因为工具读取元数据(在我意识到必须这样做之前,我烧了10分钟)。
一旦我做了这两件事,我就能够毫无问题地添加控制器和视图。
答案 2 :(得分:1)
如果您在单独的项目中拥有EF模型,可以尝试右键单击edmx文件并“添加代码生成项”并选择“ DbContext Generator ”。只有拥有EF 4.1时才能使用此选项(最简单的安装方法是使用NuGet)。看看是否有帮助。每次我对我的模型项目进行更改时,我通常会确保在开始处理其他项目之前构建该项目。
答案 3 :(得分:0)
如果您确实添加了无参数构造函数并且仍然收到错误,那么听起来您的构建不会更新。所以试试这个:
首先,添加一个无参数构造函数:public void Observation(){}
,或根本没有构造函数。
然而,脚手架是使用元数据完成的;反射。在您重试之前,您必须使用模型重建项目。在这种情况下:Observation
确保没有构建错误。
由于您说实体在另一个项目中,请确保引用正确。例如:单击对实体dll的引用,并确保路径正确。另外,请确保Copy Local
上的false
。如果它是真的; dll只能“复制本地”一次。你可能正在使用旧版本。
如果之后仍然失败,请先尝试删除实体dll,然后重建,这样您就可以100%确定是否使用了新版本。