当构造函数是私有的时,为什么EF不能分配我的子集合?

时间:2014-03-10 17:44:12

标签: entity-framework entity-framework-6

我有一个看起来像这样的实体

public class SlideSet {
    public SlideSet(string name) : this() {
       Name = name
    }
    public SlideSet() {
        Params = new HashSet<SlideSetParameter>();
    }

    [Required]
    public string Name { get; set; }
    public virtual ICollection<SlideSetParameter> Params { get; set; } 
}

我只是注意到我实际上并没有使用第二个构造函数,而且它在我的域中实际上没有任何意义所以我将其设为私有。 Params阵列突然停止加载,总是给我一个长度为0.发生了什么事?为了加载它我需要我的构造函数至少受到保护。为什么呢?

2 个答案:

答案 0 :(得分:5)

EF能够创建代理(延迟加载所必需的)的条件之一是

  

该类必须具有公共或受保护的无参数构造函数。

来自here(旧链接,但此部分仍适用)

代理是派生类型,它必须能够调用基类型的无参数构造函数。

答案 1 :(得分:0)

您需要将默认构造函数设置为public,因为这是Entity Framework将用于创建对象的内容。将它作为私有,它无法初始化Params属性,因此尝试将任何SlideSetParameter添加到空对象。