System.MissingMethodException:将实体添加到集合时,没有为此对象定义无参数构造函数

时间:2010-12-16 09:33:37

标签: entity-framework

我一直在与EFCodeFirst(EFCTP 5)合作几周,没有任何问题 但是现在我在向集合添加实体时遇到异常。

我有User

public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }
}

DbContext

public class Foo : DbContext
{
    public DbSet<User> Users { get; set; }
}

现在我只想将user添加到DbSet

Foo f = new Foo();
User us = new User()
{
    FirstName = "FooName"
};

f.User.Add(us); //The exception is thrown on this line

异常消息是

  

“System.MissingMethodException:没有为此对象定义无参数构造函数”

2 个答案:

答案 0 :(得分:1)

这是EF的设计缺陷和反射问题的结合。

经常报道:

  

MissingMethodException:没有为此对象定义无参数构造函数。

当它的含义是“我调用了构造函数并且它引发了异常”。

例如,如果配置文件中的连接字符串不正确 - 通常无法构造EF Context对象;抛出上面的错误。有关格式错误的连接字符串的所有SQL异常似乎都被EF或反射代码所吃掉。

我怀疑这里发生了类似的事情。

启用Visual Studio中的第一次机会异常。查看调试菜单下的异常,选中“抛出”“公共语言运行时异常”框

这应该揭示构造函数中的失败。

答案 1 :(得分:0)

这可能适用于您,也可能不适合您,因为我的情况不同,因为我正在使用EF4的POCO生成模板。

我有一个具有readonly属性的实体,我不希望在没有设置这些属性值的情况下创建这些属性,因此我创建了一个参数化构造函数。我需要设置的一个属性是从新实体到传入的另一个实体的多对1关系。由于代理修正代码,每当在构造函数中设置了Entity属性时,我收到InvalidOperationException声明我的实体没有无参数的构造函数。

解决方案:创建了一个protected无参数构造函数,它有一个空体。我还需要为它的子类做这个。