我一直在与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:没有为此对象定义无参数构造函数”
答案 0 :(得分:1)
这是EF的设计缺陷和反射问题的结合。
经常报道:
MissingMethodException:没有为此对象定义无参数构造函数。
当它的含义是“我调用了构造函数并且它引发了异常”。
例如,如果配置文件中的连接字符串不正确 - 通常无法构造EF Context对象;抛出上面的错误。有关格式错误的连接字符串的所有SQL异常似乎都被EF或反射代码所吃掉。
我怀疑这里发生了类似的事情。
启用Visual Studio中的第一次机会异常。查看调试菜单下的异常,选中“抛出”“公共语言运行时异常”框
这应该揭示构造函数中的失败。
答案 1 :(得分:0)
这可能适用于您,也可能不适合您,因为我的情况不同,因为我正在使用EF4的POCO生成模板。
我有一个具有readonly
属性的实体,我不希望在没有设置这些属性值的情况下创建这些属性,因此我创建了一个参数化构造函数。我需要设置的一个属性是从新实体到传入的另一个实体的多对1关系。由于代理修正代码,每当在构造函数中设置了Entity属性时,我收到InvalidOperationException
声明我的实体没有无参数的构造函数。
解决方案:创建了一个protected
无参数构造函数,它有一个空体。我还需要为它的子类做这个。